Thema: Delphi Ärger mit Shellexecute

Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: Ärger mit Shellexecute

  Alt 4. Jun 2022, 14:37
Hi zusammen

Mein dringlichstes 'Problem', nämlich die Anzeige eines fremden Programmws in meinem, habe ich nun 'gelöst'. Bei MausDown in meinem TAlexOpenfileFrame:
Delphi-Quellcode:
    if Button =(mbLeft) then
    begin
      LSelectItem := PNameRec(AnItem.Data)^.RealName;
      ext := ExtractFileExt(LSelectItem);
      if ext = '.pdfthen
      begin
        ShellExecAndWait('F:\Externer Programmordner\Ashampoo\Ashampoo PDF Free\Ashampoo PDF.exe', LSelectItem, SW_Normal );

      end;
    end;
und
Delphi-Quellcode:
procedure TAlexOpenfileFrame.ShellExecAndWait(dateiname, Parameter: string; ShowHide: Integer); // benötigt ShellAPI in Uses
var executeInfo: TShellExecuteInfo;
dw: DWORD;
begin
   FillChar(executeInfo, SizeOf(executeInfo), 0);
   with executeInfo do
      begin
         cbSize := SizeOf(executeInfo);
         fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
         Wnd := GetActiveWindow();
         executeInfo.lpVerb := 'open';
         executeInfo.lpParameters := PChar(Parameter);
         lpFile := PChar(dateiname);
         nShow := ShowHide;
      end;
      if ShellExecuteEx(@executeInfo) then dw := executeInfo.HProcess
         else
            begin
               ShowMessage('Fehler: ' + SysErrorMessage(GetLastError));
               exit;
            end;
      while WaitForSingleObject(executeInfo.hProcess, 50) <> WAIT_OBJECT_0 do
      Application.ProcessMessages;
      CloseHandle(dw);
end;
Der Code stammt bis auf meine Komponenten von hier, bzw hier.
Na ja, so ähnlich zumindest. Ich bin so frei und erspare mir den Versuch des Abgleichs mit all den in diesem Forum gefundenen wohl mehreren dutzend Codeschnipsel.
Das vorerst wichtigste: Ich kann abwechselnd mit beiden Programmen arbeiten.


Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat