为什么进程收不到消息

tblue7 2004-05-10 02:11:27
发送代码如下
bool mm=CreateProcess(NULL,"c:\\abc.exe",NULL,NULL,false,NORMAL_PRIORITY_CLASS|CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi);

HWND hwnd=::FindWindow(NULL,"c:\\abc.exe");
bool flag=::SendMessage(hwnd,MM_COM,1,(LPARAM)1);
int kk=GetLastError();//出现126错误!!(why?)
在一个程序中,调用另个程序,然后向这个程序(abc.exe)发送一个消息,但是这个程序老收不到。

接收代码如下
HWND hwnd=::FindWindow(NULL,"D:\\myprograme\\multi\\multi\\Debug");
int m=0;
while(1)
{
//::PeekMessage(lp,NULL,0,0,PM_REMOVE);
GetMessage(lp,NULL,0,0);
if(lp->message==MM_COM)break;
}
cout<<lp->message;

...全文
82 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tblue7 2004-05-11
  • 打赏
  • 举报
回复
呵呵,第一次写进程间的程序:),我把SendMessage改成PostThreadMessage就对了,谢谢大家阿:)
tabris17 2004-05-11
  • 打赏
  • 举报
回复
控制台程序……



发消息到控制台程序的窗口当然接收不到了
控制台程序的窗口是由csrss.exe进程创建的
tblue7 2004-05-10
  • 打赏
  • 举报
回复
我的消息发送和接受是两个不同的控制台程序,然后在一个程序中用createprocess创建一个进程,打开另外一个程序,打开后发送一个消息,但是就是收不到
ygzdev 2004-05-10
  • 打赏
  • 举报
回复
FindWindow不是这样用的
tblue7 2004-05-10
  • 打赏
  • 举报
回复
谁能完整告诉我,我的代码为什么收不到消息阿,到底错哪儿了?
lianglp 2004-05-10
  • 打赏
  • 举报
回复
不过你可以用
::WaitForInputIdle(hProcess,INFINITE) ;
这个函数
tblue7 2004-05-10
  • 打赏
  • 举报
回复
句柄正确的,其实我在SendMessage前面,有一个cin操作,就是用来延迟的。还是不行啊。
lianglp 2004-05-10
  • 打赏
  • 举报
回复
你可以在abc进程与父进程中建立一个通信。如事件,

HANDLE hEvent = CreateEvent(...) ;//创建等待事件
BOOL bSuccess = CreateProcess(...) ;
if(bSuccess)
{
::WaitForSingleObject(hEvent,INFINITE) ;
HWND hTargetWnd = ::FindWindow(...) ;
if(hTargetWnd)
{
::SendMessage(hTargetWnd,...) ;
}
}
::Closehandle(hEvent) ;

子进程中如下 ;
...
在创建窗口后建立事件
HANDLE hEvent = ::CreateEvent(...) ;
SetEvent(hEvent) ;
::CloseHandle(hEvent) ;
这样就可以了,
不过以上只适用于两个都有源程序。
numen27 2004-05-10
  • 打赏
  • 举报
回复
对窗口进行操作之前,一定要判断有效性
HWND hwnd=::FindWindow(NULL,"c:\\abc.exe");
if(hwnd!=NULL)
{
//在这里才可以做你的事情
}
要不然如果你没有得到的话,肯定会出错的。
shootingstars 2004-05-10
  • 打赏
  • 举报
回复
FindWindow找到的句柄是否正确?FindWindow的第二个参数是窗口名称,你的窗口名称是c:\\abc.exe吗。
还有你刚刚CreateProcess,就去FindWindow这个窗口,很可能找不到。
lizmei001 2004-05-10
  • 打赏
  • 举报
回复
findwindow()是窗口名,可以变得
tblue7 2004-05-10
  • 打赏
  • 举报
回复
findwindow为什么么不是这样用的啊?究竟该如何改我的代码,望高手指点:)
tabris17 2004-05-10
  • 打赏
  • 举报
回复
回答同楼上

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧