AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi ShellExecuteEx mit Verb properties und x64
Thema durchsuchen
Ansicht
Themen-Optionen

ShellExecuteEx mit Verb properties und x64

Ein Thema von Dalai · begonnen am 13. Dez 2014 · letzter Beitrag vom 15. Dez 2014
 
Benutzerbild von Dalai
Dalai

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

AW: ShellExecuteEx mit Verb properties und x64

  Alt 13. Dez 2014, 15: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
 


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 19:42 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-2025 by Thomas Breitkreuz