![]() |
|
|
|
|
#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 и чем инициализирована? Что вообще хочется получить?
|
|
#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; |