csdn_文档中心_taskbar的奥秘.htm
来自「csdn10年中间经典帖子」· HTM 代码 · 共 320 行 · 第 1/2 页
HTM
320 行
</B> </TD></TR>
<TR bgColor=#999999>
<TD colSpan=3 height=1></TD></TR></TBODY></TABLE>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD align=middle bgColor=#fafafa class=td1 vAlign=top width=150><BR>
<SCRIPT src="CSDN_文档中心_TASKBAR的奥秘.files/microsoft.js"></SCRIPT>
</TD>
<TD align=middle width=620>
<TABLE bgColor=#eeeeee border=0 cellPadding=0 cellSpacing=0 width=600>
<TBODY>
<TR bgColor=#ffffff>
<TD align=middle height=10 width=50></TD>
<TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A
href="http://www.csdn.net/develop/">文档中心</A> - <FONT
color=#003399>Visual C++</FONT> </TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>标题</FONT></TD>
<TD><B> TASKBAR的奥秘</B> ghj1976(转贴)
</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
<TD width=500> TASKBAR的奥秘</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>出处</FONT></TD>
<TD height=10> <A
href="http://best.163.com/~lulin/TaskBar.txt">http://best.163.com/~lulin/TaskBar.txt</A></TD></TR>
<TR>
<TD align=middle height=10></TD>
<TD height=10></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
<TABLE border=0 width=600>
<TBODY>
<TR>
<TD align=left><BR>Lu Lin<BR>All<BR>把自己的窗口从TASKBAR上干掉!<BR>27 Dec
98
13:58:41<BR>嘿嘿.可让我发现TASKBAR的秘密了:DDD<BR>每个WIN32应用程序一旦创建了窗口,那么他<BR>就会在TASKBAR上显示出来个按钮.要把按钮<BR>干掉,从SDK里不能发现任何有消除的接口.<BR>原来MS在SHELL扩展里又开始保留东西了.足<BR>足8个小时泡在电脑上.终于揭开了秘密.以下<BR>是我整理好后的COM接口:<BR>DECLARE_INTERFACE_(ITaskbarList,
IUnknown) <BR>{<BR> STDMETHOD(QueryInterface)
(THIS_ REFIID riid, LPVOID * ppvObj)
PURE;<BR> STDMETHOD_(ULONG,AddRef)
(THIS)
PURE;<BR> STDMETHOD_(ULONG,Release) (THIS)
PURE;<BR> STDMETHOD(ActivateTab)(HWND)
PURE;<BR> STDMETHOD(AddTab)(HWND)
PURE;<BR> STDMETHOD(DeleteTab)(HWND)
PURE;<BR> STDMETHOD(HrInit)(void)
PURE;<BR> };<BR>typedef ITaskbarList
*LPITaskbarList;<BR>那么怎么使用呢?请看:<BR>/*--------------------------------------------------<BR>*陆麟写的把自己的WINDOW按钮从TASKBAR上干掉的源程序.<BR>*1998.12.27.<BR>*欢迎装载.请不要删除任何部分<BR>*------------------------------------------------*/<BR>#include
"wnd.h"<BR>#include <objbase.h><BR>#include
<shlobj.h><BR>DECLARE_INTERFACE_(ITaskbarList, IUnknown)
<BR>{<BR> STDMETHOD(QueryInterface) (THIS_ REFIID riid,
LPVOID * ppvObj) PURE;<BR> STDMETHOD_(ULONG,AddRef)
(THIS) PURE;<BR> STDMETHOD_(ULONG,Release) (THIS)
PURE;<BR> STDMETHOD(ActivateTab)(HWND)
PURE;<BR> STDMETHOD(AddTab)(HWND)
PURE;<BR> STDMETHOD(DeleteTab)(HWND)
PURE;<BR> STDMETHOD(HrInit)(void)
PURE;<BR>};//如果把这段加到SHLOBJ.H里那么以后就不要每次都再抄一遍了.<BR>typedef
ITaskbarList *LPITaskbarList;//定义个指针.用起来更象在用SDK:)<BR>int WINAPI
WinMain( HINSTANCE hInstance,HINSTANCE
hPrevInstance,<BR>
LPSTR lpCmdLine,int){<BR> MSG
msg;<BR> WND
*lpWND;//WND负责创建窗口.是我自己写的类.<BR> LPITaskbarList
pobj=0;<BR> CoInitialize(0);//初始化COM.开始奇妙的组件对象模型之旅:)<BR> lpWND=new
WND(hInstance,lpCmdLine,SW_MAXIMIZE);//创建个WINDOW.<BR> CoCreateInstance(CLSID_TaskbarList,0,1,IID_ITaskbarList,<BR> (void
**)&pobj);//CLSID_TaskbarList在SHLGUID.H里有定义<BR>
//另外一个也有.幸亏MS还有这些常量在.否则<BR>
//还要自己去查注册表.万幸万幸.这句程序会<BR>
//返回一个指针列表.指向我上面公开的接口.<BR> pobj->HrInit();//一定要干这件事.又是初始化:(他会告诉SHELL我们<BR>
//要有动作乐:)<BR> pobj->DeleteTab(lpWND->hWnd);//所有以上的代码归根结底就是为执行<BR>
//这句代码作准备.他会干掉TASKBAR上<BR>
//的按钮:)终于完工了.<BR> while
(GetMessage(&msg,0,0,0))//这是很普通的消息循环.<BR>
{<BR> TranslateMessage(&msg);<BR> DispatchMessage(&msg);<BR> }<BR> return
0;<BR>}<BR>以上含有基本的函数调用序列.其中WND是我自己写的类.(毕竟没兴趣学<BR>MFC了.自己写其实也很简单:))有关WND类的源程序没贴.大家应该要了也<BR>没有用.所以就不贴了.以上代码没有任何错误检查.请自己加进去.<BR>...
看了我的信可是大补啊!:).陆麟<BR>--- 蓝波95 v2.54 [NR]<BR>* Origin: SHANG HAI WILL
UNIVERSITY BBS(57956523) (6:654/1007)<BR><BR><BR><BR>Lu
Lin<BR>All<BR>Real Tech(2)<BR>16 May 99
23:54:36<BR>作者:陆麟<BR>欢迎盗版,请注出处.<BR>1999.5.16<BR><BR>今天我又要一下WIN9X
TASKBAR的运作.<BR>上次讲了用COM的方法把TASKBAR上的按钮干掉.那么TASKBAR自己<BR>的运作又是怎么样的呢.<BR>我讲一下流程吧.根据MS的文档,一个应用程序按钮出现在TASKBAR<BR>上的条件是:<BR>1.它是个UNOWNED的窗口(不属于系统的窗口).<BR>2.窗口是应用程序的主窗口.应用程序的子窗口不会出现在TASKBAR<BR>
上.STYLE包含WS_OVERLAPPED.<BR>3.该窗口处于ACTIVE状态.<BR>但是如果满足了上述条件就会出现应用程序的按钮吗?很显然,我写<BR>了这篇文章.肯定有不同于MS文档的地方:)这属于一些很技巧性的东<BR>西.<BR>一个TASKBAR
COM组件的确可以控制按钮的产生和消亡,但是COM组件<BR>是一个十分上层的东西.它通过什么控制TASKBAR上按钮呢.<BR>答案就是:靠HOOK.什么HOOK呢?SHELL
HOOK.当一个应用程序创建窗<BR>口时,SHELL会发出一定序列的SHELL消息通知SHELL
HOOK.然后,对<BR>TASKBAR的操作就进行了.很令我本人不解.但是事实的确是这样的.<BR>微软并没有把对TASKBAR的操作集成到SHOWWINDOW()等函数里.也许<BR>根据模块化的原则,USER模块不应该操作SHELL模块的功能.但是这似<BR>乎和微软的一贯做法有些不同,似乎对于系统的'集成'不利.因为一个<BR>系统组件功能被剥离到了HOOK里.<BR>那么哪个SHELL
HOOK消息通知系统该有按钮该生成了呢?如果你自己<BR>写个SHELL
HOOK,你会发现拦截任何一个HSHELL消息都不能阻止系统<BR>生成按钮.但是拦截HSHELL_WINDOWDESTROYED可以阻止系统删除按钮.<BR>这里就是技巧中的技巧.UNDOCUMENTED,而且估计以后也不会有文档.<BR>因为已经有了COM
SHELL的文档告诉程序员如何操作按钮:)<BR>任何一个单独的消息拦截都不能阻止系统产生按钮.但是通过3个消息<BR>的联合拦截,却可以做到.那3个消息就是:<BR>HSHELL_WINDOWCREATED,HSHELL_WINDOWACTIVATED,HSHELL_GETMINRECT.<BR>少一个都不行.只要这3个消息不流到当前HOOK之前的HOOK流里.系统将<BR>在应用程序激活UNOWNED主窗口后不在TASKBAR上响应.<BR>当然,这比COM实现有缺陷.不如COM调用简洁方便.但是,这离系统运作<BR>又近了一层:)<BR>...
看了我的信可是大补啊!:).陆麟<BR><BR>--- 蓝波95 v2.54 [NR]<BR>* Origin: SHANG HAI
WILL UNIVERSITY BBS(57956523)
(6:654/1007)<BR><BR><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0
width=770>
<TBODY>
<TR bgColor=#006699>
<TD align=middle bgColor=#006699 id=white><FONT
color=#ffffff>对该文的评论</FONT></TD>
<TD align=middle>
<SCRIPT src="CSDN_文档中心_TASKBAR的奥秘.files/readnum.htm"></SCRIPT>
</TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TH bgColor=#006699 id=white><FONT
color=#ffffff>我要评论</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD>你没有登陆,无法发表评论。 请先<A
href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=429">登陆</A>
<A
href="http://www.csdn.net/expert/zc.asp">我要注册</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
<TBODY>
<TR align=middle>
<TD height=10 vAlign=bottom><A
href="http://www.csdn.net/intro/intro.asp?id=2">网站简介</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=5">广告服务</A> - <A
href="http://www.csdn.net/map/map.shtm">网站地图</A> - <A
href="http://www.csdn.net/help/help.asp">帮助信息</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=2">联系方式</A> - <A
href="http://www.csdn.net/english">English</A> </TD>
<TD align=middle rowSpan=3><A
href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG
border=0 height=48 src="CSDN_文档中心_TASKBAR的奥秘.files/biaoshi.gif"
width=40></A></TD></TR>
<TR align=middle>
<TD vAlign=top>百联美达美公司 版权所有 京ICP证020026号</TD></TR>
<TR align=middle>
<TD vAlign=top><FONT face=Verdana>Copyright © CSDN.net, Inc. All rights
reserved</FONT></TD></TR>
<TR>
<TD height=15></TD>
<TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--内容结束//--><!--结束//--></BODY></HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?