Delphi隐藏指定程序的托盘图标


本文整理自网络,侵删。

  

突然想到又添加一个把“疯狂刷新”的托盘图标都隐藏的功能。于是百度了半天才弄到一个还可以的实现功能。


(添加uses CommCtrl;)

procedure HideAllTrace;
var TBHWND: HWND;
i, count: Integer;
PID, PRC: THandle;
Buff: PChar;
Info: _TBBUTTON;
R: Cardinal;
S: array[0..1024] of char;
begin
TBHWND := GetSysTrayWnd;
if TBHWND = 0 then exit;

GetWindowThreadProcessId(TBHWND, @PID);
PRC := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, PID);
Buff := VirtualAllocEx(PRC, nil, 4096, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
count := SendMessage(TBHWND, TB_BUTTONCOUNT, 0, 0); //托盘中button的个数,不一定是图标的个数,有些button是隐藏的。
for i := 0 to count - 1 do
begin
FillChar(Info, SizeOf(Info), 0);
WriteProcessMemory(PRC, Buff, @Info, SizeOf(Info), R); //消息使用的内存空间必须在Shell之内,所以利用ReadProcessMemoery和WriteProcessMemory。
SendMessage(TBHWND, TB_GETBUTTON, i, Integer(Buff));
ReadProcessMemory(PRC, Buff, @Info, SizeOf(Info), R);

SendMessage(TBHWND, TB_GETBUTTONTEXT, Info.idCommand, Integer(Integer(@Buff[0]) + SizeOf(Info)));
ReadProcessMemory(PRC, Pointer(Integer(@Buff[0]) + SizeOf(Info)), @S[0], SizeOf(S), R);
if pos('疯狂刷新', StrPas(S)) > 0 then //如果button的TEXT中包含'疯狂刷新'
SendMessage(TBHWND, TB_DELETEBUTTON, i, 0); //删除
end;
VirtualFreeEx(PRC, Buff, 0, MEM_RELEASE);
CloseHandle(PRC);
end;

但终因这个功能太猥亵,有点你木马或恶意软件而没有添加到辅助工具里。

相关阅读 >>

Delphi 常用控件属性

干掉360保险箱vb/vc/Delphi 源码

Delphi webbroker iis cgi 的配置

Delphi 删除动态数组的指定元素

Delphi 按字母排序的windows窗口公用消息

Delphi 把字符串复制到剪贴板

Delphi fdconnection执行sql execsql

Delphi firedac 获取 insert 记录的自增 id

Delphi 禁用本地网络连接/启用本地网络连接

Delphi读取webbrowse中的图片显示在image中

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    正在狠努力加载,请稍候...