Народ! Как заставить Windows'а вернуть хэндл окна ЧУЖОЙ апликации? Все варианты GetWindow и GetFocus работают только внутри процесса...
GetWindow может перебирать не только окна своего процесса, для этого есть флаги GW_HWNDFIRST, GW_HWNDNEXT и т.д. Перебираешь в цикле все окна и сравниваешь их с искомым. Т.е. сделать всё-таки можно. Но проще так, как сказал Quantum
Хм, что значит не пашут? Если бы не пахали, то не было бы таких флагов в природе. Наверное это у тебя не получилось ?
Вот кусок кода, правда не на асме а на vb, но тем не менее. Рабочий. Складывает в листбокс заголовки всех окошек, запущенных в системе. Кстати, показывает значительно больше,чем таскменеждер. Код (Text): Sub GetTaskList() Dim str As String ListBox1.Clear str = "" 'получение первого по Z-Order hWnd 'перечисление начинается со своего окна CurrWnd = GetWindow(MyWindow.hwnd, GW_HWNDFIRST) 'перебираем в цикле все окна, пока очередной hWnd имеет значение не ноль Do While CurrWnd <> 0 Length = GetWindowTextLength(CurrWnd) ListItem = Space(Length + 1) Length = GetWindowText(CurrWnd, ListItem, Length + 1) If Length > 0 Then If InStr(1, str, Trim(ListItem)) Then GoTo lbl_1 ListBox1.AddItem ListItem str = str & ListItem End If 'передаём последний найденный hWnd(CurrWnd) и флаг GW_HWNDNEXT lbl_1: CurrWnd = GetWindow(CurrWnd, GW_HWNDNEXT) Loop End Sub
- это точно. Жалко только что я расстроился, все снес и сказать точно как было не могу. Ладно, буду пробовать заново.
Наверное, потому что TaskManager и не должен все окошки показывать, да? Сравивай результаты своей программки со Spy++ лучше.
flankerx Видимо менеджеру запретили, вот и не показывает Bobus Тут в аттаче GetWindow. Хотя EnumWindows наверное правильней. _1730398896__GetWindow.zip