Explorer mit CreateProcess und Position starten
-
Hallo,
ich möchte den Explorer mit CreateProcess und Position starten.
Dabei soll er an einer bestimmten Position auf dem Desktop
erscheinen.
Erscheint zwar aber nicht auf der Position wo ich will.
Ich möchte aber auch nicht mit FindWindow arbeiten:
Hier mein Code.TStartupInfo Si;
TProcessInformation Pi;setmem(&Si,sizeof(TStartupInfo),0);
Si.cb = sizeof(TStartupInfo);
Si.cb = sizeof(Si); // Set structure size
Si.dwX = 500 ;
Si.dwY = 50 ;
Si.dwXSize = 3000 ;
Si.dwYSize = 300 ;
Si.wShowWindow = SW_SHOW;
Si.dwFlags = STARTF_USEPOSITION | STARTF_USESHOWWINDOW |STARTF_USESIZE ;
BOOL bRes;
bRes = CreateProcess(NULL,
"explorer.exe /e,c:\",
NULL,
NULL,
true,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&Si,
&Pi
);Vielen Dank
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
da wirst du wenig chancen haben.
der explorer ignoriert die startup infos.
wirst da wohl mit FindWindow und SetWindowPos arbeiten muessen ...
wenn man bedenkt das der explorer die shell von M$ ist und die eigenen funktionen nicht richtig unterstuetzt ^^
am rande : http://www.flounder.com/affinity_implementation.htmmfg donny

-
donbubu schrieb:
da wirst du wenig chancen haben.
der explorer ignoriert die startup infos.
wirst da wohl mit FindWindow und SetWindowPos arbeiten muessen ...
wenn man bedenkt das der explorer die shell von M$ ist und die eigenen funktionen nicht richtig unterstuetzt ^^1. Programme werden im allgemeinen aus der Shell mit Shellexecute und ShellExecuteEx gestartet. Hier werden keine Fensterpositionen mitgegeben.
2. In der Doku von CreateProcess steht klar, dass die Fensterkoordinaten nur dann berücksichtigt werden, wenn das 1. Fenster mit den Koordinaten CW_USEDEFAULT erzeugt wird. Dann werden die vorbelegten Koordinaten benutzt, oderneue errechnet.
3. Da so ziemlich jedes Programm (inkl. dem Explorer) dem Benutzer zu liebe seine alte Position merkt und eben nicht CW_USEDEGFAULT, ist es kein Wunder, das auch der Explorer sich nicht an die Vorgaben hält.
4. Das hat nichts damit zu tun, dass MS nicht seine eigenen Funktionen unterstützt. Meine Programm würde die Startparameter deshalb auch nur beim ersten Start benutzen. Beim nächsten Start würden die letzte Position verwendet werden. MS macht es auch so.
-
ich empfinde das eher als bug.
mdi und sdi anwendung beruecksichtigen die angaben, dialoge nicht.
deswegen den link am rande .mfg donny

-
donbubu schrieb:
ich empfinde das eher als bug.
mdi und sdi anwendung beruecksichtigen die angaben, dialoge nicht.
deswegen den link am rande .Dialoge können dies nicht berücksichtigen, denn bei Ihnen wird niemals CW_USEDFAULT verwendet!
Das System vehält sich wie beschrieben. Ein Bug ist es dann sicherlich nicht, eher ein Design Leck. Allerdings kann man es keinem recht machen.