以下的这个函数是在Mouse Hook所在的DLL中调用的
void InstallPipe()
{
::CreatePipe(&g_hPipeRead,&g_hPipeWrite,NULL,sizeof(g_szEdit));
}LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
.............
WriteFile(g_hPipeWrite,g_szEdit,sizeof(g_szEdit),&dwWritten,NULL);
// g_szEdit的长度为MAX_PATH*2
PostMessage(HWND_BROADCAST,g_dwGotIt,0,0);
//广播消息通知主程序已向Pipe写入内容
............
return ::CallNextHookEx(g_hMouseHook,nCode,wParam,lParam);
}//主程序直接用Win32 Application写的
void OnGotIt(WPARAM wParam,LPARAM lParam)
{
TCHAR szBuffer[MAX_PATH*2];
ReadFile(g_hPipeRead,szBuffer,MAX_PATH,&dwRead,NULL);
//只读一个MAX_PATH也读不了,一执行到这里就死机
}
void InstallPipe()
{
::CreatePipe(&g_hPipeRead,&g_hPipeWrite,NULL,sizeof(g_szEdit));
}LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
.............
WriteFile(g_hPipeWrite,g_szEdit,sizeof(g_szEdit),&dwWritten,NULL);
// g_szEdit的长度为MAX_PATH*2
PostMessage(HWND_BROADCAST,g_dwGotIt,0,0);
//广播消息通知主程序已向Pipe写入内容
............
return ::CallNextHookEx(g_hMouseHook,nCode,wParam,lParam);
}//主程序直接用Win32 Application写的
void OnGotIt(WPARAM wParam,LPARAM lParam)
{
TCHAR szBuffer[MAX_PATH*2];
ReadFile(g_hPipeRead,szBuffer,MAX_PATH,&dwRead,NULL);
//只读一个MAX_PATH也读不了,一执行到这里就死机
}
解决方案 »
- MFC中实现视频
- 请问有什么专业用于CAD的3D图像库吗?
- MFC窗口和Windows窗口9.41
- 如何设计一个主界面子系统的程序?
- 动态调用dll的问题(在线等)。
- 用fopen()和fclose() 函数来打开和关闭ini类型的文件是否合理?
- 500分求怎样从Access数据库中正确读出中文字体并显示出来
- 读数据怎样处理','号阿
- 请问哪本VC++6.0的书最容易上手?
- 为什么在classwizard中无法新增继承CObject的新类阿?
- 我用BoundsChecker想监测程序的内存漏洞,但是在vc内使用BoundsChecker编译后什么警告也没有,我故意开辟一个动态数组没有用delete[]释放
- 有关数据对齐的棘手问题
ReadFile(g_hPipeWrite,szBuffer,MAX_PATH,&dwRead,NULL);
试试看。。
我好像记得匿名Pipe只有在同一进程有效吧。在NT下一般用CreateNamePipe和ConnectNamePipe进行通信。
不同进程共享一个Pipe的Handle好像没有用吧??????
又不是通过DuplicateHandle进行的。可能要进行DuplicateHandle才可以用吧。
WriteFile(g_hPipeWrite,g_szEdit,sizeof(g_szEdit),&dwWritten,NULL);
会成功吗?
g_hPipeWrite对目标程序而言也不是DuplicateHandle来的。
我估计在目标程序中WriteFile就不对,这样,在主程序中的ReadFile就应该
一直等待状态。