function GetModuleFileNameExW(hProcess:THandle; hModule:HMODULE; lpFilename:PWideChar; nSize:DWORD):DWORD; stdcall; external 'PSAPI.DLL';
const
ICON_SMALL2 = 2;
function WindowGetEXE(wnd:HWND):string;
var
wt:array[0..MAX_PATH-1] of WChar;
r:integer;
prc:THandle;
prcID:cardinal;
begin
result:='';
if GetWindowThreadProcessID(wnd,prcID)<>0 then
begin
prc:=OpenProcess(PROCESS_ALL_ACCESS,false,prcID);
if prc<>0 then
try
r:=GetModuleFileNameExW(prc,0,wt,MAX_PATH*2);
if r<>0 then result:=wt;
finally
CloseHandle(prc)
end
end
end;
function WindowGetIcon(wnd:HWND; fSmall:boolean):Cardinal;
var
defIcon:HICON;
r,iType1,iType2: integer;
begin
defIcon:=LoadIcon(0,IDI_APPLICATION);
if fSmall then
begin iType1:=ICON_SMALL2; iType2:= GCL_HICONSM; end else
begin iType1:=ICON_BIG; iType2:= GCL_HICON; end;
r:=SendMessageTimeOut(wnd,WM_GETICON,iType1,0,SMTO_ABORTIFHUNG or SMTO_NOTIMEOUTIFNOTHUNG, 100, result);
if (r=0) then result:=defIcon else
begin
if (result=0) then result:=GetClassLong(wnd,iType2);
if (result=0) then result:=defIcon
end;
end;
function EnumWindowsProc(wnd:HWND; lParam: LPARAM):BOOL; stdcall;
var
wn:array[0..MAX_PATH-1] of char;
begin
result:=true;
if IsWindowVisible(wnd) and (GetParent(wnd)=0) and (GetWindow(wnd,GW_OWNER)=0) and
((GetWindowLong(wnd,GWL_EXSTYLE) and WS_EX_TOOLWINDOW)=0) then
begin
GetWindowText(wnd,wn,MAX_PATH);
with Form1.ListView1.Items.Add do
begin
Caption :=wn; // заголовок
SubItems.Add(IntToStr(wnd)); // дескриптор
SubItems.Add(WindowGetEXE(wnd)); // exe
SubItems.Add(' '); // колонка для большой иконки
ImageIndex:=ImageList_AddIcon(Form1.ImageList1.Handle,WindowGetIcon(wnd,true)); // маленькая иконка
SubItemImages[2] := ImageList_AddIcon(Form1.ImageList2.Handle,WindowGetIcon(wnd,false)); // большая иконка
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListView1.Clear;
ImageList1.Clear;
ImageList2.Clear;
EnumWindows(@EnumWindowsProc,0);
end;
Статья Как получить Список кнопок в таскбаре (TASKBAR)? раздела Рабочий стол TaskBar может быть полезна для разработчиков на Delphi и FreePascal.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.