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.680 Beiträge
 
Delphi 5 Professional
 
#1

ShellExecuteEx mit Verb properties und x64

  Alt 13. Dez 2014, 13:32
Hallo Leute ,

ich muss mir mal wieder externen Input von euch holen, da ich auf ein Phänomen gestoßen bin und sich mir die Frage nach der "richtigen" Lösung stellt.

Es geht hierbei nur um Windows x64 (egal ob XP oder 7 oder höher).

Simple Testapplikation:
Delphi-Quellcode:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses ShellAPI, MyLibrary;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var SEI: TShellExecuteInfo;
begin
    FillChar(SEI, SizeOf(SEI), 0); // Wipe the record to start with
    SEI.cbSize:= SizeOf(SEI);
    if Checkbox2.Checked then
        SEI.fMask:= SEE_MASK_NOCLOSEPROCESS
    else begin
        SEI.fMask:= SEE_MASK_INVOKEIDLIST;
        SEI.lpVerb:= 'properties';
    end;
    SEI.Wnd:= Self.Handle;
    SEI.lpFile:= PChar(Edit1.Text);
    SEI.nShow:= SW_SHOWNORMAL;
    {$IFDEF WIN32}
    if (Checkbox1.Checked) then
        SwitchX64Redirection(True);
    {$ENDIF}
    ShellExecuteEx(@SEI);
    {$IFDEF WIN32}
    if (Checkbox1.Checked) then
        SwitchX64Redirection(False);
    {$ENDIF}
end;

end.
In dem Edit1 steht beispielsweise "C:\Windows\system32\msiexec.exe". Egal, ob die Checkbox angehakt ist oder nicht, es kommt immer der Eigenschaften-Dialog der Datei "%SystemRoot%\syswow64\msiexec.exe". Wenn ich die Datei starte (Verb open) statt dessen Eigenschaften anzuzeigen, wird je nach Haken die richtige Datei ausgeführt (sichtbar im Taskmanager) - bei deaktivierter Redirection (Checkbox aktiviert) %SystemRoot%\system32\msiexec.exe und bei aktivierter Redirection (Checkbox deaktiviert) ist es %SystemRoot%\syswow64\msiexec.exe. "Nette" Sache bis hierhin - eher lästig, aber egal.

Nun, wie bekomme ich jetzt den Eigenschaften-Dialog der richtigen Datei? Da es keine Funktion GetNativeSystemDirectory o.ä. gibt, kam mir bisher nur der Gedanke, GetWindowsDirectory zu rufen und "\Sysnative" anzuhängen und dann mit StringReplace "%SystemRoot%\system32" zu ersetzen. Gibt's da nicht was besseres?

MfG Dalai

Geändert von Dalai (13. Dez 2014 um 15:06 Uhr)
  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 05:43 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