SlideShow aber mit Problemen

    SlideShow aber mit Problemen

    Guten Abend Kollegen,
    ich habe ein leidiges Problem. Ich will Programme, welche vom Betriebssystem verknüpft sind, aufrufen. Eigentlich geht es ganz gut.

    Delphi-Code

    1. procedure ShellExecute_AndWait(ASequenz: PSequenz; Params: string);
    2. var
    3. exInfo: TShellExecuteInfo;
    4. Ph: DWORD;
    5. begin
    6. FillChar(exInfo, SizeOf(exInfo), 0);
    7. with exInfo do
    8. begin
    9. cbSize := SizeOf(exInfo);
    10. fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    11. Wnd := GetActiveWindow();
    12. ExInfo.lpVerb := 'open';
    13. ExInfo.lpParameters := PChar(Params);
    14. lpFile := PChar(ASequenz.Pfad);
    15. nShow := SW_SHOWNORMAL;
    16. end;
    17. if ShellExecuteEx(@exInfo) then
    18. Ph := exInfo.HProcess
    19. else
    20. begin
    21. ShowMessage(SysErrorMessage(GetLastError));
    22. Exit;
    23. end;
    24. while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
    25. Application.ProcessMessages;
    26. CloseHandle(Ph);
    27. end;







    Mit dieser Funktion geht es auch ganz gut. Aber das wäre zu einfach. Ich möchte dem Programm auch eine Anzeigedauer mitgeben. SOll heißen nach 30 Sekunden soll das Progeamm schließen. Ich habe schon einiges probiert. Unter anderem auch mit:
    Zitat:

    Delphi-Code

    1. ZeroMemory(@myInfo, SizeOf(SHELLEXECUTEINFO));
    2. myInfo.cbSize := SizeOf(SHELLEXECUTEINFO);
    3. myInfo.fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_NO_UI;
    4. myInfo.lpFile := PChar(FileName);
    5. myInfo.lpParameters := PChar(Parameters);
    6. if Hide then
    7. myInfo.nShow := SW_HIDE
    8. else
    9. myInfo.nShow := SW_SHOWNORMAL;
    10. // start file
    11. ExitCode := 0;
    12. Result := ShellExecuteEx(@myInfo);
    13. // if process could be started
    14. if Result then
    15. begin
    16. // wait on process ?
    17. iWaitRes:=0;
    18. if (Wait > 0) then
    19. begin //WaitForSingleObject
    20. iWaitRes := WaitForSingleObject(myInfo.hProcess, Wait);
    21. // timeout reached ?
    22. if (iWaitRes = WAIT_TIMEOUT) then
    23. begin
    24. Result := False;
    25. TerminateProcess(myInfo.hProcess, 0);
    26. end;
    27. // get the exitcode
    28. GetExitCodeProcess(myInfo.hProcess, ExitCode);
    29. end;
    30. // close handle, because SEE_MASK_NOCLOSEPROCESS was set
    31. CloseHandle(myInfo.hProcess);
    32. end;



    Das funktioniert aber nicht mit der Windows Faxanzeige oder mit LibreOffice, IEXplorer. Dort ist (myInfo.hProcess = 0, weil durch DDE aufgerufen.

    Hat jemand eine bessere Idee?

    Hintergrund:
    Ich möchte eine Zusammenstellung von Dokumenten und Bidern hintereinander laufen lassen, wobei die Bilder nach x Sekunden automatisch schießen und das nächste Dokument oder Bild
    erscheint.(SlideShow)
    Thx
    Tossi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DeddyH“ () aus folgendem Grund: Delphi-Tags eingefügt, bitte künftig selbst machen //MfG DeddyH

    Hi DeddyH

    DeddyH schrieb:

    Und der Vorteil von CreateProcess gegenüber ShellExecuteEx liegt wo genau?

    Zum einen mal die Einleitung unter dem Link:

    Um ein anderes Programm zu starten sollte man CreateProcess benutzen, da diese Funktion sehr viele Parameter kennt. Hier eine Funktion, die den Umgang damit erleichtert. In AFilename wird der Dateiname des Programms übergeben, in AParameter kann die Parameterzeile angegeben werden, in ACurrentDir übergibt man ein alternatives Startverzeichnis, bei einem leeren String wird das Verzeichnis der Exe benutzt. Setzt man ACurrentDir auf ein nicht vorhandenes Verzeichnis, startet die Anwendung nicht. Wenn AWait True ist, wartet das Programm darauf, dass das aufgerufene Programm beendet wird.Übergibt man den optionalen Parameter AOnWaitProc, so wird diese Funktion etwa alle 50 ms aufgerufen, bis das gestartete Programm wieder geschlossen wird.Über die Parameter, die AOnWaitProc übergeben werden, kann man auf den Prozess zugreifen und ihn ggf. beenden.

    Zum andern: Ich starte selbst damit Irwanview und Adobe Photoshop Elements - beides Produkte, die wohl kaum für Microsofts DDE-Technik entworfen wurden.

    Tossi65 schrieb:

    Das funktioniert aber nicht mit der Windows Faxanzeige oder mit LibreOffice, IEXplorer. Dort ist (myInfo.hProcess = 0, weil durch DDE aufgerufen.


    Gruss
    Delbor
    roase.ch/

    Was wirklich zählt, ist Intuition. Albert Einstein

    ________________

    Delbor alias Zoran