Форум: "WinAPI";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];
ВнизКак получить список программ свернутых в SysTray? Найти похожие ветки
← →
MacRine (2005-06-02 21:34) [0]Господа, подскажите, как получить список программ свернутых в SysTray?
← →
VMcL © (2005-06-03 00:01) [1]Штатными средствами - никак.
← →
Digitman © (2005-06-03 10:08) [2]
> программ свернутых в SysTray
ты сначала уточни, что ты подразумеваешь под этим ..
← →
DVM © (2005-06-03 10:25) [3]послать широковещательное сообщение TaskbarCreated и поставить ловушку на WM_COPYDATA окна Shell_TrayWnd, отловив потом там те сообщения, что несут информацию о добавляемых иконках.
Только не все приложения обязаны при получении TaskbarCreated передобавить иконки.
← →
Ученик (2005-06-04 12:26) [4]>MacRine (02.06.05 21:34)
Список ProcessID
uses
CommCtrl;
function WindowProcessID(aWindow: HWnd): DWord;
begin
GetWindowThreadProcessID(aWindow, Result)
end;
function FindChild(aParent: HWnd; aClassName: PChar): HWnd;
var
Child: HWnd;
szClassName: array[0..255] of Char;
begin
Child := GetWindow(aParent, GW_CHILD);
while Child <> 0 do begin
if GetClassName(Child, szClassName, 255) > 0 then begin
if StrIComp(szClassName, aClassName) = 0 then
Result := Child
else
Result := FindChild(Child, aClassName);
if Result <> 0 then Exit
end;
Child := GetWindow(Child, GW_HWNDNEXT)
end;
Result := 0
end;
procedure TForm1.Button2Click(Sender: TObject);
var
hProcess: THandle;
hToolbar, hIconOwner: HWnd;
ButtonInfo: TTBButtonInfo;
pButtonInfo: ^TTBButtonInfo;
i, iCount: Integer;
dwSize: DWord;
begin
hToolbar := FindChild(FindWindow("Shell_TrayWnd", ""), "ToolbarWindow32");
hProcess := OpenProcess(PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or
PROCESS_VM_WRITE or PROCESS_VM_READ, False, WindowProcessID(hToolbar));
if hProcess <> 0 then try
pButtonInfo := VirtualAllocEx(hProcess, nil, SizeOf(ButtonInfo), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
try
FillChar(ButtonInfo, SizeOf(ButtonInfo), 0);
ButtonInfo.cbSize := SizeOf(ButtonInfo);
ButtonInfo.dwMask := TBIF_LPARAM;
if WriteProcessMemory(hProcess, pButtonInfo, @ButtonInfo, SizeOf(ButtonInfo), dwSize) then begin
iCount := SendMessage(hToolbar, TB_BUTTONCOUNT, 0, 0);
for i := 0 to iCount - 1 do
if SendMessage(hToolbar, TB_GETBUTTONINFO, i, Integer(pButtonInfo)) <> - 1 then
if ReadProcessMemory(hProcess, pButtonInfo, @ButtonInfo, SizeOf(ButtonInfo), dwSize) and
ReadProcessMemory(hProcess, Pointer(ButtonInfo.lParam), @hIconOwner, 4, dwSize) then
ListBox1.Items.Add(IntToStr(WindowProcessID(hIconOwner)))
end
finally
VirtualFreeEx(hProcess, pButtonInfo, 0, MEM_RELEASE)
end
finally
CloseHandle(hProcess)
end
end;
← →
Anatoly Podgoretsky © (2005-06-04 15:44) [5]Там нет программ.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c