![]() |
Herausfinden ob eigene App im Windows XP Modus läuft
Hallo,
ich suche eine Möglichkeit, um innerhalb meiner Delphi-Applikation herauszufinden, ob sie gerade im Windows XP-Modus von Windows 7 läuft. Das hat nichts mit den Kompatibilitätseinstellungen zu tun, die nach einem Rechtsklick auf einer EXE-Datei im gleichnamigen Karteireiter zu finden sind. Für diese frage ich die Umgebungsvariable "__COMPAT_LAYER" ab, und das funktioniert auch zuverlässig. Der Windows XP-Modus setzt diese Variable aber nicht, weswegen ich nach anderen Wegen suche, das abzufragen. Bin über jeden Vorschlag dankbar. |
AW: Herausfinden ob eigene App im Windows XP Modus läuft
Der Windows 7 XP-Modus ist eine VM (virtuelle Maschine, welche im VirtualPCläuft) ... es läuft also ein richtiges Windows XP im Hintergrund.
Alles was darin läuf, ist in gewisser Weise vom Hautsystem abgekapselt, weswegen dort auch nicht alles verfügbar ist, wie z.B. solche Umgebungsvariablen. Der Kompatibilitätsmodus ist 'ne Art Sandbox, welche z.B. ein XP-System vorgaugelt, alles aber im Win7 laufen läßt. |
AW: Herausfinden ob eigene App im Windows XP Modus läuft
Wenn Du nach der Version des betriebssystems abfragt, meldet dir Win7 Win7, wenn das Programm im XP Modus läuft, meldet es WinXP.
Von einem reinen XP wirst Du es nicht leicht unterscheiden können, denn die virtuelle Maschine läuft ja wirklich unter einem echten WinXP Betriebssystem, auch wenn das Host System Windows 7 ist. |
AW: Herausfinden ob eigene App im Windows XP Modus läuft
Ich habe hier noch eine Fetzen Uraltcode, keine Ahnung ob der für den neuen VirtualPC in Win7 noch passt...
Delphi-Quellcode:
// running in Virtaul PC function running_inside_vpc: boolean; assembler; asm push ebp mov ecx, offset @@exception_handler mov ebp, esp push ebx push ecx push dword ptr fs:[0] mov dword ptr fs:[0], esp mov ebx, 0 // flag mov eax, 1 // VPC function number // call VPC db 00Fh, 03Fh, 007h, 00Bh mov eax, dword ptr ss:[esp] mov dword ptr fs:[0], eax add esp, 8 test ebx, ebx setz al lea esp, dword ptr ss:[ebp-4] mov ebx, dword ptr ss:[esp] mov ebp, dword ptr ss:[esp+4] add esp, 8 jmp @@ret @@exception_handler: mov ecx, [esp+0Ch] mov dword ptr [ecx+0A4h], -1 // EBX = -1 -> not running, ebx = 0 -> running add dword ptr [ecx+0B8h], 4 // -> skip past the detection code xor eax, eax // exception is handled ret @@ret: end; // running in VMWare function IsVMwarePresent(): LongBool; stdcall; // platform; begin Result := False; {$IFDEF CPU386} try asm mov eax, 564D5868h mov ebx, 00000000h mov ecx, 0000000Ah mov edx, 00005658h in eax, dx cmp ebx, 564D5868h jne @@exit mov Result, True @@exit: end; except Result := False; end; {$ENDIF} end; |
AW: Herausfinden ob eigene App im Windows XP Modus läuft
Ich habe noch einen weiteren Weg gefunden, abzufragen ob der Windows XP Mode aktiv ist. Und zwar ist der Computer lizenziert für einen Benutzer namens "Windows XP Mode". Der Nachteil ist hier allerdings, dass ich per Regedit diesen Wert ändern und damit die Prüfung austricksen kann. Von daher wäre der von Bummi gepostete Code vielleicht effektiver, insofern er denn funktioniert. Das werde ich heute mal testen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz