|
|
|
#1
|
||||
|
||||
|
try this one, you can remove the DXGI code if you having issues and just use the registry. Should produce the same results.
Code:
uses
Winapi.Windows, Winapi.DXGI, System.Win.Registry;
type
TGPUInfo = record
FName: String;
FSize: Integer;
end;
TGPUs = array of TGPUInfo;
procedure GetGPUs(out V: TGPUs; UseDXGI: Boolean);
function Align(Value, Size: Integer): Integer;
begin
if Value mod Size <> 0 then
Result := Succ(Max(0, Value div Size)) * Size
else
Result := Value;
end;
const
RegPath = 'SOFTWARE\Microsoft\DirectX\';
var
GPUInfo: TGPUInfo;
i, j, k, l: Integer;
x: Int64;
riid: TGUID;
hr: HRESULT;
pFactory: IDXGIFactory;
pAdapter: IDXGIAdapter;
dxAdapterDesc: DXGI_ADAPTER_DESC;
Reg1: TRegIniFile;
Reg2: TRegistry;
SL: TStringList;
mybool: Boolean;
begin
Reg1 := TRegIniFile.Create(KEY_READ or KEY_WOW64_64KEY);
SL := TStringList.Create;
Reg1.RootKey := HKEY_LOCAL_MACHINE;
if Reg1.OpenKey(RegPath, False) then
Reg1.ReadSections(SL);
Reg1.Free;
Reg2 := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
Reg2.RootKey := HKEY_LOCAL_MACHINE;
if UseDXGI then
begin
riid := StringToGUID('{7b7166ec-21c7-44ae-b21a-c9ae321ae369}');
pFactory := nil;
hr := CreateDXGIFactory(riid, pFactory);
if (hr = S_OK) and Assigned(pFactory) then
begin
pAdapter := nil;
i := 0;
while (pFactory.EnumAdapters(i, pAdapter) = S_OK) do
begin
FillChar(dxAdapterDesc, SizeOf(DXGI_ADAPTER_DESC), 0);
hr := pAdapter.GetDesc(dxAdapterDesc);
if hr = S_OK then
begin
GPUInfo.FName := dxAdapterDesc.Description;
GPUInfo.FSize := IfThen(dxAdapterDesc.DedicatedVideoMemory = 0,
dxAdapterDesc.DedicatedSystemMemory,
dxAdapterDesc.DedicatedVideoMemory) shr 20;
if dxAdapterDesc.DedicatedSystemMemory = 0 then
for j := 0 to SL.Count - 1 do
begin
if Reg2.OpenKey(RegPath + SL[j], False) then
begin
if (Reg2.ReadString('Description') = GPUInfo.FName) then
if Reg2.ReadBinaryData('DedicatedVideoMemory', x, x.Size) = x.Size
then
begin
GPUInfo.FSize := x shr 20;
break;
end;
Reg2.CloseKey;
end;
end;
GPUInfo.FSize := Align(GPUInfo.FSize, IfThen(GPUInfo.FSize < 512,
32, 512));
Insert(GPUInfo, V, Length(V));
end;
inc(i);
end;
end;
end;
for j := 0 to SL.Count - 1 do
begin
if Reg2.OpenKey(RegPath + SL[j], False) then
begin
mybool := True;
for i := Low(V) to High(V) do
begin
if (Reg2.ReadString('Description') = V[i].FName) then
begin
mybool := False;
break;
end;
end;
if mybool then
begin
GPUInfo.FName := Reg2.ReadString('Description');
x := 0;
if Reg2.ReadBinaryData('DedicatedVideoMemory', x, x.Size) = x.Size then
x := x shr 20;
if x = 0 then
if Reg2.ReadBinaryData('DedicatedSystemMemory', x, x.Size) = x.Size
then
x := x shr 20;
GPUInfo.FSize := x;
GPUInfo.FSize := Align(GPUInfo.FSize, IfThen(GPUInfo.FSize < 512,
32, 512));
Insert(GPUInfo, V, Length(V));
end;
end;
Reg2.CloseKey;
end;
SL.Free;
Reg2.Free;
for i := Low(V) to High(V) do
begin
k := 0;
for j := Low(V) to High(V) do
if V[j].FSize >= k then
begin
k := V[i].FSize;
l := j
end;
GPUInfo := V[i];
V[i] := V[l];
V[l] := GPUInfo;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
MyGPUs: TGPUs;
begin
Memo1.Lines.Clear;
GetGPUs(MyGPUs, True);
for i := Low(MyGPUs) to High(MyGPUs) do
Memo1.Lines.Add(MyGPUs[i].FName + ' (' + MyGPUs[i].FSize.ToString + ' MB)');
end;
Last edited by Razor12911; 31-05-2020 at 06:43. |
| The Following 5 Users Say Thank You to Razor12911 For This Useful Post: | ||
audiofeel (04-07-2026), BLACKFIRE69 (31-05-2020), Cesar82 (31-05-2020), Harsh ojha (31-05-2020), Jiva newstone (31-05-2020) | ||
| Sponsored Links |
|
#2
|
||||
|
||||
|
Thanks @Razor12911
I just didn't understand one thing ... In your code above, the registration information overlaps the GDXI values (if parametter UseDXGI = true). Shouldn't there be an "end else" in place of "end;"? Code:
inc(i);
end;
end;
end else
for j := 0 to SL.Count - 1 do
begin
Thanks again Razor12911 for the code, it's working perfectly, especially the version using registry that also detects the ON-BOARD video card. Last edited by Cesar82; 01-06-2020 at 08:00. Reason: After explaining Razor12911 I removed the "end else" from my modified file. |
| The Following User Says Thank You to Cesar82 For This Useful Post: | ||
BLACKFIRE69 (07-06-2020) | ||
|
#3
|
||||
|
||||
|
I made it to work like that for a reason. Remember you said your intel you was not detected. So after dxgi is done detecting gpus using its methods, if any gpus were missed then registry code adds the remaining gpus. This is why I didn’t use “else”.
But then you might say why not just get rid of dxgi if doesn’t detect all gpus. Here is why, registry skips gpus with names that have already been detected which means if SLi/Crossfire was used, registry method will not be able to detect this but dxgi will be able to. While dxgi has issues of detecting intel gpu, registry helps dxgi Plus we have no idea if the same registry idea works on older operating systems so it’s best to have both methods working together So you can see why both code have to exist because they nullify the disadvantages they both have, furthermore. Dxgi has issues detecting gpu size in x86 because the value type used in x86 has the same issue as with wmi adapterram where gpu over 4gb is misread. Tl;dr both code help mitigate their own disadvantages so the code works flawlessly Last edited by Razor12911; 01-06-2020 at 01:10. |
| The Following User Says Thank You to Razor12911 For This Useful Post: | ||
Cesar82 (01-06-2020) | ||
|
#4
|
||||
|
||||
|
@Razor12911
Now I understand. Thanks! There will only be differences in the results checking or not DXGI if you use SLI/Crossfire. |
|
#5
|
||||
|
||||
|
SysInfo Library 2 Added:
Thanks Cesar82, Razor12911 ... who helped. |
| The Following 4 Users Say Thank You to BLACKFIRE69 For This Useful Post: | ||
bunti_o4u (07-06-2020), Harsh ojha (07-06-2020), Jiva newstone (07-06-2020), Razor12911 (07-06-2020) | ||
|
#6
|
||||
|
||||
|
Quote:
It seems to be working perfectly. For those who have Inno Setup 6 installed and do not have the knowledge to change the script and want to do the test, I attached to this post the script adapted for Inno Setup 6.0 or newer. |
| The Following 3 Users Say Thank You to Cesar82 For This Useful Post: | ||
|
#7
|
||||
|
||||
|
retrieving directX version makes the setup to take more time then if directX is not added in script. pl look into it.
Last edited by bunti_o4u; 07-06-2020 at 23:42. |
|
#8
|
||||
|
||||
|
got it... 👍
|
|
#9
|
||||
|
||||
|
Soundcard is Realtek high definition audio but it is showing Nvidia high definition audio.
|
|
#10
|
|||
|
|||
|
did you plugin your woofer or earphone
|
|
#11
|
||||
|
||||
|
Works fine here
__________________
Haters gonna hate
|
| The Following 2 Users Say Thank You to KaktoR For This Useful Post: | ||
BLACKFIRE69 (08-06-2020), Gehrman (04-12-2022) | ||
|
#12
|
||||
|
||||
|
Perfect
(Low End Pc)
__________________
Video Creator Discord - Harsh_Ojha_748 #8782 |
| The Following 2 Users Say Thank You to Harsh ojha For This Useful Post: | ||
BLACKFIRE69 (09-06-2020), Gehrman (04-12-2022) | ||
|
#13
|
|||
|
|||
|
Hi is there anyone here on the forum that WILL help me.
I have asked 3 people but no one wants to help. Who can change the script from Project1 or SysInfo DLL 2 and make it into a batch script ? Project1 you have to click on a button first to read the GPU Memory, I want the GPU Memory to be read and saved on the desktop as .txt and the script preferably as a batch file. SysInfo DLL 2 also looks good, but only read out and save as .txt with a batch script. Now it's a setup and you have to click Next, I don't want to see a fixed screen at all. This would also be nice in a batch file. Detecting Graphics Adapter Data Basic Graphics Information Adapter 1 Description : NVidia RTX 2070 Super Adapter 1 Video Memory : 8.00 GB [Rounded Value]. Adapter 1 Driver Date : 2021-02-23 Adapter 1 Driver Version : 27.21.14.6172 Adapter 1 Bits Per Pixel : 32 Adapter 1 Video Mode Desc : 1920 x 1080 x 4294967296 colors Adapter 2 Intel(R) HD Graphics 4600 (128 MB) Adapter 2 Video Memory : 128 MB [Rounded Value] Adapter 2 Driver Date : 2021-02-23 Adapter 2 Driver Version : 27.21.14.6172 Adapter 2 Bits Per Pixel : 32 Adapter 2 Video Mode Desc : 1920 x 1080 x 4294967296 colors And if that's not possible, then just this, Adapter 1 Description : NVidia RTX 2070 Super Adapter 1 Video Memory : 8.00 GB [Rounded Value] Adapter 2 Intel(R) HD Graphics 4600 (128 MB) Adapter 2 Video Memory : 128 MB [Rounded Value] Display this script with read in and then save it to the desktop as a .txt Please message back if you are willing and able to make this batch script for me please, if you have the time. Then you are the best for me. Best regards |
|
#14
|
||||
|
||||
|
1) Your dll was very good, but in the [ANSI] version, (Free Space) and (Total Space), it shows the disk size incorrectly.
2) Not working on windowsXP (X86)/(X64)
__________________
¤ Life good be a Dream ¤ Last edited by Lord.Freddy; 03-09-2022 at 23:56. |
|
#15
|
||||
|
||||
|
Quote:
01. it is showing GPU name and memory as weird numbers. GPU description is Zotac rtx 2070 super 8GB. 02. 9700k has 8 cores and 8 threads but it is showing as 4 cores and 8 threads. 03. It is showing RAM as 8GB though my pc has 16GB of RAM Last edited by bunti_o4u; 12-04-2020 at 08:23. |
| The Following 2 Users Say Thank You to bunti_o4u For This Useful Post: | ||
BLACKFIRE69 (12-04-2020), Titeuf (18-04-2020) | ||
![]() |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Nero Plugin to burn mdf/mds images | Kall | CD/DVD Software & Utilities | 6 | 09-11-2007 02:29 |
| REQUEST : SDF plugin and AHX tool | --=FamilyGuy=-- | DC Games | 4 | 20-04-2007 13:13 |
| is there a a gamecube plugin to 3d studio max | gamesmell | GameCube Games | 1 | 12-03-2004 23:54 |
| FlaskMPEG & Panasonic Plugin: Plugin has "Fatal Error" | dan | CD/DVD Software & Utilities | 1 | 15-11-2000 16:23 |