![]() |
AW: Ärger mit Shellexecute
Zitat:
Idr. muss man per "AttachThreadInput()" die beiden seperaten prozesse vereinen, aber nichts desto trotz, generisch betrachtet ist es das schlimmste an was man überhaupt denken kann, da du keine Ahnung von den inneren Message-Ketten hast, die bei solch einem vorhaben schlichtweg zerschossen werden könnten. |
AW: Ärger mit Shellexecute
Hi zusammen
Zitat:
Ich werde noch einen Versuch mit Createprozess und warten auf das Ende probieren - aber ich fürchte, dass ich dann entweder das eine oder andere Programm bearbeiten kann, nicht jedoch beide. Dein zweiter Abschnitt, und besonders dein letzter Satz, habensaber in sich! Gruss Delbor |
AW: Ärger mit Shellexecute
Zitat:
Zitat:
Nebenbei, "CreateProcess()" nutze ich nur um sofort die 100% stimmende ProcessID zu erhalten um dann wiederum das WindowHandle zu ermitteln. (Windows arbeitet nun mal intern nur mit ProcessIDs und Handles) Da ein Prozess mehrfach geladen werden kann sind andere Methoden zur Ermittlung eher... schwammig :-) |
AW: Ärger mit Shellexecute
Bei einem externen Programm mußt du das richtige Fenster finden und dort kannst du den Parant auf etwas in deinem Programm (Form/Panel/...) setzen.
Vom Acrobat-Reader gibt es noch eine ActiveX-Komponente, die man in sein Programm einbinden kann. Aber offiziell wird sie nicht mehr für "fremde" Programme entwickelt, sondern nur für die Einfondung in die bekanntestens Browser. (sagt der Hersteller) Und außerdem ändern die Arschlöcher andauern das Verhalten, was dann im eigenen Programm keinen Spaß macht und unsere Kunden nervt. Daher nutzen wir aktuell die Komponente von DevExpress, um PDFs im Programm anzuzeigen. (die kann nicht alles und ist auch etwas langsamer, aber daran wird weiter gearbeitet) Diese Komponente ist nun im Programm und bleibt somit immer gleich. Versuch mal einem Nutzer deines Programms zu erklären, dass es nicht deine Schuld ist, wenn es ein Update bei Acrobat gab und es in "deinem" Programm dann nicht mehr so geht, wie es soll. Selbst Schuld, dass Acrobat nun immer mehr an Bedeutung verliert, dazumal inzwischen alle großen Browser selber was für PDF mitbringen. Im Prinzip kann man somit nun auch im Delphi z.B. den TWebBrowser nutzen und darin dann die PDF anzeigen und sei es, indem man selbst eine Version von z.B. ![]() |
AW: Ärger mit Shellexecute
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:
und
if Button =(mbLeft) then
begin LSelectItem := PNameRec(AnItem.Data)^.RealName; ext := ExtractFileExt(LSelectItem); if ext = '.pdf' then begin ShellExecAndWait('F:\Externer Programmordner\Ashampoo\Ashampoo PDF Free\Ashampoo PDF.exe', LSelectItem, SW_Normal ); end; end;
Delphi-Quellcode:
Der Code stammt bis auf meine Komponenten von
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; ![]() ![]() 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 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 by Thomas Breitkreuz