能力值:
( LV2,RANK:10 )
|
-
-
2 楼
一个线程对应一个消息循环
调用某些函数如GetMessage PeekMessage可以让操作系统帮本线程创建一个消息循环
dll里如果创建一个新线程,在新线程里创建窗口并进入消息循环;
dll代码如果运行在exe中本来的线程的上下文中,如果此线程本来就有消息循环,可以直接创建窗口;
|
能力值:
( LV3,RANK:30 )
|
-
-
3 楼
那要怎样让对方线程的消息循环将消息发送到我们创建的窗口,流程是什么,应用程序本身不为我们的dll处理消息,只是我们插入dll后创建了一个窗口,那么我们的窗口类里的窗口回调函数又该怎么指定呢??
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
可以hook应用程序的消息循环
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
每个线程一个消息循环,你在一个存在消息循环的线程里创建一个窗口,自然就使用了该线程的消息循环。“怎样让对方线程的消息循环将消息发送到我们创建的窗口”,只要Send、PostMessage的目标窗口是你的窗口,线程消息循环处的DispatchMessage自然会调用你的窗口过程。窗口过程可以在注册窗口类的时候指定,也可以通过SetWindowLong来改变(子类化),也可以通过SetClassLong来改变(超类化)。
创建了一个窗口还想处理其他窗口的消息,有两个办法,第一,挂钩GetMessage或其他读消息队列的函数,可以处理素有Post的消息;第二,用消息钩子,不同的钩子可以处理Post或Send的消息;
|
|
|