Название: Задание коорлинат открываемых программ Отправлено: MrGooD от Ноябрь 29, 2006, 19:30 Подскажите пожалуйста, я использую QProcess, лаунчу им .exe файл, как я могу ловить всплывающее окно, чтобы потом указать где ему появиться?(мне просто необходимо делать подгонку открывающихся программ под свой лаунчер)
Название: Задание коорлинат открываемых программ Отправлено: Dendy от Ноябрь 29, 2006, 20:18 Задача потенциально нерешаемая. Количество окон может бьІть как 0 (ноль) так и N (енн), которьІе программа сама вьІстроит как ей заблагорассудится. Есть платформозависимьІй Q_PID, можно попробовать с ним.
Название: Задание коорлинат открываемых программ Отправлено: MrGooD от Ноябрь 29, 2006, 21:40 А где можно посмотреть про этот Q_pid?
Название: Задание коорлинат открываемых программ Отправлено: Dendy от Ноябрь 30, 2006, 00:56 Винда: MSDN
Только не ищи прямое словосочетание. Название: Задание коорлинат открываемых программ Отправлено: Tonal от Ноябрь 30, 2006, 08:02 Для винды можно указать дефолтные координаты окон процесса, (см CreateProcess +STARTUPINFO).
Кроме того, можно установить глобальный хук на создание окон и на сообщения. Но кроме того, что это только для винды, возникают непонятки с процессами, которые сами контролируют свои размеры/положение. Название: Задание коорлинат открываемых программ Отправлено: MrGooD от Декабрь 01, 2006, 20:33 Сделал, но программы появляются всё-равно где хотят
Делал так: #include <Windows.h> STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); memset(&si, 0, sizeof(STARTUPINFO)); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); si.dwX=1000; si.dwXSize=100; si.dwY=0; si.dwYSize=200; si.dwFlags=STARTF_USEPOSITION; if( !CreateProcess( NULL, // No module name (use command line). TEXT("notepad.exe"), // Command line. NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent's environment block. NULL, // Use parent's starting directory. &si, // Pointer to STARTUPINFO structure. &pi ) // Pointer to PROCESS_INFORMATION structure. ) { QMessageBox::information(this, "Îøèáêà","Íå óäà¸òñÿ çàïóñòèòü ïðîãðàììó!"); } Название: Задание коорлинат открываемых программ Отправлено: Tonal от Декабрь 01, 2006, 21:36 Забыл dwFlags заполнить.
Название: Задание коорлинат открываемых программ Отправлено: MrGooD от Декабрь 02, 2006, 01:13 Да нет, вроде заполнил
si.dwFlags=STARTF_USEPOSITION; Название: Задание коорлинат открываемых программ Отправлено: Tonal от Декабрь 02, 2006, 08:14 Немного утоптал твой код: ;-)
Код: #include <iostream> Если вызывать его несколько раз подряд, хорошо видно, что при открытии окно notepad-а дёргается. Отсюда заключаем, что код сработал, но notepad сам контролирует своё положение и размеры - восстанавливает последние запомненные. Название: Задание коорлинат открываемых программ Отправлено: MrGooD от Декабрь 02, 2006, 21:38 Сенки, за это, и за понимание. Кстати, если ланчить cmd, то всё открывается так как мы хотим :) А можно тогда не указывать "начальую позицию", а допустим дать ей запуститься где она хочет, но потом уже передвинуть?
Название: Задание коорлинат открываемых программ Отправлено: Tonal от Декабрь 03, 2006, 00:37 Тоже вариант.
Ждёшь процесс на WaitForInputIdle, а после передвигаешь. Но таки грабли остаются - не ясно, что получится с консольными процессами. Ну и ешё нужно обрабатывать состояние (свёрнуто, распахнуто, обычное). И не очень понятно как это будет соотноситься с самим приложением, если оно тоже меняет своё положение. А если оно ещё и SDI... |