Работа с процессами

lom 09.03.2004 - 10:35 | Нужно реализовать следующую фишку. Есть экзешник, например all.exe. По некоторому событию в основной программе должен вызываться этот экзешник, причём если программа его уже вызвала раньше, нужно просто передать фокус запущеной копии, не создавая новой. В принципе допустим вариант, когда старая копия уничтожается, а новая - запускается, если это проще сделать. Как это реалтзовать ? Экзешник не мой и его исходников нет и быть не может ...
Nex 1 - 09.03.2004 - 14:53 | Насколько я понял, нужно передать фокус [главному] окну чужой программы. Получив хэндл окна, можно попробовать его показывать (ShowWindow), фокусировать (SetForegroundWindow - в XP не обязательно будет работать так, как хотелось бы) и даже делать его показываемым "поверх всех других" (SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);) Получить хэндл можно хотя бы поиском (FindWindow)...
lom 2 - 09.03.2004 - 15:08 | А насколько надёжно работает FindWindow и есть ли другие варианты ?
UE 3 - 09.03.2004 - 15:38 | Надежнее использовать EnumChildWindows/EnumWindows. Кроме того, в данной задаче может оказаться крайне полезной функция GetWindowThreadProcessId.
lom 4 - 09.03.2004 - 15:59 | Всем спасибо, сделал пока просто через FindWindow. Может переделаю через EnumWindow. А для чего сожет понадобится GetWindowThreadProcessId ?
UE 5 - 09.03.2004 - 17:27 | Ты в своей программе будешь создавать процесс (CreateProcess), запуская известный тебе exe-шник. Таким образом, ты будешь знать дескрипторы/идентификаторы процесса и основного потока приложения. Запомнив их, ты потом сможешь найти нужное тебе окно, просто проверив, принадлежит ли оно запущенному тобою процессу (GetWindowThreadProcessId) - имхо, это самый надежный путь.
lom 6 - 09.03.2004 - 17:46 | [5] - понятно, в принципе ты прав ;). Пока я для простоты через WinExec() запускаю, возможно впоследствии изменю.
UE 7 - 09.03.2004 - 17:52 | Да, и вот насчет того, чтобы окошку фокус дать нормально: http://www.kuban.ru/forum_new/forum2/arhiv/7414.html
lom 8 - 09.03.2004 - 18:37 | спасибо - кстати, при использовании этого кода окно действительно выскакивает наверх, но почему - то оно уменьшается в размерах (то есть было на весь эран - а после вызова этой функции - нет)
UE 9 - 09.03.2004 - 18:40 | > ::ShowWindow(Handle, SW_RESTORE); Может из-за этого?...

>>