Nö.
Da gibt es nur ein SwitchX64Redirection und ich weiß ja nicht was das macht und ob es z.B. auch die Rückgabewerte auswertet.
Also mal ernsthaft: Ich schrieb, dass ein Starten der EXE mit ShellExecuteEx funktioniert (also die richtige EXE ausführt), aber das Öffnen/Anzeigen der Eigenschaften das nicht tut. Wo glaubst du nun, wäre ein Fehler? Die Funktion SwitchX64Redirection tut genau das, was sie soll, auch beim Auslesen von Dateieigenschaften mit FindFirst & Co (Größe, Datum etc). Probier's selbst aus (hab den Code im OP mal etwas erweitert, damit sich das einfacher testen lässt). Aber der Vollständigkeit halber:
Delphi-Quellcode:
var OldWow64RedirectionValue : LongBool;
{$IFDEF WIN32}
function SwitchX64Redirection(bDisable: Boolean): Boolean;
type TWow64DisableWow64FsRedirection =
Function(
var Wow64FsEnableRedirection: LongBool): LongBool;
StdCall;
TWow64RevertWow64FsRedirection =
Function(OldValue: LongBool): LongBool;
StdCall;
var
hHandle : THandle;
Wow64DisableWow64FsRedirection : TWow64DisableWow64FsRedirection;
Wow64RevertWow64FsRedirection : TWow64RevertWow64FsRedirection;
begin
Result:= true;
try
hHandle:= GetModuleHandle(KERNEL32);
@Wow64DisableWow64FsRedirection := GetProcAddress(hHandle, '
Wow64DisableWow64FsRedirection');
@Wow64RevertWow64FsRedirection := GetProcAddress(hHandle, '
Wow64RevertWow64FsRedirection');
if bDisable
then
begin
if ((hHandle <> 0)
AND
(@Wow64DisableWow64FsRedirection <>
nil))
then
if NOT Wow64DisableWow64FsRedirection(OldWow64RedirectionValue)
then
RaiseLastOsError;
end
else
begin
if ((hHandle <> 0)
AND
(@Wow64RevertWow64FsRedirection <>
nil))
then
if NOT Wow64RevertWow64FsRedirection(OldWow64RedirectionValue)
then
RaiseLastOsError;
end;
except
Result:= false;
raise;
end;
end;
{$ENDIF WIN32}
Zitat:
Du könntest auch mal versuchen dein Programm als Kompatibel zur Windows-Version auszuweisen.
Viele Abwärtskopatibilitätsdinge sind nur aktiv, wenn das Programm als "alt" angesehn wird.
Spielt keine Rolle, weil ich das im eigentlichen Programm eh nicht beeinflussen kann, weil es eine
DLL ist.
MfG Dalai