Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.14;
Скачать: CL | DM;

Вниз

Процессы   Найти похожие ветки 

 
Pit ©   (2006-02-20 15:26) [0]

Доброго времени суток,помогите разобратся что не правильно.
При первом вызове Popupmenu всё работает нормально, при последующих не отображается список процессов.

procedure TForm1.PopupMenu1Popup(Sender: TObject);
var
NewItem:        TMenuItem;
buff:           array[0..127] of Char;
hSnapShot:      THandle;
uProcess:       PROCESSENTRY32;
r:              longbool;
ExePath:        array[0..127] of Char;
A:              array[0..127] of Char;
TheBitmap:      TBitmap;
Icon:           TIcon;
Wnd:            hWnd;
ProcessID:      DWORD;
ProcessHandle : THandle;
begin
PopupMenu1.Items.Clear;
Wnd := GetWindow(Handle, gw_HWndFirst);
while Wnd <> 0 do begin
if (Wnd <> Application.Handle) and
IsWindowVisible(Wnd)and
(GetWindow(Wnd, gw_Owner) = 0) and
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0)
then begin
GetWindowText(Wnd, buff, sizeof(buff));
GetWindowThreadProcessId(Wnd, ProcessId);
ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessId);
GetModuleFileNameEx(ProcessHandle, 0, ExePath,127);
StrPCopy(a,ExePath);
TheBitmap:= TBitmap.Create;
Icon:= TIcon.Create;
Icon.Handle := ExtractIcon(HInstance, A, 0);
TheBitmap.Height := Icon.Height;
TheBitmap.Width := Icon.Width;
TheBitmap.Canvas.Draw(0, 0, Icon);
NewItem := TMenuItem.Create(PopupMenu1);
NewItem.Caption := buff ;
NewItem.Bitmap:= TheBitmap;
PopupMenu1.Items.Insert(0,NewItem);
end;
Wnd := GetWindow(Wnd, gw_hWndNext);
end;
TheBitmap.Free;
Icon.Free;

hSnapShot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hSnapShot<>0)then
begin
r:=Process32First(hSnapShot, uProcess);
while r <> false do
begin
ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, uProcess.th32ProcessID);
GetModuleFileNameEx(ProcessHandle, 0, ExePath,127);
TheBitmap:= TBitmap.Create;
Icon:= TIcon.Create;
StrPCopy(a,ExePath);
Icon.Handle := ExtractIcon(HInstance, A, 0);
TheBitmap.Height := Icon.Height;
TheBitmap.Width := Icon.Width;
TheBitmap.Canvas.Draw(0, 0, Icon);

NewItem := TMenuItem.Create(PopupMenu1);
NewItem.Caption := uProcess.szExeFile;
NewItem.Bitmap:= TheBitmap;
PopupMenu1.Items.Insert(0,NewItem);
TheBitmap.Free;
Icon.Free;
r:=Process32Next(hSnapShot, uProcess);
end;
CloseHandle(hSnapShot);

end;

end;


 
kaZaNoVa ©   (2006-02-20 15:48) [1]

Pit ©   (20.02.06 15:26)
ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessId);


а где соответсвующие  CloseHandle(ProcessHandle);

может в этом проблема?


 
Pit ©   (2006-02-20 15:58) [2]


> kaZaNoVa
>
> а где соответсвующие  CloseHandle(ProcessHandle);
>
> может в этом проблема?


Добавил  CloseHandle(ProcessHandle), не помогло.


 
kaZaNoVa ©   (2006-02-20 16:09) [3]


> hSnapShot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,
> 0);

сразу после этого, может еще добавить типа:

uProcess.dwSize := Sizeof(uProcess);


 
Pit ©   (2006-02-20 16:16) [4]


> kaZaNoVa ©   (20.02.06 16:09) [3]
>
> > hSnapShot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,
>
> > 0);
>
> сразу после этого, может еще добавить типа:
>
> uProcess.dwSize := Sizeof(uProcess);


Ты прав, я совсем про это забыл, всё работает.
Надо мне внимательней читать MSDN.
Спасибо Огромное kaZaNoVa .



Страницы: 1 вся ветка

Текущий архив: 2006.05.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.038 c
1-1144004930
TStas
2006-04-02 23:08
2006.05.14
Нельзя ли передать приложению данные не в виде файла, а потоком


1-1144246078
d3777
2006-04-05 18:07
2006.05.14
Файл и динамический массив


2-1146117984
IntruderLab
2006-04-27 10:06
2006.05.14
DLL


15-1145188119
Tirael
2006-04-16 15:48
2006.05.14
вход


1-1143794356
Guf
2006-03-31 12:39
2006.05.14
Количество страниц в документе MS Word