Entwickler-Ecke

Windows API - "Lizenznehmer" von Windows auslesen


RichMan - Sa 01.02.03 17:21
Titel: "Lizenznehmer" von Windows auslesen
Hi Leute!

Wie kann ich den Namen und die Firma des Lizenznehmers von Windows (z.B. im Windows Explorer zu erfahren: Menü "?" -> Menüpunkt "Info") auslesen!?

Vielen Dank schonmal,
RichMan


matze - Sa 01.02.03 19:24

der wird bestimmt in der registry drinne stehn !! such mal !


RichMan - Sa 01.02.03 21:39

LOL, auf die Idee bin ich gar nicht gekommen... Thx. Aber ich bin mir ziemlich sicher, dass es eine API-Funktion zum Auslesen der Daten gibt... naja egal.


matze - So 02.02.03 17:22

schon möglich, ich kenne die aber nicht (such mal im WinSDK)

ansonmsten ist das auselsen aus der Registry auch dich sooooo ein act oder ??


Delete - So 02.02.03 18:42

RichMan hat folgendes geschrieben:
Aber ich bin mir ziemlich sicher, dass es eine API-Funktion zum Auslesen der Daten gibt...

Meinst du? Falls du die Info-Box meinst, hast du recht: dafür gibt´s tatsächlich einen Befehl

Quelltext
1:
ShellAbout                    

Falls du nur an den Infos interessiert bist, solltest du die Registry öffnen (nur lesend, wenn´s geht), HKEY_LOCAL_MACHINE aufsuchen und mal unter "Software\Microsoft\Windows\CurrentVersion" nachschauen. Wie matze sagte:
Zitat:
ansonmsten ist das auselsen aus der Registry auch dich sooooo ein act oder ??

Hm, :? Na ja ... matze ... ´s is´ aber noch verständlich. :wink:


MrKnogge - Di 04.02.03 23:25

Hi

Probier mal das:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
uses ..Registry;

.
.
.

function currentuser: string; 
var  
  Name:   array [0..255] of Char;
  buffer: DWORD;
begin
  buffer := SizeOf(Name);
  GetUserName(Name, buffer);
  Result := StrPas(Name);
end;


function GetRegisteredOwner: String;
var vi: TOSVersionInfo;
    reg: TRegistry;
begin
 result:='';
 reg := TRegistry.Create;
 try
  vi.dwOSVersionInfoSize := sizeof(vi);
  getversionex(vi);
  reg.RootKey := HKEY_LOCAL_MACHINE;
  if (vi.dwPlatformId = VER_PLATFORM_WIN32_NT) then
  reg.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion', false)
  else
  reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion', false);
  result := reg.ReadString('RegisteredOwner');
 finally
  reg.Free;
 end;
end;


function GetRegisteredOrganization: String;
var vi: TOSVersionInfo;
    reg: TRegistry;
begin
 result:='';
 reg := TRegistry.Create;
 try
  vi.dwOSVersionInfoSize := sizeof(vi);
  getversionex(vi);
  reg.RootKey := HKEY_LOCAL_MACHINE;
  if (vi.dwPlatformId = VER_PLATFORM_WIN32_NT) then
  reg.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion', false)
  else
  reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion', false); 
  result := reg.ReadString('RegisteredOrganization'); 
 finally
  reg.Free; 
 end; 
end;



// Aktueller Windows-Benutzer
Label1.Caption := currentuser;

// Bei Windows angegebener Name
Label2.Caption := GetRegisteredOwner;

// Bei Windows angegebene Orhanisation          
Label3.Caption := GetRegisteredOrganization;


Delete - Mi 05.02.03 10:30

1. Ich hätte das Auslesen von Lizenznehmer und Firma zusammengefasst. Es gibt ja auch var-Parameter, die man dem Funktionskopf übergeben kann, etwa:

Quelltext
1:
procedure GetUserInfo(out RegisteredUser, RegisteredOrg: string);                    

Auf diese Weise reduziert man den Zugriff auf die Registry auf das einmalige Öffnen, Auslesen und Schließen.

2. "GetVersionEx" ist eigentlich nur bei Konsolen- oder NonVCL-Projekten notwendig. In den meisten VCL-Programmen dürfte die Unit SysUtils benutzt werden, und die stellt die Variable

Quelltext
1:
Win32Platform                    

zur Verfügung, der wie "vi.dwPlatformId" verglichen wird. Aber das würde ich nicht mal als Fehler anrechnen; ist nur doppelt gemoppelt, weil "GetVersionEx" auch im INIT-Teil der SysUtils aufgerufen wird.

3. Auch kein großes Problem (zumindest hier nicht, dank benutztem Ressourcenschutz), aber "OpenKey" ist eigentlich eine Bool-Funktion. Will sagen: sie bietet eine schöne Kontrolle, ob ein Schlüssel geöffnet werden konnte oder nicht.

4. Zum Schluss das echte Problem: User mit eingeschränkten oder Benutzerrechten sehen unter NT, 2000 und XP wahrscheinlich ... nichts. Wundert euch also bitte nicht, wenn euch Lizenznehmer und Firma nicht angezeigt werden, wenn ihr keine Admin-Rechte habt.
Natürlich lässt sich auch dieses Problem in den Griff bekommen. Man muss nur wissen, dass die Registry standardmäßig mit vollen Zugriffsrechten geöffnet wird. Und das geht insbesondere beim Schlüssel HKEY_LOCAL_MACHINE und eingeschränkten Benutzerrechten gründlich in die Hose.