Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Auf neuem Desktop Programm starten (https://www.delphipraxis.net/86573-auf-neuem-desktop-programm-starten.html)

Telefonkabel 15. Feb 2007 20:39


Auf neuem Desktop Programm starten
 
Hy!
Ich würde gerne auf einem neuen Desktop ein Programm starten.
Den Desktop lege ich über createdesktop an, doch wenn ich dann shellexecute ausfüre, selbst mit dem neuen Desktop als Handle, dann öffnet er das Programm nur auf dem alten Desktop.
Kann mir da jemand helfen?

Luckie 15. Feb 2007 21:51

Re: Auf neuem Desktop Programm starten
 
mit CreateProcess oder ShellexecuteEx müsste es möglich sein, den Desktop anzugeben.

Btw wo gibst du bei Shellexecute den Handle des Desktops an? :gruebel:

Telefonkabel 19. Feb 2007 17:29

Re: Auf neuem Desktop Programm starten
 
Danke, ich hab nun versucht es über CreateProcess zu lösen, doch habe ich das Problem, dass ich nicht weiß wo ich im Prozeduraufruf den neuen Desktop angeben muss. Gibts für diese Prozedur ein gutes deutsches Tutorial?

MfG
Telekab.

Delphi-Quellcode:
[...]
SetThreadDesktop(NewDesk);
    Windows.SwitchDesktop(NewDesk);
    si.lpDesktop := pchar(newdesk);
    FillChar(si, SizeOf(si), 0);
    si.cb := SizeOf(si);
    si.dwFlags := STARTF_USESHOWWINDOW;
    si.wShowWindow := SW_NORMAL;
    FillChar(pi, SizeOf(pi), 0);
    CreateProcess(Nil, PChar('c:\windows\notepad.exe'), Nil, Nil, False,
                   CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or
                   NORMAL_PRIORITY_CLASS, Nil, nil, si, pi);
[...]
Was ist daran falsch?

Lasse2002 19. Feb 2007 22:51

Re: Auf neuem Desktop Programm starten
 
Delphi-Quellcode:
si.lpDesktop := pchar(newdesk);
FillChar(si, SizeOf(si), 0);
Da solltest du dir nochmal die Reihenfolge genauer anschauen. Dein FillChar überschreibt den Wert den du gerade erst in si.lpDesktop geschrieben hast.

CREATE_NEW_CONSOLE solltest du nur für Konsolenanwendungen verwenden. Notepad gehört da nicht dazu.

SetThreadDesktop(NewDesk) funktioniert übrigens nur, wenn dein Process noch kein Fenster erzeugt hat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 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