Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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;




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.11;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.031 c
14-32538          kaif                  2002-01-21 19:37  2002.03.11  
Как приобрести компоненты?


3-32391           kserg@ukr.net         2002-02-11 11:35  2002.03.11  
Как в StatusBar вывести иконку?


14-32558          CB                    2002-01-28 07:59  2002.03.11  
БД


14-32555          RUS1                  2002-01-25 14:47  2002.03.11  
Братья нужен простенький инсталятор на Delphi с исходными текстами!!


1-32436           Vacheslav             2002-02-21 18:50  2002.03.11  
Подскажите, как создать фоновый поток или/и киньте ссылки на лит-ру по потокам.