Veröffentlicht 22. Juli 200322 j hi, zusammen. ich habe zwei bildschirme und öffne mit CreateProcess eine applikation. wie kann ich nun bestimmen auf welchem bildschirm die applikation startet? :confused:
22. Juli 200322 j Über den vorletzten Parameter von CreateProcess, das ist ein Zeiger auf eine STARTUPINFO-Struktur: http://msdn.microsoft.com/library/en-us/dllproc/base/startupinfo_str.asp
22. Juli 200322 j hab ich schon probiert : STARTUPINFO StartInfo; memset(&StartInfo, 0 , sizeof(StartInfo)); StartInfo.cb = sizeof(StartInfo); // Set structure size StartInfo.dwX = 200; StartInfo.dwY = 1500; StartInfo.dwFlags = STARTF_USEPOSITION ; int res = CreateProcess(NULL, arguments.c_str(), NULL, NULL, NULL, NULL, NULL, NULL, &StartInfo, &ProcInfo); damit sollte die anwendung doch auf dem rechten bildschirm aufgehen(bei 1024x768) oder?
22. Juli 200322 j Ich glaube nicht, dass das allein über die Koordinaten funktioniert. STARTUPINFO hat ein Member lpDesktop, da musst du den Namen des Desktops angeben. An die Desktopnamen kommst du mit EnumDesktops.
22. Juli 200322 j kannst du das etwas erläutern ? ich hab doch nur einen desktop der über beide screens geht!
22. Juli 200322 j Original geschrieben von Guhopa hab ich schon probiert : STARTUPINFO StartInfo; memset(&StartInfo, 0 , sizeof(StartInfo)); StartInfo.cb = sizeof(StartInfo); // Set structure size StartInfo.dwX = 200; StartInfo.dwY = 1500; StartInfo.dwFlags = STARTF_USEPOSITION ; int res = CreateProcess(NULL, arguments.c_str(), NULL, NULL, NULL, NULL, NULL, NULL, &StartInfo, &ProcInfo); damit sollte die anwendung doch auf dem rechten bildschirm aufgehen(bei 1024x768) oder? Kann es sein das du die X und Y Koordinaten vertauscht hast? Weil der Desktop wird doch normalerweise nach rechts erweitert oder nicht? Gruß Guybrush
22. Juli 200322 j @Guybrush Threepwood wäre schön wenns nur das wäre Kann es sein das du die X und Y Koordinaten vertauscht hast? aber es scheint völlig egal zu sein mit welchen kordinaten man ihn füttert, irgendwas fehlt mir noch :confused: aber was ??:eek:
22. Juli 200322 j Kann sein, dass du gar nichts dran ändern kannst. Die Einstellungen mit STARTF_USEPOSITION wirken sich nur dann aus, wenn die betreffende Anwendung ihr erstes Overlapped-Fenster mit CW_USEDEFAULT als Koordinatenwerten erstellt. Tut sie das nicht, bewirken dwX und dwY nichts. Wie sieht denn das Applikationsfenster nach dem Start aus? Maximiert? Hast du EnumDesktops mal ausprobiert? Wenn alles nichts hilft, könntest du dir nach dem Start das Fensterhandle holen und das Fenster verschieben.
22. Juli 200322 j 1. EnumDesktops hab ich probiert und er gibt mir folgende "desktops": WinSta0, SAWinSta, Service-0x0-3e7$, Service-0x0-3e4$, Service-0x0-3e5$ aber ich weiss nicht was ich damit soll <schulterzuck> 2. die apps öffnen sich ganz normal z.b.notepad oder word wie beim letzten benutzen 3. das verschieben nach dem start wollte ich eigentlich vermeiden;)
22. Juli 200322 j Original geschrieben von Guhopa 1. EnumDesktops hab ich probiert und er gibt mir folgende "desktops": WinSta0, SAWinSta, Service-0x0-3e7$, Service-0x0-3e4$, Service-0x0-3e5$ aber ich weiss nicht was ich damit soll <schulterzuck>Hab ich doch geschrieben: Setze lpDesktop auf einen dieser Strings, z.B.: StartInfo.lpDesktop = "SAWinSta"; Einfach mal durchprobieren
23. Juli 200322 j also das mit dewn desktops hab ich sein gelassen:D bringt nichts . nun hab ich es nochmal über den STARTINFO struct bei CreateProcess probiert STARTUPINFO StartInfo; PROCESS_INFORMATION ProcInfo; memset(&ProcInfo, 0, sizeof(ProcInfo)); memset(&StartInfo, 0 , sizeof(StartInfo)); HWND hwnd = GetDesktopWindow(); RECT rect; GetWindowRect(hwnd, &rect); int x = rect.right / 4; int y = rect.bottom / 4; StartInfo.cb = sizeof(StartInfo); // Set structure size StartInfo.dwX = x ; StartInfo.dwXSize = x; StartInfo.dwY = y ; StartInfo.dwYSize = y; StartInfo.wShowWindow = SW_SHOW; StartInfo.dwFlags = STARTF_USEPOSITION | STARTF_USESHOWWINDOW | STARTF_USESIZE ; StartInfo.lpDesktop = "Default"; int res = CreateProcess(NULL, arguments.c_str(), NULL, NULL, NULL, NULL, NULL, NULL, &StartInfo, &ProcInfo); aber es ist wohl völlig egal was ich hier eingebe:( StartInfo.dwX = x ; StartInfo.dwXSize = x; StartInfo.dwY = y ; StartInfo.dwYSize = y; HELP
24. Juli 200322 j zur allgemeinen info : ich hab den process jetzt mit SW_HIDE gestartet und dann mit movewindow verschoben:bimei
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.