如题,我安装了一个程序,它在任务托盘中老是有一个图标显示,我想把它隐藏了,毕竟我在公司里,被人看到不是太好

解决方案 »

  1.   

    你把explorer.exe  杀悼,然后在任务管理器中再运行一下explorer.exe。图标就没有,不过有点程序会自已再重建一个。
      

  2.   

    uses CommCtrl
    function GetToolBarButtonRect(hWnd: HWND; Title: string): TRect;
    {
      返回指定工具栏对应的按钮指定文本的矩形区域
      hWnd:工具栏句柄,Title:需要返回矩形区域的按钮文字
      返回值:指定按钮的边界矩形,屏幕坐标
    }
    var
      C, i: integer;
      Info: _TBBUTTON;
      Item: tagTCITEM;
      Buff: PChar;
      S: array[0..1024] of char;
      PID: THandle;
      PRC: THandle;
      R: Cardinal;
    begin
      FillChar(result, SizeOf(result), 0);
      if hWnd = 0 then Exit;
      GetWindowThreadProcessId(hWnd, @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);  if Format('%d.%d', [Win32MajorVersion, Win32MinorVersion]) >= '5.1' then {// Is Windows XP or Higher}
      begin
        C := SendMessage(hWnd, TB_BUTTONCOUNT, 0, 0);
        for i := 0 to C - 1 do
        begin
          FillChar(Info, SizeOf(Info), 0);
          WriteProcessMemory(PRC, Buff, @Info, SizeOf(Info), R);      SendMessage(hWnd, TB_GETBUTTON, i, integer(Buff));
          ReadProcessMemory(PRC, Buff, @Info, SizeOf(Info), R);      SendMessage(hWnd, TB_GETBUTTONTEXT, Info.idCommand, integer(integer(@Buff[0]) + SizeOf(Info)));
          ReadProcessMemory(PRC, Pointer(integer(@Buff[0]) + SizeOf(Info)), @S[0], SizeOf(S), R);
          if SameText(StrPas(S), Title) and not Boolean(SendMessage(hWnd, TB_ISBUTTONHIDDEN, Info.idCommand, 0)) then
          begin
            SendMessage(hWnd, TB_GETRECT, Info.idCommand, integer(integer(@Buff[0]) + SizeOf(Info)));
            ReadProcessMemory(PRC, Pointer(integer(@Buff[0]) + SizeOf(Info)), @result, SizeOf(result), R);        Windows.ClientToScreen(hWnd, result.TopLeft);
            Windows.ClientToScreen(hWnd, result.BottomRight);        Break;
          end;
        end;
      end
      else
      begin
        C := SendMessage(hWnd, TCM_GETITEMCOUNT, 0, 0);
        for i := 0 to C - 1 do
        begin
          with Item do
          begin
            mask := TCIF_TEXT;
            dwState := 0;
            dwStateMask := 0;
            cchTextMax := 2048;
            pszText := PChar(integer(Buff) + SizeOf(Item) * 4);
            iImage := 0;
            lParam := 0;
          end;
          WriteProcessMemory(PRC, Buff, @Item, SizeOf(Item), R);
          SendMessage(hWnd, TCM_GETITEM, i, Integer(Buff));      ReadProcessMemory(PRC, Buff, @Item, SizeOf(Item), R);
          ReadProcessMemory(PRC, PChar(integer(Buff) + SizeOf(Item) * 4), @S[0], SizeOf(S), R);      if SameText(S, Title) then
          begin
            SendMessage(hWnd, TCM_GETITEMRECT, i, integer(Buff));
            ReadProcessMemory(PRC, Buff, @result, SizeOf(result), R);        Windows.ClientToScreen(hWnd, result.TopLeft);
            Windows.ClientToScreen(hWnd, result.BottomRight);
            Break;
          end;
        end;
      end;  VirtualFreeEx(PRC, Buff, 0, MEM_RELEASE);
      CloseHandle(PRC);
    end;function GetSysTrayWnd: HWND;
    {
      返回系统托盘的句柄,适合于WinXP以上版本
    }
    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;/// Code By Kingron, 2003
    /// 获取系统托盘某个图标的坐标区域,如果要隐藏某个图标例如音量的图标,也很方便,改改就可以了
    function GetSysTrayIconRect(Text: string): TRect;
    {
      返回系统托盘中指定文字的图标的矩形区域。
      例如返回音量控制图标的矩形区域:
      GetSysTrayIconRect('音量');
    }
    begin
      result := GetToolBarButtonRect(GetSysTrayWnd, Text);
    end;
      

  3.   

    在OnCreate事件里利用到API函数SetWindowLong
    procedure TForm1.FormCreate(sender:TObject);
    begin
        SetWindowLong(Application,Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
    end;