两个问题:窗体及消息(100分)

  • 主题发起人 主题发起人 hwave
  • 开始时间 开始时间
H

hwave

Unregistered / Unconfirmed
GUEST, unregistred user!
本人学习HOOk,选了个题目:屏幕取词<br>已成功安装鼠标钩子及修改了系统的Textout、ExtTextout函数。<br>现向大侠提两个问题:<br>1是如何在DLL中建立一个小窗体(窗体句柄是什么)发出该区域的WM_PAINT消息?<br>2是怎样把取到的字符以消息的方式发送到我的窗体中?
 
1.没问题,只要在DLL外挂一个DELPHI单元,然后在这个单元声明一个Form类,创建<br>之即可。<br>2.SendMessage;
 
2, 当然是 发送 WM_COPYDATA, 要用 PostMessage.
 
<br>具体点,我在Delphi如何接受以下消息的字符串<br>char sBufTextOut2[128];<br>PostMessage(HTextHookWnd, WM_TEXTHOOK, 1 ,(LPARAM)sBufTextOut2);
 
PostMessage 有点难度。用SendMessage就简单了。
 
重载WndProc过程不能截获PostMessage送过来的消息吗?<br>我在自己的程序中如果使用SendMessage的话,都是用重载<br>WndProc函数来处理的.
 
重载WndProc函数<br>使用SendMessage
 
第一个问题:用CreateWindow来建窗体,具体用法:<br>HWND hwnd; <br>WNDCLASS wc; <br>memset(&amp;wc,0,sizeof(WNDCLASS));<br>wc.style = CS_HREDRAW|CS_VREDRAW |CS_DBLCLKS ;<br>wc.lpfnWndProc = (WNDPROC)MainWndProc; <br>wc.hInstance = hInst; <br>wc.hbrBackground = (HBRUSH)(COLOR_WINDOW); <br>wc.lpszClassName = "keyWndClass";<br>wc.lpszMenuName = NULL; <br>wc.hCursor = LoadCursor(NULL,IDC_ARROW);<br>wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); <br>RegisterClass(&amp;wc));<br>hwnd=CreateWindow("keyWndClass","key",WS_VISIBLE|WS_CAPTION|WS_SYSMENU,<br>297,119,282,324,NULL,NULL,hInst,NULL);//hInst是程序的HINSTANCE<br>于是,hwnd就是窗体的句柄<br>第二个问题:<br>用SendMessage;<br>#define WM_MYMSG WM_USER+101<br><br>在发送进程:<br>char szBuffer[];//假设这是要发送的缓冲区<br>SendMessage(GoalhWnd,WM_MYMSG,NULL,(LPARAM)szBuffer);<br><br>在接收进程:<br>#define WM_MYMSG WM_USER+101<br>响应WM_MYMSG:<br>char szBuffer=(char*)lParam;<br>
 
错了,我答错了!
 
好像要用共享内存的,nt下可以用FileMap,9x下可以用Global内存。<br>有例子可以看看:<br>ftp://ftp.cs.pku.edu.cn/ProgramSource/DelphiCom/GUIhook95.zip<br>ftp://ftp.cs.pku.edu.cn/ProgramSource/DelphiCom/GUIhookNT.zip
 
接受答案了.
 
API HOOK、屏幕取词的完整解决方案见我的《delphi深入windows核心编程》一书,<br>解决了IE、win98下的高技术难题,支持windows98/2000/xp,<br>我的主页http://wenjinshan.yeah.net
 
后退
顶部