隐藏窗口和任务栏图标的实现

news/2025/3/1 3:43:48/

     网上也有这类小程序,用过2个都觉得不够方便,所以就想着自己来实现一个。

     功能:响应快捷键或者按钮隐藏(显示)包含关键字的窗口和任务栏图标,可设定隐藏关键字、设定快捷键、程序最小化到托盘。

   

     主要包含以下几个模块:

1. 设置和响应快捷键  2.设置关键字,枚举运行的窗口并隐藏之  3.程序最小化到托盘。 下面分别介绍一下程序的实现

 

1. 响应快捷键,最小化到托盘情况下响应全局快捷键

     设置就不提了。

         a.   .h中添加

afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);

b.     消息映射添加:

ON_MESSAGE(WM_HOTKEY,OnHotKey)

c.      响应函数:

LRESULT CADA_HideTaskDlg::OnHotKey(WPARAM wParam,LPARAM lParam)

{

if(HideTaskClass::m_Hide == TRUE)

{

gShowTaskBar();

HideTaskClass::m_Hide = FALSE;

}

else

{

gHideTaskBar();

HideTaskClass::m_Hide = TRUE;

}

return TRUE;

}

 

2.  枚举并隐藏窗口

a. 枚举窗口

EnumWindows(ADA_EnumWindowsProc,NULL);

 

b. 在枚举窗口函数内取得窗口名进行处理

BOOL CALLBACK ADA_EnumWindowsProc(HWND hWnd, LPARAM lParam)

{

char * bTaskName;

int cTxtLen,i;

CString cTitle,strtmp;

 

//be sure the current window is visible

if(::GetWindowLong(hWnd,GWL_STYLE)& WS_VISIBLE)

{

//Get the task name

cTxtLen = ::GetWindowTextLength(hWnd);

bTaskName = (char *) VirtualAlloc((LPVOID) NULL,(DWORD) (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE);

::GetWindowText(hWnd,bTaskName, cTxtLen + 1);

cTitle = bTaskName;

cTitle.MakeUpper();

 

for(i=0;i<HideTaskClass::m_HideString.GetSize();i++)

{

strtmp = HideTaskClass::m_HideString[i];

if(cTitle.Find(strtmp) >=0)

{

HideTaskClass::m_HideTaskTitle.Add(cTitle);

HideTaskClass::m_HideTaskCnt++;

}

}

 

}

return TRUE;

}

         

c.  隐藏找到匹配关键字的窗口

for(i=0;i<HideTaskClass::m_HideTaskTitle.GetSize();i++)

{                        

cTitle = HideTaskClass::m_HideTaskTitle[i];

CWnd* pWnd = CWnd::FindWindow(NULL, cTitle);

if( pWnd )

{

pWnd->ShowWindow(SW_HIDE);

HideTaskClass::m_Hide = TRUE;        

}

}

 

     d. 隐藏窗口

for(i=0;i<HideTaskClass::m_HideTaskTitle.GetSize();i++)

{                        

cTitle = HideTaskClass::m_HideTaskTitle[i];

CWnd* pWnd = CWnd::FindWindow(NULL, cTitle);

 

if( pWnd )

{

pWnd->ShowWindow(SW_HIDE);

 

HideTaskClass::m_Hide = TRUE;        

}

}

 

3. 最小化到托盘

 

原理就是窗口隐藏,然后在托盘创建一个图标

a. 最小化点击后调用函数

void CADA_HideTaskDlg::OnSysCommand(UINT nID, LPARAM lParam)下面加入:

if(nID==SC_MINIMIZE)              

SendToTray(); //最小化到托盘的函数  自定义

 

b. 加一个成员函数

void CADA_HideTaskDlg::SendToTray()

{

    NOTIFYICONDATA nid;                   //定义托盘图标信息

nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);    

nid.hWnd=this->m_hWnd;    

nid.uID=IDI_HT;                       // 图标名 

nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;    

nid.uCallbackMessage=WM_SHOWTASK;     //图标点击之后的自定义消息名称    

nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_HT));    

strcpy(nid.szTip,"HideTask");         //图标信息提示条    

Shell_NotifyIcon(NIM_ADD,&nid);       //在托盘区添加图标    

ShowWindow(SW_HIDE);                  //隐藏程序窗口

 

}

 

c. 设置message

#define WM_SHOWTASK (WM_USER +1)

 

-------以下是双击图标重新显示程序---------

 

d. 定义消息处理成员函数

afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam);

 

e.添加message map

ON_MESSAGE(WM_SHOWTASK,OnShowTask)

 

f.消息响应

LRESULT CADA_HideTaskDlg::OnShowTask(WPARAM wParam, LPARAM lParam)

{

    if(wParam!=IDI_HT)        

return 1;    

switch(lParam)    

{           

case WM_RBUTTONUP:                               //右键起来时弹出快捷菜单       

{               

LPPOINT lpoint=new tagPOINT;            

::GetCursorPos(lpoint);                //得到鼠标位置            

CMenu menu;            

menu.CreatePopupMenu();                //声明一个弹出式菜单            

//增加菜单项“关闭”,点击则发送消息WM_CLOSE给主窗口(已隐藏),将程序结束。            

menu.AppendMenu(MF_STRING,ID_APP_EXIT,"关闭程序");                                     

menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);    //确定弹出式菜单的位置         

HMENU hmenu=menu.Detach();                

menu.DestroyMenu();            

delete lpoint;        

}           

break;        

case WM_LBUTTONDBLCLK:                           //双击左键的处理        

{            

this->ShowWindow(SW_SHOW);                  

DeleteTray();       

}           

break;        

default:          

break;   

}    

return 0;

}

 

void CADA_HideTaskDlg::DeleteTray()

{

NOTIFYICONDATA nid;  

nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);  

nid.hWnd=this->m_hWnd;  

nid.uID=IDI_HT;  

nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;  

nid.uCallbackMessage=WM_SHOWTASK;                 //自定义的消息名称  

nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_HT));  

strcpy(nid.szTip,"HideTask");                       

Shell_NotifyIcon(NIM_DELETE,&nid);                //在托盘区删除图标

}

 

 

以上是实现隐藏窗口和任务栏图标的几个重要功能块。将会将可执行的exe文件放到CSDN的下载频道中。欢迎讨论

 


http://www.ppmy.cn/news/805626.html

相关文章

【办公软件】如何设置任务栏图标的显示与隐藏

在平时的办公中使用办公软件&#xff0c;总觉得有消息提示会打扰到自己。或是有一些必用的软件有消息提示却没有显示出来。那么如何才能设置Windows电脑右下角任务栏上的软件状态图标显示与隐藏呢&#xff1f; 如下所示&#xff0c;我在办公的时候需要使用飞书&#xff0c;但是…

windows10 右下角任务栏 隐藏图标

刚装完系统&#xff0c;右下角图标特别多 右击任务栏 》 任务栏设置 》 显示所有通知 关掉就行了

Win10任务栏的隐藏图标的小三角怎么弄出来

首先&#xff0c;我们打开我们的电脑&#xff0c;然后我们点击开始&#xff0c;弹出的界面&#xff0c;我们点击设置&#xff1b; 弹出的界面&#xff0c;我们点击个性化&#xff1b; 弹出的界面&#xff0c;我们点击任务栏&#xff0c;然后我们点击选择哪些图标显示在任务栏…

【QT学习】如何隐藏标题栏、任务栏图标及子窗口置顶?(附常用窗口标志)

文章目录 前言一、标题栏隐藏二、子窗口置顶三、任务栏图标隐藏四、单击任务栏图标显示&#xff08;隐藏&#xff09;窗口附&#xff1a;QT常用窗口标志总结 前言 本篇&#xff0c;将介绍如何隐藏窗口标题栏、任务栏图标以及子窗口置顶等方法&#xff0c;并附上QT常用的窗口标志…

Linux——统信UOS(v20-1060a)部署.net core项目

部署.net core之前&#xff0c;请先确定已经安装了运行环境 Linux安装.net core环境 新建一个用于测试的 .net core web 项目 直接发布到文件夹&#xff0c;目标运行时选择 linux-64&#xff0c;这里根据你自己的操作系统的运行环境选择。 先点击完成&#xff0c;后面再设置参…

小米键盘如何设置功能键为默认的F1-F12

方式&#xff1a;按 escFn 可以切换到默认设置

进入桌面前键盘能用,进入桌面以后无法使用的解决办法

进入桌面前键盘能用&#xff0c;进入桌面以后无法使用的解决办法&#xff1a; 1、首先进入设备管理器检查键盘驱动是否正常 2、如果键盘驱动正常&#xff0c;进入控制面板的轻松访问中心检查筛选键是否被启用&#xff0c;如果筛选键是启用状态&#xff0c;请关闭筛选键

小米 mysql sql审核_mysql和sql - 小米米儿小的个人空间 - OSCHINA - 中文开源技术交流社区...

一&#xff0e;MySQL的安装 使用命令终端打开服务启动项&#xff1a;services.msc 安装MySQL后&#xff0c;应注意以下配置&#xff1a; 1.选择第一项Reconfigure Instance进行重新配置。 2.选择第一项详细配置。 3.用户类型选择&#xff1a;开发者选择第一项。 4.数据库的使用…