实现一个关闭所有系统托盘图标但又不影响程序正常运行的软件该如何做。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    aa:hwnd;
    begin
    aa:=FindWindowEx(findwindow('shell_traywnd',nil),0,'traynotifywnd',0);
    showwindow(aa,SW_HIDE);
    end;
    结贴:)
      

  2.   

    第一,在USES中加上shellapi
    第二,先定义一个本单元的图标变量MY_Icon,并定义为TNotifyIconDataA类型(最好设置成全局变量)
    第三,加载Icon:
    private
        { Private declarations }
        //失效的图标
        DisableIcon:TIcon;
        //装载图标
        procedure InstallIcon;procedure TForm1.InstallIcon;
     begin
        //加载并允许使用Application状态的图标
        with MY_Icon do
        begin
        //定义图标尺寸
        cbSize      :=SizeOf(MY_Icon);
        //得到主窗口句柄
        Wnd         :=Handle;
        //内部标识
        uID         :=ICON_ID;
        //指明有效字段
        uFlags      :=NIF_ICON or NIF_MESSAGE or NIF_TIP;
        //回调函数消息
        uCallBackMessage:=MI_ICONEVENT;   
        //加入form图标句柄
        hIcon       :=Application.Icon.Handle;
        //鼠标在图标上时的提示信息
        szTip           :='程序运行中!';
        end;
        //装载图标
        Shell_NotifyIconA(NIM_ADD,@MY_Icon);   
     end;
     
    第四,卸载icon
    private
        { Private declarations }
        //失效的图标
        DisableIcon:TIcon;
        //卸载图标
        procedure UnInstallIcon;//卸载图标的过程
     procedure TForm1.UnInstallIcon;
     begin
        with MY_Icon do
        begin
        cbSize:=SizeOf(MY_Icon);
        Wnd   :=Handle;
        uID   :=ICON_ID;
        end;
        //删除图标
        Shell_NotifyIcon(NIM_DELETE,@MY_Icon);
     end;
    第五,安装:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
        //安装图标
        InstallIcon;
        //在任务栏上不显示程序图标
        SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);//可选
    end;
    第七,初始化用户常量
        const
        //ICON的ID标志
        ICON_ID=1;
        //自定义ICON单击事件消息
        MI_ICONEVENT=WM_USER+1;
    第八,单击操作
     private
        { Private declarations }
        //图标区自定义事件的过程以及消息声明
        procedure IconOnClick(var message:TMessage); message MI_ICONEVENT;procedure TForm1.IconOnClick(var message:TMessage);
    var
        pt:TPoint;
    begin
        //单击左键显示主窗口
        case message.lParam of
        WM_LBUTTONDOWN:
        begin
          ShowWindow(form1.Handle,SW_SHOW);
          Application.BringToFront;
        end;
        //双击左键隐藏主窗口
        WM_LBUTTONDBLCLK:
        begin
          ShowWindow(form1.Handle,SW_HIDE);
        end;
        //托盘区单击右键显示菜单
        WM_RBUTTONDOWN:
        begin
        GetCursorPos(pt);
        //使主窗口进入前台服务
        SetForegroundWindow(form1.Handle);
        PopupMenu1.Popup(pt.x,pt.y);
        end;
        end;
    end;
    第九,更改hint:
    lstrcpy(MY_Icon.szTip,pchar('asdgasdgasg'+Edit1.text));
    Shell_NotifyIconA(nim_Modify, @MY_Icon);
    更改提示MY_Icon必需是全局变量。
      

  3.   

    Shell_NotifyIcon(NIM_DELETE,@IconData);
      Application.Terminate;
      Close;
      应该可以的!