Форум: "WinAPI";
Текущий архив: 2002.03.11;
Скачать: [xml.tar.bz2];
ВнизКак получить HWND задачи? Найти похожие ветки
← →
DarkReign (2001-11-29 17:50) [0]Господа, помогите пожалста.
В маздае запущено куча приложений, в том числе и мой Application. Мне надо получить HWND главной формы одной из запущенных задач. Как это сделать, подскажите (всегда приходится сталкиваться с чем-то в первый раз). Я знаю, что это вроде бы делается как-то через WinApi.
Заранее благодарен за любой ответ.
← →
Иван Шихалев (2001-11-29 17:56) [1]Скорее всего FindWindow.
← →
Керик (2001-12-02 05:17) [2]Form1.handle - это и есть hwnd формы.
← →
DarkReign (2001-12-03 11:11) [3]Керик,
Да, я с тобой согласен если речь идет о МОЕЙ форме, а мне надо получить указатель на главную форму ОДНОЙ ИЗ ЗАДАЧ, запущенных в Windows. Т. е, есть несколько программ, выполняющихся одновременно с моей, и моя программа должна получить HWND нужной ей задачи из работающих в системе.
← →
Виктор Щербаков (2001-12-03 11:38) [4]Чтобы получить то, о чем ты говоришь, нужно располагать какой-то информацией о "нужной" задаче.
Например знать заголовок и/или имя класса главного окна.
В этом случае - Иван Шихалев © (29.11.01 17:56)
Если у тебя какая-то другая информация - уточни.
← →
Мороз Александр (2001-12-03 17:34) [5]Параллельный вопрос: Как получить дескриптор активного элемента активного окна.
Верно ли что GetTopWindow(GetTopWindow(GetDesktopWindow)) вернет дискриптор активного окна, если таковое вообще есть?
А вообще нужно достучаться до свойств элемента. Если это TEdit, то проверить свойство PasswordChar. Реально ли это?
← →
Виктор Щербаков (2001-12-03 17:57) [6]>Если это TEdit, то проверить свойство PasswordChar. Реально ли это?
EM_GETPASSWORDCHAR
← →
Мороз Александр (2001-12-03 18:05) [7]А можно поподробнее, я в этом не силен.
Обещаю, после этого отстану ;)
← →
drAKon (2001-12-03 20:33) [8]Подробнее:
Посылаешь этому окну (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 не используется, иначе получаешь символ, которым заменяется текст в окне.
← →
DarkReign (2001-12-05 11:01) [9]2 Виктор Щербаков:
Я знаю только имя задачи в системе.
← →
Керик (2002-01-11 05:24) [10]Ну если знаешь заголовок её то FindWindow(nil, "Заголовок");
Вместо "Заголовок" впиши ззаголовок окна и всё будет о`кей!
← →
Milz (2002-01-11 10:27) [11]Вот пример получения списка всех окон в системе с сопутствующей информацией, выдели нужное по имеющейся информации (+ см. 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;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.03.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.137 c