![]() |
|
#1
|
|||
|
|||
![]() При нажатии на эту кнопку прога зависает
Код:
procedure TForm1.Button4Click(Sender: TObject); begin ListBox1.clear; OpenedHANDLE := GetWindow(handle, gw_hwndfirst); while OpenedHANDLE <> 0 do begin if (OpenedHANDLE <> Application.Handle) and IsWindowVisible(OpenedHANDLE) and (GetWindow(OpenedHANDLE, gw_owner) = 0) and (GetWindowText(OpenedHANDLE, buffer, SizeOf(buffer)) <> 0) then begin GetWindowText(OpenedHANDLE, buffer, SizeOf(buffer)); ListBox1.Items.Add(StrPas(buffer)); end; OpenedHANDLE := GetWindow(handle, gw_hwndnext); end; ListBox1.ItemIndex := 0; end; Последний раз редактировалось Metaphor, 09.11.2012 в 00:03. |
#2
|
||||
|
||||
![]() Какая-то "каша" намешана. Откуда взялась переменная HANDLE и чем инициализирована? Что вообще хочется получить?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
|||
|
|||
![]() Переменная HANDLE это моя описка, исправил, но это делу не помогло, процедура должна заполнять ListBox списком открытых окон
|
#4
|
|||
|
|||
![]() Ой, извините, я немного не тот код кинул, щас все исправил
|
#5
|
||||
|
||||
![]() Так устроит?
Код:
uses PSAPI, TlHelp32; ... function TaskManager : String; var Wnd, pr : HWND; buff : array[0..127] of Char; pid : Cardinal; me32 : TModuleEntry32; begin Result := ''; Wnd := GetWindow(Form1.Handle, GW_HWNDFIRST); while Wnd <> 0 do begin if (Wnd <> Application.Handle) and (GetWindow(Wnd, GW_OWNER) = 0) and (GetWindowText(Wnd, buff, SizeOf(buff)) <> 0) then begin GetWindowText(Wnd, buff, SizeOf(buff)); Result := Result + #13#10'Программа: ' + buff + #9#9; GetWindowThreadProcessId(wnd, @pid); pr := CreateToolHelp32Snapshot(TH32CS_SNAPMODULE, pid); me32.dwSize := SizeOf(me32); Module32First(pr, me32); Result := Result + ' Путь: ' + me32.szExePath; CloseHandle(pr); end; Wnd := GetWindow(Wnd, GW_HWNDNEXT); end; end; procedure TForm1.Button7Click(Sender: TObject); begin Memo1.Lines.Clear; Memo1.Lines.Add(TaskManager); end; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |