当前位置: 首页 > news >正文

任务栏托盘不消失的问题-有启示

通过找出该图标所相应的进程ID,假设该ID为NULL则删除该图标.

#include <AFX.H>
#include <COMMCTRL.H>
#include <iostream.h>
int main()
{
HWND  hStatus=::FindWindow("Shell_TrayWnd",NULL);  //得到任务栏句柄
if  (hStatus==NULL)  
{  
cout<<"Get Shell_TrayWnd error!\n";  
return -1;  
}  
HWND  hNotify=FindWindowEx(hStatus,NULL,"TrayNotifyWnd",NULL); //右下角区域 
if  (hNotify==NULL)  
{  
cout<<"Get TrayNotifyWnd error!\n";  
return -1;  
}  
HWND  hNotify1=FindWindowEx(hNotify,NULL,"SysPager",NULL);
if  (hNotify==NULL)  
{  
cout<<"Get SysPager error!\n";  
return -1;  
} 
HWND  hNotify1_0=FindWindowEx(hNotify1,NULL,"ToolBarWindow32",NULL);//右下角区域(不包含时间)
if  (hNotify1_0==NULL)   
{  
cout<<"Get ToolBarWindow32 error!\n";  
return -1;  
}  
//-------------------以上是得到任务栏右下脚一块地方的句柄
DWORD  pid = 0;  
GetWindowThreadProcessId(hNotify1_0,&pid);  
if  (pid==NULL)  
{  
cout<<"Get pid error!\n";  
return -1;  
}   

HANDLE  hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_ALL_ACCESS,true,pid);  
if  (hProcess==NULL)  
{  
cout<<"Get hd error!\n";  
return -1;  
}  
::SendMessage(hNotify1_0,WM_PAINT ,NULL,NULL); 
CRect rect;
::GetWindowRect(hNotify1_0,&rect);
::InvalidateRect(hNotify1_0,&rect,false);
int  iNum=::SendMessage(hNotify1_0,TB_BUTTONCOUNT ,NULL,NULL);  //获取任务栏上图标个数

unsigned long n = 0;  
TBBUTTON  *pButton = new TBBUTTON;  
CString  strInfo = _T("");  
wchar_t  name[256] = {0};  	
TBBUTTON  BButton; 
unsigned   long    whd,proid;
CString x;

for(int i=0; i<iNum; i++)  
{  
::SendMessage(hNotify1_0,TB_GETBUTTON,i,(LPARAM)(&BButton));  
ReadProcessMemory(hProcess,&BButton,pButton,sizeof(TBBUTTON),&n);   
if  (pButton->iString != 0xffffffff)  
{  
try  
{  
ReadProcessMemory(hProcess,(void *)pButton->iString,name,255,&n);	
}  
catch(...)  
{  
}      
strInfo.Format("%d : %s\n",i+1,CString(name)); 
TRACE(strInfo);
cout<<strInfo<<endl;
}

try   
{   
whd=0;   
ReadProcessMemory(hProcess,(void   *)pButton->dwData,&whd,4,&n);   
}   
catch(...)   
{   
}   
proid=NULL;   
GetWindowThreadProcessId((HWND)whd,&proid);   
if(proid==NULL)
::SendMessage(hNotify1_0,TB_DELETEBUTTON,i,0);
} 
delete pButton;
return 0;
}


转载于:https://www.cnblogs.com/mengfanrong/p/5325262.html

相关文章:

  • OAuth2 基于TP 搭建简单案例
  • __OSX_AVAILABLE_STARTING
  • simpson公式求定积分
  • hdu 1166 敌兵布阵(线段树详解)
  • java获取获得Timestamp类型的当前系统时间。
  • 在SQLServer使用触发器实现数据完整性
  • 软件测试学习日志3 ————软件测试作业之控制流图
  • 【bzoj1046】[HAOI2007]上升序列
  • 关于网站优化
  • 全球78707个主要城市数据库,包含经纬度坐标值、国家、省份
  • java 二进制数字符串转换工具类
  • 逻辑数据库设计 - 单纯的树(递归关系数据)
  • web storage 之留言板
  • tablib.Dataset()操作exl类型数据之“类方法”研究
  • 用自己的机器人和ubuntu PC实现通信和控制--26
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • CEF与代理
  • JavaScript 基础知识 - 入门篇(一)
  • JavaScript学习总结——原型
  • JavaScript异步流程控制的前世今生
  • Java基本数据类型之Number
  • jquery cookie
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Linux后台研发超实用命令总结
  • MySQL-事务管理(基础)
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • SQLServer之创建数据库快照
  • unity如何实现一个固定宽度的orthagraphic相机
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 使用common-codec进行md5加密
  • 我从编程教室毕业
  • 白色的风信子
  • #宝哥教你#查看jquery绑定的事件函数
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (五)MySQL的备份及恢复
  • (原)本想说脏话,奈何已放下
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET HttpWebRequest、WebClient、HttpClient
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net 程序发生了一个不可捕获的异常
  • .net程序集学习心得
  • .php文件都打不开,打不开php文件怎么办
  • .sh 的运行
  • @ComponentScan比较
  • @TableLogic注解说明,以及对增删改查的影响
  • @Valid和@NotNull字段校验使用
  • [BSGS算法]纯水斐波那契数列
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [DevOps云实践] 彻底删除AWS云资源