Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 1.51 c
2-1155203206
Piero
2006-08-10 13:46
2006.09.03
Вопрос про TList


2-1155027490
ArtemESC
2006-08-08 12:58
2006.09.03
TFileStream...


2-1155372371
Steplerr
2006-08-12 12:46
2006.09.03
CheckBox ы в TreeView е


2-1155544801
lllEl
2006-08-14 12:40
2006.09.03
RAVE REPORT


1-1153490037
BFG9k
2006-07-21 17:53
2006.09.03
Не удается активизировать XMLDocument





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский