|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Многопоточное приложение
Доброго! Вот и моя очередь пришла просить помощи, не хватает моих знаний.
Есть программа для работы с определенными окнами, при запуске смотрит все запущенные окна и отсеевает по классу окна и добавляет их в ComboBox. Код:
i:=0; Wnd:=FindWindow(nil,nil); while Wnd<>0 do begin GetClassName(Wnd,Cl,100); if Cl='ElementClient Window' then begin GetWindowText(Wnd,Hndl,SizeOf(Hndl)); GetWindowThreadProcessId(Wnd,@window[i]); hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,window[i]); ReadProcessMemory(hProcess,ptr(BA),@ibuf,sizeof(ibuf),BC); ReadProcessMemory(hProcess,ptr(ibuf+$1C),@ibuf,sizeof(ibuf),BC); ReadProcessMemory(hProcess,ptr(ibuf+$28),@ibuf,sizeof(ibuf),BC); ReadProcessMemory(hProcess,ptr(ibuf+$6F4),@ibuf,sizeof(ibuf),BC); ReadProcessMemory(hProcess,ptr(ibuf),@Nick,sizeof( Nick),BC); Form1.ComboBox1.Items.Add(Nick); window[i] := Wnd; inc(i); end; Код:
window: array[0..20] of THandle; Код:
Wnd:=window[Form1.ComboBox1.ItemIndex]; GetWindowThreadProcessid(Wnd,@hProcess); hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,hProcess); |
#2
|
|||
|
|||
Ну и в чем проблема?
При добавлении в список, сохраняй хэндл окна и потом, при запуске потоков, просто передавай его в поток. Типа: Код:
var i : integer; thrd : TMyThread; begin for i := 0 to CheckListBox.Items.Count-1 do if CheckListBox.Checked[i] then begin thrd := TMyThread.Create(True); thrd.WndHandle := THandle(CheckListBox.Items.Objects[i]); thrd.Resume; end; соответсвенно, при добавлении окон в список пользуем AddObject() и у потока надо иметь соотв аттрибут WndHandle. PS. точно иерархию свойств в TCheckListBox я не помню, так что проверь там... |