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翻译) 但我不能得到他们的工具提示。 –