Einzelnen Beitrag anzeigen

Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#6

AW: ShellExecuteEx mit Verb properties und x64

  Alt 13. Dez 2014, 16:06
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
  Mit Zitat antworten Zitat