AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Herausfinden ob eigene App im Windows XP Modus läuft
Thema durchsuchen
Ansicht
Themen-Optionen

Herausfinden ob eigene App im Windows XP Modus läuft

Ein Thema von DevidEspenschied · begonnen am 27. Okt 2010 · letzter Beitrag vom 28. Okt 2010
Antwort Antwort
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
439 Beiträge
 
Delphi 12 Athens
 
#1

Herausfinden ob eigene App im Windows XP Modus läuft

  Alt 27. Okt 2010, 19:40
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.
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

AW: Herausfinden ob eigene App im Windows XP Modus läuft

  Alt 27. Okt 2010, 19:49
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#3

AW: Herausfinden ob eigene App im Windows XP Modus läuft

  Alt 27. Okt 2010, 19:59
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Herausfinden ob eigene App im Windows XP Modus läuft

  Alt 27. Okt 2010, 21:36
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
439 Beiträge
 
Delphi 12 Athens
 
#5

AW: Herausfinden ob eigene App im Windows XP Modus läuft

  Alt 28. Okt 2010, 14:18
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.
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz