⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_52727.htm

📁 vc
💻 HTM
字号:
<p>
序号:52727 发表者:Zerg 发表日期:2003-09-13 20:16:53
<br>主题:$如何截获“桌面刷新消息”,写了一个桌面图标透明的程序(有代码),但桌面刷新后就又要运行程序,不爽。
<br>内容:$如何截获“桌面刷新消息”,写了一个桌面图标透明的程序(有代码),但桌面刷新后就又要运行程序,不爽。<BR><BR>估计用系统钩子搞吧。 <BR><BR>有高手告诉一下吧!<BR><BR>谢谢!<BR><BR><BR>/*本菜鸟一直想搞个和像“Windows优化大师”一样的桌面图标透明程序。<BR>*<BR>*由于没有头绪,就在晚上乱搜一番。找到一些程序,它们的GDI.DLL都调用UnrealizeObject。<BR>*<BR>*~◎搞不懂~~~@@@<BR>*<BR>*后来找到一用VB6写的源码,还好我看过几天VB6的书,虽然不会用,但源码还看懂。<BR>*<BR>*于是改为以下“自己认的”最简代码。<BR>*<BR>*不怕大家笑话,我还没全看懂!<BR>*<BR>*我不明白程序中FindWindow和FindWindowEx的作用,能否讲一下。<BR>*<BR>*另外0xFFFFFFFF有 8 个 ‘F’是不是由于16位色的原因??<BR>*/<BR><BR>#define _WIN32_WINNT 0x0500<BR>#include &lt;windows.h&gt;<BR>#include &lt;commctrl.h&gt;<BR><BR>int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)<BR>{&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;HWND hWindow;<BR>&nbsp;&nbsp;&nbsp;&nbsp;hWindow = FindWindow(&#34;Progman&#34;, &#34;Program Manager&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;hWindow = FindWindowEx(hWindow, 0, &#34;SHELLDLL_DefView&#34;, &#34;&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;hWindow = FindWindowEx(hWindow, 0, &#34;SysListView32&#34;, &#34;&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;SendMessage(hWindow, LVM_SETTEXTBKCOLOR, 0, 0xFFFFFFFF);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//图标文字旁边的背景0xFFFFFFFF == 透明<BR>&nbsp;&nbsp;&nbsp;&nbsp;SendMessage( hWindow, LVM_REDRAWITEMS, 0, SendMessage(hWindow, LVM_GETITEMCOUNT, 0, 0));<BR>&nbsp;&nbsp; return 0;<BR>}<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:微笑的撒旦 回复日期:2003-09-13 23:44:11
<br>内容:Hook&nbsp;&nbsp;LVM_SETTEXTBKCOLOR 消息,注意不要让消息陷入循环。<BR><BR>&#34;我不明白程序中FindWindow和FindWindowEx的作用,能否讲一下。&#34;<BR>查MSDN!<BR><BR>0xFFFFFFFF就是-1,只是一个数字。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Zerg 回复日期:2003-09-14 12:44:54
<br>内容:不是不明白&#34;FindWindow和FindWindowEx的作用&#34;是不明白他们的函数参数为什么是<BR><BR>“Progman&#34;, &#34;Program Manager <BR><BR>&#34;SHELLDLL_DefView&#34;, <BR><BR>&#34;SysListView32&#34;, 
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:微笑的撒旦 回复日期:2003-09-14 22:45:28
<br>内容:参数的具体意义你可以查看MSDN。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Zerg 回复日期:2003-09-14 22:56:03
<br>内容:在吗?<BR><BR>谢谢了!<BR><BR>作Hook&nbsp;&nbsp;LVM_SETTEXTBKCOLOR 没钩住..<BR><BR>能帮忙搞一下吗?<BR><BR>LRESULT CALLBACK&nbsp;&nbsp;ShellProc(int code,WPARAM wParam,LPARAM lParam)<BR>{<BR>switch (WPARAM ) <BR>{ <BR>case LVM_SETTEXTBKCOLOR:<BR>&nbsp;&nbsp;&nbsp;&nbsp;hWindow = FindWindow(&#34;Progman&#34;, &#34;Program Manager&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;hWindow = FindWindowEx(hWindow, 0, &#34;SHELLDLL_DefView&#34;, &#34;&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;hWindow = FindWindowEx(hWindow, 0, &#34;SysListView32&#34;, &#34;&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;SendMessage(hWindow, LVM_SETTEXTBKCOLOR, 0, 0xffffffff); <BR>&nbsp;&nbsp; // Turn background to transparent <BR>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL, NULL, TRUE); // Repaint<BR>&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>return&nbsp;&nbsp;CallNextHookEx(NULL, code, wParam, lParam);<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:微笑的撒旦 回复日期:2003-09-15 11:52:00
<br>内容:使用CallWndProc
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Zerg 回复日期:2003-09-15 15:56:13
<br>内容:用CallWndProc 修改上面的代码,会出现严重错误.....<BR><BR>所有用HOOK的程序都出错,还要重启Win2000....<BR><BR><BR>老兄要是知道怎么写,就写一个吧....
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:微笑的撒旦 回复日期:2003-09-15 16:05:13
<br>内容:你把工程打包一下传上来或是发给我。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Zerg 回复日期:2003-09-15 16:14:05
<br>内容:就几行代码,,,放这了......<BR><BR>#define _WIN32_WINNT 0x0500<BR>#include &lt;windows.h&gt;<BR>#include &lt;commctrl.h&gt;<BR>HWND hWindow;<BR>HHOOK g_Hook = NULL;<BR>LRESULT CALLBACK&nbsp;&nbsp;ShellProc(int code,WPARAM wParam,LPARAM lParam);<BR><BR>int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PSTR szCmdLine, int iCmdShow)<BR>{&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;g_Hook = SetWindowsHookEx(WH_SHELL,ShellProc,hInstance,0);<BR><BR>MessageBox (NULL,TEXT(&#34;想截获刷新消息,使桌面图标文字透明&#34;),TEXT(&#34;桌面图标文字透明&#34;),MB_OK);<BR>/*<BR>&nbsp;&nbsp;&nbsp;&nbsp;hWindow = FindWindow(&#34;Progman&#34;, &#34;Program Manager&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;hWindow = FindWindowEx(hWindow, 0, &#34;SHELLDLL_DefView&#34;, &#34;&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;hWindow = FindWindowEx(hWindow, 0, &#34;SysListView32&#34;, &#34;&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>//SendMessage(hWindow, LVM_SETTEXTBKCOLOR, 0, 0xFFFFFFFF);<BR>//SendMessage( hWindow, LVM_REDRAWITEMS, 0, SendMessage(hWindow, LVM_GETITEMCOUNT, 0, 0));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendMessage(hWindow, LVM_SETTEXTBKCOLOR, 0, 0xffffffff); <BR>&nbsp;&nbsp;&nbsp;&nbsp;// Turn background to transparent <BR>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL, NULL, TRUE); // Repaint<BR>*/&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;UnhookWindowsHookEx(g_Hook);<BR><BR>&nbsp;&nbsp; return 0;<BR>}<BR><BR>LRESULT CALLBACK&nbsp;&nbsp;ShellProc(int code,WPARAM wParam,LPARAM lParam)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;switch (code) <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;case LVM_SETTEXTBKCOLOR:<BR>&nbsp;&nbsp;&nbsp;&nbsp;MessageBox (NULL,TEXT(&#34;Windows 2000&#34;),TEXT(&#34;messagebox&#34;),MB_CANCELTRYCONTINUE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;hWindow = FindWindow(&#34;Progman&#34;, &#34;Program Manager&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;hWindow = FindWindowEx(hWindow, 0, &#34;SHELLDLL_DefView&#34;, &#34;&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;hWindow = FindWindowEx(hWindow, 0, &#34;SysListView32&#34;, &#34;&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendMessage(hWindow, LVM_SETTEXTBKCOLOR, 0, 0xffffffff); <BR>&nbsp;&nbsp;&nbsp;&nbsp;// Turn background to transparent <BR>&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(NULL, NULL, TRUE); // Repaint<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;CallNextHookEx(NULL, code, wParam, lParam);<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Zerg 回复日期:2003-09-15 16:18:09
<br>内容:传上来了.....<BR><BR>谢谢改一下....
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:微笑的撒旦 回复日期:2003-09-16 09:31:21
<br>内容:中文名字不是很好,我这边打开的时候vc就会crash掉。<BR><BR>关于使用HOOK,你可以查看MSDN或是Windows 95程序设计指南,在侯捷的网站有下载。<BR><BR>这里,你需要把hook代码写在一个dll中。因为你要hook的是一个remote thread。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Zerg 回复日期:2003-09-17 12:45:13
<br>内容:&#34;中文名字不是很好,我这边打开的时候vc就会crash掉。&#34;<BR><BR>我用的是英文版VC++ 6,没事啊....<BR><BR>用remote thread hook ,会影响系统速度吧..<BR><BR>Windows 95程序设计指南 等老书正在看...<BR><BR>谢谢!!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -