[Delphi] Informacje o sprzęcie

0

;(

Czy wie ktoś może jak uzyskać z poziomu Delphi informacje na temat płyty głównej (producent, model, rodzaj biosu, wersje biosu) oraz karty graficznej (producent, model, wielkość pamięci, wersję biosu).

Za wszelkie podpowiedz będę bardzo wdzięczny.

Z góry dziękuję

{hello}

0

Też chciałbym wiedzieć.
Słyszałem coś o jakimś komponencie, ale już nie pamiętam.

Uwielbiam programować

W razie problemu, ksišżka pomoże

0

Wiem że w rejestrze są informacje np. o karcie graficznej (producent, model, ilość pamięci, zegary pamięci i procesora graficznego ...) ale jeśli program nie zna producenta to jak je odczytać.
Nazwa klucza zmienia się (w każdym razie w XP) w zależności od sprzętu jaki się ma.
I co z tym zrobić??
{glowa}

0

komponent MSI na tej stronie ma sporo możliwosci odczytywania danych o sprzęcie i systemie, nic nie gwarantuje, ale sprawdzić mozna--Spin
Delphi - Lets make Windows better....

0

Napisałeś, że dla każdego sprzętu w rejestrze jest inny klucz. Ale chyba nie do końca:

  1. Procesor:
    HKEY_LOCAL_MACHINE\Hordware\Description\System\CenteralProcessor\0
    I tu są informacje: {na przykładzie mojego sprzętu}
    Identifier "Pentium(r) ll Processor"
    MMXIdentifier "Intel MMX(TM) Technology"
    Update Status 0x0000002 (2) {o co chodzi?}
    VendorIdentifier "GenuineIntel" {o co chodzi?}
    Zobacz jak jest na twoim sprzęcie. Może wystarczy tylko odczytywać ten Identifier?
    A wiesz może co oznacza Update Status i VendorIdentifier?

  2. Drukarka:
    (sterownik) HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print\Environments\Windows 4.0\Drivers\HP DeskJet 610C Series
    {HP DeskJet 610C Series, to tu musi być nazwa drukarki twojej}
    A tu jest:{tylko te warzniejsze}
    Configuration File "HPFDJC20.drv" {chyba sterownik}
    Data File "HPFDJC20.drv" {chyba sterownik}
    Driver "HPFDJC20.drv" {chyba sterownik}
    Zobacz jak u ciebie...

(sprzęt)
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print\Printers\HP DeskJet 610C Series\
Trochę informacji:
DataType "EMF"
Description "HP DeskJet 610C Series"
Location "Local"
Name "HP DeskJet 610C Series"
Port "LPT1:"
Print Processor "WinPrint"
Printer Driver "HP DeskJet 610C Series"
jest coś jeszcze, ale nie ma parametrów...
Oczywiście są to informacje do mojej drukarki, ale może twoja będzi miała coś podobnego. Mi się zdaje, żeby uzyskać te informacje to trzeba po prostu znaleŹć gdzieś w rejestrze nazwę drukarki i wpisać
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print\Printers\nazwa drukarki\
Proste?

A gdzie znalazłeś o k. graficznej, monitorze itp.?
Ja coś widzałem o k. muzycznej(SB LIve!).

No to chyba tyle.------------------------------------------------------------------------
Uwielbiam programować

W razie problemu, ksišżka pomoże

0

Ale ze mnie ****!!!
Wchdzisz do HKEY_LOCAL_MACHINE\Config\0001\SYSTEM\CurrentControlSet\ Control\Print\Printers\
i tu jest nazwa drukarki ustawionej ne default!!!------------------------------------------------------------------------
Uwielbiam programować

W razie problemu, ksišżka pomoże

0

Dzięki Wiktorze za odzew. {brawo}

Mi najbardzie jednak chodzi o kartę graficzną i płytę główną.
Klucz do karty graficznej to (WinXP): HLM/SYSTEM/CurentControlSet/Services/karta graficzna/Device0 - karta graqficzna to np. nv ale już dla ati nie wiem - może być ati a może być to coś innego). Więc skąd wziąć tę informację najpierw żebym wiedział jaki klucz rejestru dokładnie wczytać??
I tu jest właśnie problem.
Zastanawiam się cały czas jak to rozwiązać. {glowa}
Jeśli chodzi o komponent MSI to on zajmuje zbyt dużo miejsca w pamięci jak dla mnie ale trzeba przyznać że jest niezły.

A jeśli chodzi o twoje pytania Wiktorze to:
VendorIdentifier - to po prostu nazwa producenta sprzętu (w tym wypadku procka)
UpdateStatus - niestety nie wiem
A pozostałych informacji w rejestrze dopiero szukam.
{hello}

0

U mnie nie jest tak do końca jak powiedziałeś...
K. graficzna jest w:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Display\0000
jest o sterowniku:
-DriverDate {cyba data sterownika}
-DriverDesc {U mnie jest Nvida Riva TNT}
-Ver {Chyba wersja sterownika u mnie 4.0}
- jest jeszcze ale nic konkretnego...

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Display\0000\NVIDIA\Display\Head0\
-DisplayDeviceType "CRT" {chyba o moim monitorze}
-LastCRTDeskoptMode "1024,768,32" {chyba moja rozdzielczość}

Wiem że to nie do końca rozwiązuje problem, ale jakby tak wejść do:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Display\0000 pobrać nazwę NVIDIA(czy jakaś inna) z ProviderName (u mnie jest "NVIDIA")
I wejść do
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Display\0000\PobranaNazwa\

Ja mam Windowsa 98 więc pewno dla tego rozbieżności z twoim XP...------------------------------------------------------------------------
Uwielbiam programować

W razie problemu, ksišżka pomoże

0

Znalazłem ciekawe informacje o monitorze:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Monitor\0000\
i tu jest:
-DriverDesc i tu chyba nazwa monitora
-MaxResolution chyba max rozdzielczość
-ProviderName nazwa producenta

Fajne nie?
I w ogóle w kluczu:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\
jest pełno informacji o sprzęcie
Jak by były jakieś różnice między win 98 i XP w tym kluczu to informuj------------------------------------------------------------------------
Uwielbiam programować

W razie problemu, ksišżka pomoże

0

Niestety ale w xp (odnosi się to chyba do wszystkich NT-ków) nie ma takiego klucza HLM/SYSTEM/CurrentControlSet/Services/Class i dlatego pobranie informacji z rejestru jest takie trudne bo każde urządzenie ma swój klucz.
Ale pod 98 to nie jest takie trudne jak widzisz. Tylko że mi najbardziej jednak chodzi o tego XP-ka.
Może ktoś wie ??

0

Mi się Joniu zdaje że do niektórych informacji o szprzęcie w win 98, 95 itp. można użyć rejestru, jednak do XP to coś innego skombinować. Jeśli nie tym komponentem MSI to....
Ja za czasów programowania w Pascalu słyszałem o trybie bodajże 21H z którego to można było obejść zabezpieczenia do BIOSU i innych b. ważnych rzeczy. No a z biosu to już można prawie wszystko odczytać. Tylko problem w tym że nie wiem czy pod Delphi da się też jakoś tak wykombinować. Na 4programmers.net w dziale pascal jest chyba coś o tym, jak chcesz to przeczytaj.------------------------------------------------------------------------
Uwielbiam programować

W razie problemu, ksišżka pomoże

0

Niestety ale w asemblerze nie jestem mocny ale poczytam.
Ale mam nadzieję że coś jeszcze wykombinuję.
Dzięki.
Pozdrawiam.
{hello}

0

Wiktor napisał:
&gtJa za czasów programowania w Pascalu słyszałem o trybie bodajże 21H z którego to można było obejść zabezpieczenia do BIOSU i innych b. ważnych rzeczy. No a z biosu to już można prawie wszystko odczytać. Tylko problem w tym że nie wiem czy pod Delphi da się też jakoś tak wykombinować. Na 4programmers.net w dziale pascal jest chyba coś o tym, jak chcesz to przeczytaj.

To były stare dobre czasy, które już mineły ;( "Ten" tryb 21h to numer przerwania, które pozwalało na użycie funkcji DOSa. Nic mi nie wiadomo o tym, że pozwalało obejść zabezpieczenia do BIOSU. W ogóle o jakim zabezpieczeniu piszesz?? Jeśli o haśle, to tak jak i inne parametry BIOSu odczytywane/zapisywane były za pomocą portów, a nie przerwań (a tym bardziej nie 21h). Natomiast jeśli chodzi o peryferia, to również BIOS udostępniał zestaw przerwań do komunikacji z nimi (np. 10h - VIDEO, 16h - KLAWIATURA itp.). Za ich pomocą można było odczytać sobie typ urządzenia i jego parametry. Ale po co ja się tu w ogóle produkuję! Przecież w temacie wyraźnie stoi [Delphi], więc nie ma co joniemu zatruwać d*** jakimiś przerwaniami. Kończę tę farsę. Pozdro! {hello} --"Imagination is more important than knowledge." - A. Einstein

0

A jak ten komponent MSI odczytuje dane? Ostatnio nie mam czsu głębiej się w zapatrzeć, może ty Joniu byś coś wyczaił?
A z assemblera to ja kompletnie nic nie wiem :(

Uwielbiam programować

W razie problemu, ksišżka pomoże

0

Nowsza wersja komponentu MSI nie jest już udostępniana ze źródłami (ale ja mam starszą :P ).
Niestety ale nie mogę sięw niej połapać.
Trochę jest odczytywane z rejestru a troche z asemblerowych wstawek.
Tam jest w programie jak ominąć mój kłopot z odczytaniem karty grafiki z rejestru, ale...
Jest jeden mały problem a wygląda tak (dane są odczytywane z tego klucza):
HKEY_LOCAL_MACHINE\}'SYSTEM\CurrentControlSet\Services\%s\Device0
ale co to jest to %s??
źle sięwyraziłem, jest to zmienna, ale skąd oni wytrzasneli tę zmienną i gdzie przypisali do niej nazwę klucza z preferowaną kartą grafiki?
Do tego już za chiny ludowe nie mogę dojść.
Jak ktoś chce to mogę mu podesłać starsze źródła komponentu MSI (640kB) do pooglądania.
Może ktoś na coś wpadnie?? Bo ja ostatnio jestem trochę zaganiany i nie mam tyle czasu na to ile bym chciał.
Dzięki i pozdrawiam wszystkich.
{hello}

0

Możesz na moją skrzynkę podesłać: [email protected]
W FAQu znalazłem jak odczytać prędkość procesora:

  1. Jak pobrać częstotliwość taktowania procesora?
    Oto procedura:

function CheckCPUSpeed: integer;
const
DelayTime = 500;
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: integer;
begin
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);

SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);

Sleep(10);
asm
dw 310Fh * rdtsc
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
asm
dw 310Fh * rdtsc
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;

SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);

Result := integer(Round((TimerLo / (1000.0 * DelayTime))));
end;
ShowMessage(IntToStr(CheckCPUSpeed) + ' MHz');


Uwielbiam programować

W razie problemu, ksišżka pomoże

0
  1. Jak wykryć czy w komputerze jest zainstalowana karta muzyczna?
    Po pierwsze musisz dodać do listy uses nazwę modułu MMSystem.
    Należy użyć funkcji WaveOutGetNumDevs

if WaveOutGetNumDevs &gt 0 then
Label1.Caption := 'Jest karta dźwiękowa!'
else
Label1.Caption := 'Brak karty dźwiękowej!';

Uwielbiam programować

W razie problemu, ksišżka pomoże

0
  1. Jak sprawdzić jaka jest pojemność dysku i ile jest wolnego miejsca?
    To podawania wolnej ilości na dysku służy funkcja DiskFree, a do podawania całego rozmiaru służy DiskSize.

begin
Label1.Caption := Format('Wolne miejsce: %d',[DiskFree(0)]);
Label2.Caption := Format('Całe miejsce: %d', [DiskSize(0)]);
end;


Uwielbiam programować

W razie problemu, ksišżka pomoże

0

Jeśli chodzi o dyski komputera to proponuję taką procedurkę:

*procedura pobierająca wszystkie napędy
*łącznie z wielkoscią w MB oraz miejscem wolnym też w MB
procedure JakieDyski;
var i : Integer;
m : Byte;
Typ : Integer;
Dysk : String;
Opis : String;
*funkcja pobiera rozmiar całkowity dysku w MB
function RozmiarCalkowity(dysk:byte):String;
var Rozmiar : int64;
begin
Rozmiar := DiskSize(dysk);
Result := IntToStr((Rozmiar div 1024) div 1024) + ' MB. ';
end;
*funkcja pobiera rozmiar miejsca wolnego na dysku w MB
function RozmiarWolny(dysk:byte):String;
var Rozmiar : int64;
begin
Rozmiar := DiskFree(dysk);
Result := IntToStr((Rozmiar div 1024) div 1024) + ' MB. ';
end;
*rozpoczęcie procedury właściwej
*czyli o zbieraniu informacji o napędach
begin
Form1.Memo1.Clear;
m:=1;
for i := Ord('A') to Ord('Z') do
begin
Dysk := Chr(i) + ':\';
Typ := GetDriveType(PChar(Dysk));
case typ of
0 : Opis := ' ' + Dysk + ' Nie można określić typu urządzenia';
1 : Opis := ' ' + Dysk + ' Na urządzeniu nie ma katalogu źródłowego';
Drive_Removable : Opis := ' '+Dysk+' Dysk wymienny.';
Drive_Fixed : Opis := ' ' + Dysk + ' Dysk stały. Rozmiar: '+RozmiarCalkowity(m)+'Wolne: '+RozmiarWolny(m);
Drive_Remote : Opis := ' ' + Dysk + ' Dysk sieciowy. Rozmiar: '+RozmiarCalkowity(m)+'Wolne: '+RozmiarWolny(m);
Drive_Cdrom : Opis := ' ' + Dysk + ' CD-ROM. ';
Drive_Ramdisk : Opis := ' ' + Dysk + ' Dysk pamięciowy (RAM Dysk). Rozmiar: '+RozmiarCalkowity(m)+'Wolne: '+RozmiarWolny(m);
end;
m := m + 1;
if (Typ&lt&gt0) and (Typ&lt&gt1) then
Form1.Memo1.Lines.Add(Opis);
end;
end;

Wyniki są wyświetlane w Memo1

0

A jeśli chodzi o procesor (taktowanie) to chodzi ta procedurka zajebiście.
Żeby tak ktoś znał jeszcze funkcje do pobierania wielkości Cash i rozpoznawania procka?
A może wie ktoś gdzie w rejestrze są informacje na temat procka?
Dzieki
{hello}

0

joniu napisał:
Żeby tak ktoś znał jeszcze funkcje do pobierania wielkości Cash i rozpoznawania procka?

Model procesora można odczytać przez assemblera wykorzystując flagę ID.

A w rejsetrze (przynajmniej w XP) jest w kluczu: HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0

(chyba, że masz więcej procesorów)--Jest jeszcze jeden błąd ... :)

Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.

0

Dzięki Dryobates.

0

MAM!!!

Informacje o karcie graficznej w XP

W kluczu: HLM\HARDWARE\DEVICEMAP\Video jest wartość o nazwie \Device\Video0
Jego wartością jest klucz w rejestrze w którym przechowywana jest informacja o domyślnej kracie graficznej.
W moim przypadku akurat:
\REGISTRY\Machine\System\ControlSet001\Services\nv\Device0

Tylko \REGISTRY\Machine trzeba zamienić z:
\HKEY_LOCAL_MACHINE i wszystko powinno być OKEJ.

{brawo} {brawo} {brawo}

0

Joniu to istnieje tylko w win XP w win 98 tego nie ma...
Trzeba będzie w programie jeśli xp to do temtego klucza jeśli 9x to do tego...
A wie ktoś jak wyciągnąć informacje z tego zawszonego biosu?
I od razu dodaje z assemblera nie jestem dobry(patrz: w ogóle nie znam)------------------------------------------------------------------------
Uwielbiam programować

W razie problemu, ksišżka pomoże

0

No właśnie ja niestety z asemblera też nie jestem najlepszy (znam tylko podstawy) dlatego staram się najwięcej jak mogę wyciagnać z rejestru.
A Wingrozy 98 niestety ale nie mam, mam za to 95 a tam powinno być podobnie jak w 98 więc poszukam trochę. Najlepiej jak bym miał czarną księgę rejestru win95. Wtedy było by łatwiej ale niestety takowej nie posiadam dlatego proszę jeśli ktoś zna miejsca w rejestrze z których można wyciągnąć informacje o sprzęcie to niech da cynk tutaj.
Będę naprawdę wdzięczny.

{hello}

0

A nie wie ktoś może w jaką funkcją pobrać wielkość zainstalowanej pamięci na karcie graficznej. Znalazłem jedną funkcję ale nie działa za dobrze :(

// nie odkopuj wątków sprzed 4 lat!

1 użytkowników online, w tym zalogowanych: 0, gości: 1