没有窗体的程序如何拦截Windows消息?比如不用Form,如何拦截WM_DEVICECHANGE?(200分)

  • 主题发起人 主题发起人 Kingron
  • 开始时间 开始时间
K

Kingron

Unregistered / Unconfirmed
GUEST, unregistred user!
注意,不是要隐藏什么窗体哦,而是不要任何窗体,并且没有Application对象哦,就是全部用<br>API来写一个程序乐,但是需要拦截WM_DEVICECHANGE,如何做?当然,用API创建一个窗体也不算.
 
你这问题可提得真歪,没有窗体,Windows怎么把消息发给程序呢?没看见Windows消息的前<br>缀是WM(代表Windows Message)吗?再说了,如果这个程序没有窗体,又怎样能通过接受<br>消息正常退出呢?
 
console 模式的程序?如果是的话,使用 GetConsoleWindow 获得窗口句柄。
 
看看 SDK Help 中对 PostThreadMessage 的说明,用 <br>PeekMessage(@Msg, 0, WM_USER,WM_USER,PM_NOREMOVE) 可以强行建立消息队列的.
 
To Sachow:<br>&nbsp; 呵呵,这个你没有明白?可以用纯API建立一个消息队列的!那些SysTray程序就可以啊?<br>&nbsp; 没有窗体的程序也可以接受消息的,比如运行之后在任务栏有一个按钮,那里有一个菜单<br>就可以控制是否结束程序阿~~~~~.<br><br>To ALL:<br>&nbsp; 现在的问题是是不是WM_XXXX消息仅仅只是发送给窗体?那样的话就没治了,如果还发送给<br>Application,那样还可以解决?
 
关注<br><br>我在写字典,也需要写成没有窗体的,只有在TrayBar上有个图标<br><br>一直不知道怎样怎么拦截系统消息,头痛
 
能不能借用一下其他程序的窗口?
 
问题是解决不了的啦;<br>不过;<br>我对这个不用窗体的程序满感兴趣;<br>共享一下
 
systray程序都有窗口的。不过是隐藏或者大小为一个象素而已。
 
用API写的话,你肯定建立了消息循环呀,往那一大串 case 里面塞不就完了。
 
&gt;比如运行之后在任务栏有一个按钮,那里有一个菜单<br>&gt;就可以控制是否结束程序阿~~~~~.<br>那就是一个窗口,你以为是什么?<br>用API写也得建立窗口,最基本的API例子也得registerwindow,除非写成console程序<br>
 
我记得每个程序一个消息队列。所以可能不行。
 
创建一个隐藏的窗口,使非可视组件能够接收到消息<br>1.一个私有变量型(Private Variable)的HWnd来取得窗口句柄<br>2.一个用来捕捉窗口发送给组件的函数(a WndProc)。<br>3.对AllcolateHwnd的调用使之创建窗口句柄并设置WndProc。<br>(实际上c++Builder的Timer就是使用该技术)
 
??看来得用 Hook?
 
好象线程也可以捕获
 
DragonPC_???:<br>我没有测试,你的应该可以把。分数给你好了~~~~~~~~
 
HOOK也没有空体啊!<br>再比如说系统发出的整个屏幕都 PAINT 消息如何截下来并发出自己的消息呢??<br>Application对象是绝对不可能的!!!<br><br>十分关注!!!<br>
 
后退
顶部