delphi隐藏系统托盘tray图标


本文整理自网络,侵删。

 
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;
//该代码片段来自于: http://www.sharejs.com/codes/delphi/8954

相关阅读 >>

Delphi 获取鼠标坐标

Delphi 写开关防火墙代码

Delphi 正则表达式校验手机号

Delphi xe7里面 sharedactivitycontext怎么提示错误?

Delphi xe 打开andorid gps设置

Delphi 获取鼠标与键盘空闲时间

Delphi 关闭android安卓程序

Delphi fmx检查应用程序状态更改

Delphi想tstringgrid中添加和删除行的方法

Delphi 比较两个日期相差天数

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



打赏

取消

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

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

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

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

评论

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