Guhopa Geschrieben 22. Juli 2003 Geschrieben 22. Juli 2003 hi, zusammen. ich habe zwei bildschirme und öffne mit CreateProcess eine applikation. wie kann ich nun bestimmen auf welchem bildschirm die applikation startet? :confused: Zitieren
Klotzkopp Geschrieben 22. Juli 2003 Geschrieben 22. Juli 2003 Ü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 Zitieren
Guhopa Geschrieben 22. Juli 2003 Autor Geschrieben 22. Juli 2003 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? Zitieren
Klotzkopp Geschrieben 22. Juli 2003 Geschrieben 22. Juli 2003 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. Zitieren
Guhopa Geschrieben 22. Juli 2003 Autor Geschrieben 22. Juli 2003 kannst du das etwas erläutern ? ich hab doch nur einen desktop der über beide screens geht! Zitieren
Guybrush Threepwood Geschrieben 22. Juli 2003 Geschrieben 22. Juli 2003 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 Zitieren
Guhopa Geschrieben 22. Juli 2003 Autor Geschrieben 22. Juli 2003 @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: Zitieren
Klotzkopp Geschrieben 22. Juli 2003 Geschrieben 22. Juli 2003 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. Zitieren
Guhopa Geschrieben 22. Juli 2003 Autor Geschrieben 22. Juli 2003 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;) Zitieren
Klotzkopp Geschrieben 22. Juli 2003 Geschrieben 22. Juli 2003 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 Zitieren
Guhopa Geschrieben 23. Juli 2003 Autor Geschrieben 23. Juli 2003 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 Zitieren
Guhopa Geschrieben 24. Juli 2003 Autor Geschrieben 24. Juli 2003 zur allgemeinen info : ich hab den process jetzt mit SW_HIDE gestartet und dann mit movewindow verschoben:bimei Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.