![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить HWND задачи? [D5, Win2k]
DarkReign © (2001-11-29 17:50:00)Господа, помогите пожалста.
В маздае запущено куча приложений, в том числе и мой Application. Мне надо получить HWND главной формы одной из запущенных задач. Как это сделать, подскажите (всегда приходится сталкиваться с чем-то в первый раз). Я знаю, что это вроде бы делается как-то через WinApi.
Заранее благодарен за любой ответ.
Milz (2002-01-11 10:27:00) [1]Вот пример получения списка всех окон в системе с сопутствующей информацией, выдели нужное по имеющейся информации (+ см. TProcessEntry32).
uses tlhelp32;
procedure TAppMainForm.UpdProcList;
label lbCont;
var
FindWnd : hWnd;
buff: ARRAY [0..127] OF Char;
str:string;
hSn: THandle;
FindWProcID:DWORD;
lppe: TProcessEntry32;
begin
Proclist.Clear;
//Делаем снимок процессов
hSn := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS ,0);
// перебираем список окон
FindWnd := GetWindow(Handle, gw_HWndFirst);
while FindWnd <> 0 do begin
// ID окна
str := IntToHex(FindWnd,8);
// Заголовок окна
GetWindowText(FindWnd, buff, sizeof(buff));
str:= str + " " + StrPas(buff);
// ID процесса, открывшего данное окно
GetWindowThreadProcessId(FindWnd,@FindWProcID);
str:= str + " [" + IntToHex(FindWProcID,8);
// Имя файла процесса, открывшено данное окно
//Перебираем список всех процессов и находим относящийся к данному окну
if Process32First(hSn, lppe) then
repeat
//Сравниваем ID и получаем имя ехе и путь
if lppe.th32ProcessID = FindWProcID then begin
str:= str + " " + ExtractFileName(lppe.szExeFile) + "]";
goto lbCont;
end;
until not Process32Next(hSn, lppe);
lbCont:
Proclist.Items.AddObject(str,tObject(FindWnd));
FindWnd := GetWindow(FindWnd, gw_hWndNext);
end;
CloseHandle(hSn);
Proclist.ItemIndex := 0;
end;
Керик (2002-01-11 05:24:00) [2]Ну если знаешь заголовок её то FindWindow(nil, "Заголовок");
Вместо "Заголовок" впиши ззаголовок окна и всё будет о`кей!
DarkReign (2001-12-05 11:01:00) [3]2 Виктор Щербаков:
Я знаю только имя задачи в системе.
drAKon (2001-12-03 20:33:00) [4]Подробнее:
Посылаешь этому окну (hwnd которого ты уже знаешь) сообщение EM_GETPASSWORDCHAR
SendMessage(
(HWND) hWnd, // handle to destination window
EM_GETPASSWORDCHAR, // message to send
(WPARAM) wParam, // not used; must be zero
(LPARAM) lParam // not used; must be zero
);
Если результат равен 0, то PasswordChar не используется, иначе получаешь символ, которым заменяется текст в окне.
Мороз Александр (2001-12-03 18:05:00) [5]А можно поподробнее, я в этом не силен.
Обещаю, после этого отстану ;)
Виктор Щербаков (2001-12-03 17:57:00) [6]>Если это TEdit, то проверить свойство PasswordChar. Реально ли это?
EM_GETPASSWORDCHAR
Мороз Александр (2001-12-03 17:34:00) [7]Параллельный вопрос: Как получить дескриптор активного элемента активного окна.
Верно ли что GetTopWindow(GetTopWindow(GetDesktopWindow)) вернет дискриптор активного окна, если таковое вообще есть?
А вообще нужно достучаться до свойств элемента. Если это TEdit, то проверить свойство PasswordChar. Реально ли это?
Виктор Щербаков (2001-12-03 11:38:00) [8]Чтобы получить то, о чем ты говоришь, нужно располагать какой-то информацией о "нужной" задаче.
Например знать заголовок и/или имя класса главного окна.
В этом случае - Иван Шихалев © (29.11.01 17:56)
Если у тебя какая-то другая информация - уточни.
DarkReign (2001-12-03 11:11:00) [9]Керик,
Да, я с тобой согласен если речь идет о МОЕЙформе, а мне надо получить указатель на главную форму ОДНОЙ ИЗ ЗАДАЧ, запущенных в Windows. Т. е, есть несколько программ, выполняющихся одновременно с моей, и моя программа должна получить HWND нужной ей задачи из работающих в системе.
Керик (2001-12-02 05:17:00) [10]Form1.handle - это и есть hwnd формы.
Иван Шихалев (2001-11-29 17:56:00) [11]Скорее всего FindWindow.