以下的这个函数是在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也读不了,一执行到这里就死机
}

解决方案 »

  1.   

    不会的也帮忙UP。如果没人会,那么剩余的分数将平均分配到UP者!
      

  2.   

    在主程序中应该用目标程序的Write吧,这样才配套
    ReadFile(g_hPipeWrite,szBuffer,MAX_PATH,&dwRead,NULL);
    试试看。。
      

  3.   

    拿g_hPipeWrite来读?你有没有看MSND的?
      

  4.   

    不会的也帮忙UP。如果没人会,那么剩余的分数将平均分配到UP者!
      

  5.   

    这个匿名的Pipe在主程序中有用吗?
    我好像记得匿名Pipe只有在同一进程有效吧。在NT下一般用CreateNamePipe和ConnectNamePipe进行通信。
    不同进程共享一个Pipe的Handle好像没有用吧??????
    又不是通过DuplicateHandle进行的。可能要进行DuplicateHandle才可以用吧。
      

  6.   

    还有,如果CreatePipe是在主程序运行的那么,在目标程序的
    WriteFile(g_hPipeWrite,g_szEdit,sizeof(g_szEdit),&dwWritten,NULL);
    会成功吗?
    g_hPipeWrite对目标程序而言也不是DuplicateHandle来的。
    我估计在目标程序中WriteFile就不对,这样,在主程序中的ReadFile就应该
    一直等待状态。