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

通过找出该图标所对应的进程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;
}

时间: 2024-11-13 10:45:26

任务栏托盘不消失的问题-有启发的相关文章

win7家庭版任务栏预览消失,只显文字终极解决法

出现问题:win7家庭基础版,任务栏的预览窗口没有了,只有文字: Likethis: 工具/原料 services.msc 方法/步骤 网上的解决办法都试了,不管用,先把网上的方法列举出来如下: 1. 右键计算机-属性-高级系统控制-上面的那个"设置"-调整为最佳外观:(不管用) 2. 任务栏--右击--属性---把"使用AeroPeek预览桌面"打上勾:(不管用:家庭基础版没有Aero Peek) 注:有的网友说只有使用aero主题才有预览框,这不对. 3.还有的

MFC 任务托盘经常消失问题

经常发现自己写的程序任务托盘会无缘无故的消失,但是进程还是存在的,原来是资源管理器异常的时候,重新生成的时候,程序需要重新添加下任务托盘. 当explorer进程重启,taskbar将会被创建,taskbar创建后会使用字符串“TaskbarCreated”注册一个消息,然后将这个消息广播到它的所有top-level windows.因此我们可以去注册并捕获这个消息,然后在消息处理函数中调用Shell_NotifyIcon(NIM_ADD, &m_nid); 重新将托盘图标添加上. 定义WM_T

C#笔记(13)解决:任务栏图标不消失

rd诳6oe成粟8rhttp://www.docin.com/liswr240 较B9K37b53LBhttp://jz.docin.com/ibqh728 蚁22VDT阑3XNDT仙稼http://shequ.docin.com/sina_6341947044 E倜a液1S3业O鬃慕KAhttp://docstore.docin.com/sina_6270782367 凹9蚊呜珊姥eQ73http://www.docin.com/app/user/userinfo?userid=1790065

C#之创建任务栏托盘菜单

1.创建一个项目,向窗体中添加NotifyIcon控件和ContextMenuStrip控件: 2.为ContextMenuStrip控件添加子项: 3.选择NotifyIcon控件,在其属性窗口中将ContextMenuStrip属性设置为添加到窗体上的ContextMenuStrip控件,并为Icon属性设置图片. 注:必须为NotifyIcon控件的Icon属性设置图标,否则是看不到的 代码: 1 private void 显示ToolStripMenuItem_Click(object

侧滑返回导航栏以及TabBar隐藏和显示带来的坑

用系统的UINavigationBar时,返回手势重若碰到前一个页面有bar,后一个页面没bar,或者反过来时动画非常难看 如下图:因为首页隐藏了导航栏,在侧滑的时候导航栏竟然提前消失了,这是因为在侧滑的过程中就调用了视图将要出现的方法. 解决: 在滑动返回的后要出现的viewController中写下面的代码: //隐藏 - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [self.navigatio

关于一些特定的自定义导航栏,tabBar,向上滑动可隐藏的代码

有些按钮在底部SCrollView滑动的时候却是不动的,原理是加在self.view上,再用 bringSubviewToFront 函数讲其层级调为最上层.导航栏位置的按钮就用 [self.navigationController.navigationBar bringSubviewToFront:btn2]; 进入一个页面如果想让导航栏透明,消失.注意,如果在导航栏透明状态下推出一个新的页面,导航栏的透明属性会带过去. 这个时候需要在新页面的viewWillApper里边重新定义导航栏属性.

C# Winform WPF DeskBand 窗体嵌入任务栏,在任务栏显示文字

最近写了个小程序,用于将固态硬盘的写入量等信息显示在任务栏,最开始使用Windows API也可以实现,但是当任务栏托盘增加的时候,会被遮盖,最终采用了DeskBand来实现,填了很多坑. 参考的GitHub地址:https://github.com/dsafa/CSDeskBand DeskBand相关代码如下: COLORREF: // This code snippet was used by SharpShell. // using System.Drawing; using Syste

小程序自定义单页面、全局导航栏

摘要: 小程序开发技巧. 作者:小白 原文:小程序自定义单页面.全局导航栏 Fundebug经授权转载,版权归原作者所有. 需求 产品说小程序返回到首页不太方便,想添加返回首页按钮,UI说导航栏能不能设置背景图片,因为那样设计挺好看的. 需求分析并制定方案 这产品和UI都提需求了,咱也不能反驳哈,所以开始调研,分析可行性方案:1.可以添加悬浮按钮.2.自定义导航栏. 添加悬浮按钮,是看起来是比较简单哈,但是感觉不太优雅,会占据页面的空间,体验也不太好.所以想了下第二种方案,自定义导航栏既可以实现

C#实例.net_经典例子400个

一共470多例winform 界面特效的源码. 窗体与界面设计... 9 实例001  带历史信息的菜单    10 实例002  菜单动态合并    12 实例003  像开始菜单一样漂亮的菜单... 14 实例004  任务栏托盘菜单    15 实例005  可以拉伸的菜单界面    16 实例006  菜级联菜单    18 1.2  工具栏设计... 19 实例007  带带背景的工具栏    19 实例008  带浮动工具栏    20 实例009  在带下拉菜单的工具栏... 21