5
A
回答
1
這裏是我的方法與Windows XP和Delphi 2010,如果您使用的是版本的Delphi至極的不支持Unicode化妝舒爾你轉換讀ANSI
uses CommCtrl;
function TForm1.GetIconsCount: Integer;
begin
Result := SendMessage(FindTrayToolbar, TB_BUTTONCOUNT, 0, 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListTips;
end;
function TForm1.FindTrayToolbar: HWND;
begin
Result := FindWindow('Shell_TrayWND', nil);
Result := FindWindowEx(Result, 0, 'TrayNotifyWnd', nil);
Result := FindWindowEx(Result, 0, 'SysPager', nil);
Result := FindWindowEx(Result, 0, 'ToolbarWindow32', nil);
end;
procedure TForm1.ListTips;
var
dwTray: DWORD;
wndTray: HWND;
hTray: THandle;
remoteTray: Pointer;
tdata: TTBBUTTON;
i: Integer;
btsread:DWORD;
str:Pchar;
begin
wndTray := FindTrayToolbar;
GetWindowThreadProcessId(wndTray, @dwTray);
hTray := OpenProcess(PROCESS_ALL_ACCESS, false, dwTray);
if hTray <> 0 then
begin
remoteTray := VirtualAllocEx(hTray, nil, Sizeof(tdata), MEM_COMMIT,
PAGE_READWRITE);
for i := 0 to GetIconsCount - 1 do
begin
SendMessage(FindTrayToolbar,TB_GETBUTTON,wparam(i),lparam(remotetray));
ReadProcessMemory(hTray,remotetray,@tdata,sizeof(tdata),btsread);
GetMem(str,255);
ReadProcessMemory(hTray,Ptr(tdata.iString),str,255,btsread);
ListBox1.Items.Add(str);
end;
end
else ShowMessage('Could not locate tray icons');
end;
end.
4
該shell不提供檢查不屬於您的程序的通知圖標的功能。 (而且它沒有提供列舉甚至做屬於你的程序的圖標的方式,你將會比已經知道這些。)
我用的是被劫持的部分或全部的圖標的程序和可選地將它們顯示在它自己的窗口中而不是在時鐘附近的區域中,所以它一定能夠獲得所有圖標的列表。 Mike Lin,是TraySaver。如果你想看看他的黑客是如何工作的,可以使用源代碼。
你也可以看看前面提到的關於controlling the position of icons in the notification area的問題的答案。
2
你應該看看madshis組件集合的madKernal package。它有一些working with trayicons的接口。但請注意:
使用madKernel,您可以管理任何應用程序的托盤圖標(請參閱API「Shell_NotifyIcon」)。這種功能完全沒有記錄,但從win95到winXP運行良好。
ITrayIcon接口具有提示,圖標,位置等屬性。
相關問題
- 1. 如何獲取通知區域圖標列表?
- 2. HighCharts區域圖 - 只顯示懸停標記的工具提示
- 3. 標題上的圖像地圖區域工具提示
- 4. Jquery的圖像地圖區域形狀提示工具提示
- 5. 如何在Highcharts區域圖表的工具提示中顯示xAxis標籤?
- 6. 如何在android中的通知文本區域顯示圖標
- 7. 如何在通知區域顯示帶圖標的消息
- 8. 如何根據需要顯示shell通知圖標氣球工具提示?
- 9. 如何顯示Winforms ListView控件的標題區域的工具提示?
- 10. 如何獲取Angular Bootstrap工具提示?
- 11. Python在通知區域製作圖標
- 12. Angular-ui.bootstrap工具提示在圖像地圖區域
- 13. JVector地圖如何更改當鼠標光標在區域上時顯示的工具提示的大小
- 14. 如何在科爾多瓦的通知區域顯示通知?
- 15. 在D3中有工具提示的區域圖表
- 16. D3.js帶填充區域圖的工具提示
- 17. raphael js中的工具提示區域圖
- 18. 工具提示顯示在工具提示圖標頂部
- 19. 如何獲取分組類別條形圖的工具提示?
- 20. 如何獲取nvd3餅圖工具提示中的百分比?
- 21. 如何抑制ALT工具提示的某個區域標記彈起?
- 22. 通知工具提示值(WPF)
- 23. NotificationListenerService獲取通知圖標?
- 24. 使用Grafico改進工具提示區域圖表
- 25. 如何顯示來自Windows服務的通知區域氣球和圖標?
- 26. Winapi Shell_NotifyIcon - 通知區域圖標窗口中的重複圖標
- 27. 通知圖標工具提示沒有顯示,儘管設置正確szTip
- 28. 通過鍵盤焦點獲取系統托盤圖標工具提示(Win 32)
- 29. Google Chrome Package App:如何在通知區域添加圖標?
- 30. 如何在通知區域正確設置圖標?
我可以列舉的圖標中的字符串測試系統托盤 我可以枚舉應用程序(handle,pid,path) 我可以控制圖標的位置。 但我不能得到工具提示。那就是我想知道的。 –
你可能會提到在這個問題中:「我可以枚舉這些圖標,但是我無法獲得工具提示,下面是我正在使用的代碼,請幫助填寫空白。你讀過我給你的第二個鏈接了嗎? –
是的,我讀了第二個鏈接。 我可以控制通知區域中的圖標。但那是另一回事。 或多或少使用相同的代碼,我可以枚舉系統托盤中的圖標。 (從http://www.codeproject.com/KB/applications/ShellTrayInfo.aspx翻譯) 但我不能得到他們的工具提示。 –