Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.03;
Скачать: CL | DM;

Вниз

Как узнать количество памяти видеокарты????   Найти похожие ветки 

 
gektorrr ©   (2006-04-16 15:32) [0]

Как узнать количество памяти видеокарты???? весь инет облазил,ну нигде нет????


 
Anatoly Podgoretsky ©   (2006-04-16 16:57) [1]

Реального применения задача не имеет.


 
n0name   (2006-04-17 15:22) [2]


program GetVideoRAM;

uses
 SysUtils,
 Windows,
 ActiveX,
 WMIInterfaces;

{$R *.res}

var
hRes: HRESULT;
pLoc: IWbemLocator;
pSvc: IWbemServices;
pEnumerator: IEnumWbemClassObject;
pClsObj: IWbemClassObject;
Return: DWORD;
vtProp: OleVariant;

begin
pLoc := nil;
pSvc := nil;
pEnumerator := nil;
pClsObj := nil;

hRes := CoInitializeEx(nil, COINIT_MULTITHREADED);
if (hRes <> S_OK) then
 begin
  MessageBoxA(0, "CoInitializeEx() Error", "Error!", 0);
  exit;
 end;
hRes := CoInitializeSecurity(nil, -1, nil, nil, 0, 3, nil, 0, nil);
if (hRes <> S_OK) then
 begin
  MessageBoxA(0, "CoInitializeSecurity() Error", "Error!", 0);
  CoUninitialize;
  exit;
 end;
hRes := CoCreateInstance(CLSID_WbemLocator, nil, CLSCTX_INPROC_SERVER, IID_IWbemLocator, pLoc);
if (hRes <> S_OK) then
 begin
  MessageBoxA(0, PChar("CoCreateInstance() Error N" + IntToHex(hRes, 8)), "Error!", 0);
  CoUninitialize;
  exit;
 end;
hRes := pLoc.ConnectServer(PWChar(WideString("ROOT\CIMV2")), nil, nil, nil, 0, nil, nil, @pSvc);
if (hRes <> S_OK) then
 begin
  MessageBoxA(0, PChar("pLoc.ConnectServer() Error N" + IntToHex(hRes, 8)), "Error!", 0);
  pLoc._Release;
  CoUninitialize;
  exit;
 end;
hRes := CoSetProxyBlanket(pSvc, 10, 0, nil, 3, 3, nil, 0);
if (hRes <> S_OK) then
 begin
  MessageBoxA(0, "CoSetProxyBlanket Error", "Error!", 0);
  pSvc._Release;
  pLoc._Release;
  CoUninitialize;
  exit;
 end;
hRes := pSvc.ExecQuery(PWChar(WideString("WQL")), PWChar(WideString("SELECT * FROM Win32_VideoController")), $30, nil, @pEnumerator);
if (hRes <> S_OK) then
 begin
  MessageBoxA(0, "pSvc.ExecQuery Error", "Error!", 0);
  pSvc._Release;
  pLoc._Release;
  CoUninitialize;
  exit;
 end;

Return := 0;
while (pEnumerator <> nil) do
 begin
  pEnumerator.Next(DWORD(-1), 1, @pClsObj, @Return);
  if Return = 0 then break;
  VariantInit(vtProp);
  pClsObj.Get(PWChar(WideString("AdapterRAM")), 0, @vtProp, nil, nil);
  MessageBoxA(0, PChar(IntToStr(vtProp shr 20) + "Mb"), "Adapter RAM", 0);
  VariantClear(vtProp);
 end;
 
pSvc._Release;
pLoc._Release;
pEnumerator._Release;
pClsObj._Release;
CoUninitialize;
end.


 
miek ©   (2006-04-18 08:22) [3]

n0name, что за изврат!!!
Не слушайте его, все это легко и элементарно делается через IDirectDraw.
См. MSDN


 
n0name   (2006-04-18 19:28) [4]


> n0name, что за изврат!!!

Где изврат? =)
WMI пржде всего и создана для получении информации о системе.

> Не слушайте его, все это легко и элементарно делается через
> IDirectDraw.

Можно и так, через IDirectDraw4::GetCaps.


 
Otter ©   (2006-04-23 19:52) [5]

Объясните, как собственно подключить это IDirectDraw4 к программе на Delphi....! В MSDN-е это не говорится.


 
miek ©   (2006-04-24 08:21) [6]

>WMI пржде всего и создана для получении информации о системе
Служба WMI может быть отключена или вообще отсутствовать, а directx есть везде.


 
Плохиш ©   (2006-04-24 11:33) [7]


> а directx есть везде.

Чё правда?


 
homm ©   (2006-04-24 12:17) [8]


> > а directx есть везде.
>
> Чё правда?

если вин95 НЕ оср2 в расчет не брать, то везде


 
homm ©   (2006-04-24 12:18) [9]

ЗЫ омхо вин95 НЕ оср2 уже в 96 году был редкостью


 
jack128 ©   (2006-04-24 12:51) [10]

n0name   (17.04.06 15:22) [2]
Изврат не использование wmi , а ручной вызов _Release интерфейсов.  В дельфи - это не позволительно..


 
kernel ©   (2006-04-24 17:18) [11]


> ЗЫ омхо вин95 НЕ оср2 уже в 96 году был редкостью


Можно гордо говорить, что "десять лет назад!"  :>)


 
Unsigned ©   (2006-04-25 01:01) [12]

2 Otter
Заюзай хедеры!
http://clootie.narod.ru/delphi/download_dx90.html#Headers_DirectX90


 
ancara ©   (2006-04-25 16:39) [13]

var
 DDraw: IDirectDraw;
 DDraw7: IDirectDraw7;
 DDResult: HResult;
 TotalVM, FreeVM: DWORD;
 DriverCaps: TDDCaps;
 HELCaps: TDDCaps;

begin
 DDResult := DirectDrawCreate(nil,DDraw,nil);
 if DDResult<>0 then
 begin
   ShowMessage("Error creating DirectDraw object.");
   Halt;
 end;
 DDResult := DDraw.QueryInterface(IID_IDirectDraw7, DDraw7);
 if DDResult<>0 then
 begin
   ShowMessage("Interface IDirectDraw7 not supported.");
   Halt;
 end;

 DriverCaps.dwSize:=sizeof(TDDCaps);
 DDResult := DDraw7.SetCooperativeLevel(Handle, DDSCL_NORMAL);
 if DDResult<>0 then exit;

 DDResult := DDraw7.GetCaps(@DriverCaps, @HELCaps);
 if DDResult<>0 then exit;

 TotalVM:=DriverCaps.dwVidMemTotal;
 FreeVM:=DriverCaps.dwVidMemFree;
end;


 
ancara ©   (2006-04-25 16:45) [14]


> Anatoly Podgoretsky ©   (16.04.06 16:57) [1]
> Реального применения задача не имеет.
>

 Имеет.
 Одно из применений - мониторинг видеопамяти, определение объема занятой памяти в процентном выражении.


 
gektorrr ©   (2006-05-05 15:03) [15]

WMIInterfaces- а что это за модуль такой, на распознается.........?

пересмотрел все что нашел в нете про IDirectDraw, но ответа так и не нашел, не подскажешь как именно?


 
n0name   (2006-05-05 16:24) [16]


unit WMIInterfaces;

interface

uses
Windows,
ActiveX;

type
PPIWbemLocator = ^PIWbemLocator;
PPIWbemContext = ^PIWbemContext;
PPIWbemServices = ^PIWbemServices;
PPIWbemObjectSink = ^PIWbemObjectSink;
PPIWbemCallResult = ^PIWbemCallResult;
PPIWbemClassObject = ^PIWbemClassObject;
PPIWbemQualifierSet = ^PIWbemQualifierSet;
PPIEnumWbemClassObject = ^PIEnumWbemClassObject;
PIWbemLocator = ^IWbemLocator;
PIWbemContext = ^IWbemContext;
PIWbemServices = ^IWbemServices;
PIWbemObjectSink = ^IWbemObjectSink;
PIWbemCallResult = ^IWbemCallResult;
PIWbemClassObject = ^IWbemClassObject;
PIWbemQualifierSet = ^IWbemQualifierSet;
PIEnumWbemClassObject = ^IEnumWbemClassObject;

IWbemContext = interface(IUnknown)
 ["{44ACA674-E8FC-11D0-A07C-00C04FB68820}"]
 function Clone(ppNewCopy: PPIWbemContext): HRESULT; stdcall;
 function GetNames(lFlags: DWORD; pNames: PSafeArray): HRESULT; stdcall;
 function BeginEnumeration(lFlags: DWORD): HRESULT; stdcall;
 function Next(lFlags: DWORD; pstrName: PBStr; pValue: POleVariant): HRESULT; stdcall;
 function EndEnumeration(): HRESULT; stdcall;
 function SetValue(wszName: LPCWSTR; lFlags: DWORD; pValue: POleVariant): HRESULT; stdcall;
 function GetValue(wszName: LPCWSTR; lFlags: DWORD; pValue: POleVariant): HRESULT; stdcall;
 function DeleteValue(wszName: LPCWSTR; lFlags: DWORD): HRESULT; stdcall;
 function DeleteAll(): HRESULT; stdcall;        
end;

IWbemCallResult = interface(IUnknown)
 ["{44ACA675-E8FC-11D0-A07C-00C04FB68820}"]
 function GetResultObject(lTimeout: DWORD; ppResultObject: PPIWbemClassObject): HRESULT; stdcall;
 function GetResultString(lTimeout: DWORD; pstrResultString: PBStr): HRESULT; stdcall;
 function GetResultServices(lTimeout: DWORD; ppServices: PPIWbemServices): HRESULT; stdcall;
 function GetCallStatus(lTimeout: DWORD; plStatus: PDWORD): HRESULT; stdcall;        
end;

IWbemQualifierSet = interface(IUnknown)
 ["{DC12A680-737F-11CF-884D-00AA004B2E24}"]
 function Get(wszName: LPCWSTR; lFlags: DWORD; pVal: POleVariant; plFlavor: PDWORD): HRESULT; stdcall;
 function Put(wszName: LPCWSTR; pVal: POleVariant; lFlavor: DWORD): HRESULT; stdcall;
 function Delete(wszName: LPCWSTR): HRESULT; stdcall;
 function GetNames(lFlags: DWORD; pNames: PSafeArray): HRESULT; stdcall;
 function BeginEnumeration(lFlags: DWORD): HRESULT; stdcall;
 function Next(lFlags: DWORD; pstrName: PBStr; pVal: POleVariant; plFlavor: PDWORD): HRESULT; stdcall;
 function EndEnumeration(): HRESULT; stdcall;
end;

IWbemObjectSink = interface(IUnknown)
 ["{7C857801-7381-11CF-884D-00AA004B2E24}"]
 function Indicate(lObjectCount: DWORD; apObjArray: PPIWbemClassObject): HRESULT; stdcall;
 function SetStatus(lFlags: DWORD; hResult: DWORD; strParam: TBStr; pObjParam: PIWbemClassObject): HRESULT; stdcall;    
end;

IWbemClassObject = interface(IUnknown)
 ["{DC12A681-737F-11CF-884D-00AA004B2E24}"]
 function GetQualifierSet(ppQualSet: PPIWbemQualifierSet): HRESULT; stdcall;
 function Get(wszName: LPCWSTR; lFlags: DWORD; pVal: POleVariant; pType: PDWORD; plFlavor: PDWORD): HRESULT; stdcall;
 function Put(wszName: LPCWSTR; lFlags: DWORD; pVal: POleVariant; lType: DWORD): HRESULT; stdcall;
 function Delete(wszName: LPCWSTR): HRESULT; stdcall;
 function GetNames(wszQualifierName: LPCWSTR; lFlags: DWORD; pQualifierVal: POleVariant; pNames: PSafeArray): HRESULT; stdcall;  
 function BeginEnumeration(lEnumFlags: DWORD): HRESULT; stdcall;  
 function Next(lFlags: DWORD; strName: PBStr; pVal: POleVariant; pType: PDWORD; plFlavor: PDWORD): HRESULT; stdcall;  
 function EndEnumeration(): HRESULT; stdcall;  
 function GetPropertyQualifierSet(wszProperty: LPCWSTR; ppQualSet: PPIWbemQualifierSet): HRESULT; stdcall;
 function Clone(ppCopy: PPIWbemClassObject): HRESULT; stdcall;
 function GetObjectText(lFlags: DWORD; pstrObjectText: PBStr): HRESULT; stdcall;
 function SpawnDerivedClass(lFlags: DWORD; ppNewClass: PPIWbemClassObject): HRESULT; stdcall;
 function SpawnInstance(lFlags: DWORD; ppNewInstance: PPIWbemClassObject): HRESULT; stdcall;  
 function CompareTo(lFlags: DWORD; pCompareTo: PIWbemClassObject): HRESULT; stdcall;
 function GetPropertyOrigin(wszName: LPCWSTR; pstrClassName: PBStr): HRESULT; stdcall;  
 function InheritsFrom(strAncestor: LPCWSTR): HRESULT; stdcall;  
 function GetMethod(wszName: LPCWSTR; lFlags: DWORD; ppInSignature: PPIWbemClassObject; ppOutSignature: PPIWbemClassObject): HRESULT; stdcall;
 function PutMethod(wszName: LPCWSTR; lFlags: DWORD; pInSignature: PIWbemClassObject; pOutSignature: PIWbemClassObject): HRESULT; stdcall;
 function DeleteMethod(wszName: LPCWSTR): HRESULT; stdcall;
 function BeginMethodEnumeration(lEnumFlags: DWORD): HRESULT; stdcall;  
 function NextMethod(lFlags: DWORD; pstrName: PBStr; ppInSignature: PPIWbemClassObject; ppOutSignature: PPIWbemClassObject): HRESULT; stdcall;
 function EndMethodEnumeration(): HRESULT; stdcall;  
 function GetMethodQualifierSet(wszMethod: LPCWSTR; ppQualSet: PPIWbemQualifierSet): HRESULT; stdcall;
 function GetMethodOrigin(wszMethodName: LPCWSTR; pstrClassName: PBStr): HRESULT; stdcall;
end;

IEnumWbemClassObject = interface(IUnknown)
 ["{027947E1-D731-11CE-A357-000000000001}"]
 function Reset(): HRESULT; stdcall;
 function Next(lTimeout: DWORD; uCount: DWORD; apObjects: PPIWbemClassObject; puReturned: PDWORD): HRESULT; stdcall;
 function NextAsync(uCount: DWORD; pSink: PIWbemObjectSink): HRESULT; stdcall;
 function Clone(ppEnum: PPIEnumWbemClassObject): HRESULT; stdcall;
 function Skip(lTimeout: DWORD; nCount: DWORD): HRESULT; stdcall;          
end;


 
n0name   (2006-05-05 16:25) [17]


IWbemServices = interface(IUnknown)
 ["{9556DC99-828C-11CF-A37E-00AA003240C7}"]
 function OpenNamespace(strNamespace: TBStr; lFlags: DWORD; pCtx: PIWbemContext; ppWorkingNamespace: PPIWbemServices;
  ppResult: PPIWbemCallResult): HRESULT; stdcall;
 function CancelAsyncCall(pSink: PIWbemObjectSink): HRESULT; stdcall;
 function QueryObjectSink(lFlags: DWORD; ppResponseHandler: PPIWbemObjectSink): HRESULT; stdcall;
 function GetObject(strObjectPath: TBStr; lFlags: DWORD; pCtx: PIWbemContext; ppObject: PPIWbemClassObject;
  ppCallResult: PPIWbemCallResult): HRESULT; stdcall;
 function GetObjectAsync(strObjectPath: TBStr; lFlags: DWORD; pCtx: PIWbemContext; pResponseHandler: PIWbemObjectSink): HRESULT; stdcall;
 function PutClass(pObject: PIWbemClassObject; lFlags: DWORD; pCtx: PIWbemContext; ppCallResult: PPIWbemCallResult): HRESULT; stdcall;
 function PutClassAsync(pObject: PIWbemClassObject; lFlags: DWORD; pCtx: PIWbemContext; pResponseHandler: PIWbemObjectSink): HRESULT; stdcall;
 function DeleteClass(strClass: TBStr; lFlags: DWORD; pCtx: PIWbemContext; ppCallResult: PPIWbemCallResult): HRESULT; stdcall;
 function DeleteClassAsync(strClass: TBStr; lFlags: DWORD; pCtx: PIWbemContext; pResponseHandler: PIWbemObjectSink): HRESULT; stdcall;
 function CreateClassEnum(strSuperclass: TBStr; lFlags: DWORD; pCtx: PIWbemContext; ppEnum: PPIEnumWbemClassObject): HRESULT; stdcall;
 function CreateClassEnumAsync(strSuperclass: TBStr; lFlags: DWORD; pCtx: PIWbemContext; pResponseHandler: PIWbemObjectSink): HRESULT; stdcall;
 function PutInstance(pInst: PIWbemClassObject; lFlags: DWORD; pCtx: PIWbemContext; ppCallResult: PPIWbemCallResult): HRESULT; stdcall;
 function PutInstanceAsync(pInst: PIWbemClassObject; lFlags: DWORD; pCtx: PIWbemContext; pResponseHandler: PIWbemObjectSink): HRESULT; stdcall;
 function DeleteInstance(strObjectPath: TBStr; lFlags: DWORD; pCtx: PIWbemContext; ppCallResult: PPIWbemCallResult): HRESULT; stdcall;
 function DeleteInstanceAsync(strObjectPath: TBStr; lFlags: DWORD; pCtx: PIWbemContext; pResponseHandler: PIWbemObjectSink): HRESULT; stdcall;
 function CreateInstanceEnum(strFilter: TBStr; lFlags: DWORD; pCtx: PIWbemContext; ppEnum: PPIEnumWbemClassObject): HRESULT; stdcall;
 function CreateInstanceEnumAsync(strFilter: TBStr; lFlags: DWORD; pCtx: PIWbemContext; pResponseHandler: PIWbemObjectSink): HRESULT; stdcall;
 function ExecQuery(strQueryLanguage: TBStr; strQuery: TBStr; lFlags: DWORD; pCtx: PIWbemContext; ppEnum: PPIEnumWbemClassObject): HRESULT; stdcall;
 function ExecQueryAsync(strQueryLanguage: TBStr; strQuery: TBStr; lFlags: DWORD; pCtx: PIWbemContext;
  pResponseHandler: PIWbemObjectSink): HRESULT; stdcall;
 function ExecNotificationQuery(strQueryLanguage: TBStr; strQuery: TBStr; lFlags: DWORD; pCtx: PIWbemContext;
  ppEnum: PPIEnumWbemClassObject): HRESULT; stdcall;
 function ExecNotificationQueryAsync(strQueryLanguage: TBStr; strQuery: TBStr; lFlags: DWORD; pCtx: PIWbemContext;
  pResponseHandler: PIWbemObjectSink): HRESULT; stdcall;
 function ExecMethod(strObjectPath: TBStr; strMethodName: TBStr; lFlags: DWORD; pCtx: PIWbemContext;
  pInParams: PIWbemClassObject; ppOutParams: PPIWbemClassObject; ppCallResult: PPIWbemCallResult): HRESULT; stdcall;
 function ExecMethodAsync(strObjectPath: TBStr; strMethodName: TBStr; lFlags: DWORD; pCtx: PIWbemContext;
  pInParams: PIWbemClassObject; pResponseHandler: PIWbemObjectSink): HRESULT; stdcall;
end;

IWbemLocator = interface(IUnknown)
 ["{DC12A687-737F-11CF-884D-00AA004B2E24}"]
 function ConnectServer(strNetworkResource: TBStr; strUser: TBStr; strPassword: TBStr; strLocale: TBStr; lSecurityFlags: DWORD;
  strAuthority: TBStr; pCtx: PIWbemContext; ppNamespace: PPIWbemServices): HRESULT; stdcall;
end;

const
CLSID_WbemLocator: TGUID = "{4590F811-1D3A-11D0-891F-00AA004B2E24}";
IID_IWbemLocator: TGUID = "{DC12A687-737F-11CF-884D-00AA004B2E24}";

implementation

end.


 
gektorrr ©   (2006-05-05 23:51) [18]

Program GetVideoRAM теперь работает, выводит правильно........но почему-то при повторном вызове зависает и выдает ошибку:
Project Project1.exe raised exception class EAccessVioletion with message "Access violation at adress 004058DE in module"Project1.exe".Read of address 0104ffE8".
Что не так?????

А программа ancara ©   (25.04.06 16:39) [13] запускается, но никакого результата нне выводит, а тут в чем проблема?????


 
gektorrr ©   (2006-05-05 23:51) [19]

Program GetVideoRAM теперь работает, выводит правильно........но почему-то при повторном вызове зависает и выдает ошибку:
Project Project1.exe raised exception class EAccessVioletion with message "Access violation at adress 004058DE in module"Project1.exe".Read of address 0104ffE8".
Что не так?????

А программа ancara ©   (25.04.06 16:39) [13] запускается, но никакого результата нне выводит, а тут в чем проблема?????


 
gektorrr ©   (2006-05-05 23:53) [20]

Program GetVideoRAM теперь работает, выводит правильно........но почему-то при повторном вызове зависает и выдает ошибку:
Project Project1.exe raised exception class EAccessVioletion with message "Access violation at adress 004058DE in module"Project1.exe".Read of address 0104ffE8".
Что не так?????

А программа ancara ©   (25.04.06 16:39) [13] запускается, но никакого результата нне выводит, а тут в чем проблема?????


 
gektorrr ©   (2006-05-05 23:53) [21]

Program GetVideoRAM теперь работает, выводит правильно........но почему-то при повторном вызове зависает и выдает ошибку:
Project Project1.exe raised exception class EAccessVioletion with message "Access violation at adress 004058DE in module"Project1.exe".Read of address 0104ffE8".
Что не так?????

А программа ancara ©   (25.04.06 16:39) [13] запускается, но никакого результата нне выводит, а тут в чем проблема?????


 
gektorrr ©   (2006-05-05 23:59) [22]

Program GetVideoRAM теперь работает, выводит правильно........но почему-то при повторном вызове зависает и выдает ошибку:
Project Project1.exe raised exception class EAccessVioletion with message "Access violation at adress 004058DE in module"Project1.exe".Read of address 0104ffE8".
Что не так?????

А программа ancara ©   (25.04.06 16:39) [13] запускается, но никакого результата нне выводит, а тут в чем проблема?????


 
gektorrr ©   (2006-05-06 20:04) [23]

Sorry, заело......


 
ancara ©   (2006-05-10 10:44) [24]

в TotalVM хранится значение, соответствующее полному объему видеопамяти,
в FreeVM - значение, соответствующее объему свободной.



Страницы: 1 вся ветка

Текущий архив: 2006.09.03;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.078 c
15-1154991416
Германн
2006-08-08 02:56
2006.09.03
Ещё один дурацкий сабж про пиратство.


15-1155392134
SergP
2006-08-12 18:15
2006.09.03
RSDN magazine в электронном виде. Есть где-то или нет?


15-1155212113
PhpEnginer
2006-08-10 16:15
2006.09.03
PHP engine


3-1151495892
Ega23
2006-06-28 15:58
2006.09.03
Как узнать - Identity поле, или нет?


2-1155477729
AlexanderMS
2006-08-13 18:02
2006.09.03
Изменение стандартных диалогов.