超级想不通:关于简单的消息问题!!急急,盼望高手解释
我做的功能很简单:
就是在一个程序里对另一个程序发送一个按纽的消息,但是它就是不响应,郁闷
下面是程序:高手帮我解释一下!谢谢(ComMM.EXE的“开始”按纽为什么不动做啊)
HWND h_Main;
h_Main =::FindWindow(NULL,"ComMM");
if(h_Main == NULL)
{
ShellExecute(NULL, "open", apppath, NULL, NULL, SW_SHOWNORMAL);
h_Main =::FindWindow(NULL,"ComMM");
if(h_Main != NULL)
{
h_AUTO = FindWindowEx(h_Main,NULL,"Button","开始");
::SendMessage(h_AUTO,BM_CLICK,0,0); //BM_CLICK 单击按纽
}
}
问题点数:100、回复次数:12Top
1 楼wangk(倒之)回复于 2005-08-01 19:37:54 得分 50
你应该等到apppath可以响应消息的时候才发。
即用WaitForInputIdle等,然后再FindWindow。Top
2 楼LocustWei(LocustWei)回复于 2005-08-01 19:41:21 得分 0
h_AUTO==NULL
::SendMessage(h_AUTO,WM_LBUTTONDOWN,0,0);
::SendMessage(h_AUTO,WM_LBUTTONUP,0,0);Top
3 楼Jarrylogin(正经事情我不会,歪门邪道样样行)回复于 2005-08-01 19:47:40 得分 0
::sleep(30000);Top
4 楼njvisual(抵制日貨,保衛中國領土釣魚島)回复于 2005-08-01 20:59:38 得分 0
休眠一会再发试试。Top
5 楼dirdirdir3(风)回复于 2005-08-01 21:08:35 得分 0
晕,你把消息发送给BUTTON窗口干什么?要发送给此按纽控件的Dlg窗口处理才行啊。Top
6 楼dirdirdir3(风)回复于 2005-08-01 21:10:40 得分 0
SendMessage(h_Main,BM_CLICK,0,0);试试Top
7 楼linur(林子大了,什么鸟都有)回复于 2005-08-02 13:27:12 得分 0
你的方法应该是可以的,我试了一下可以响应,或者用我的方法
HWND h_Main;
h_Main =::FindWindow(NULL,"ComMM");
if(h_Main == NULL)
{
ShellExecute(NULL, "open", apppath, NULL, NULL, SW_SHOWNORMAL);
Sleep(1000);
h_Main =::FindWindow(NULL,"ComMM");
if(h_Main != NULL)
{
h_AUTO =::GetDlgItem(h_Main,nButtonID);//nButtonID要改为"开始"按钮ID
if(h_AUTO)
{
if(::SetForegroundWindow(h_Main ))
::SendMessage(h_AUTO,BM_CLICK,0,0);
}
else AfxMessageBox("没找到开始按钮");
}
}
Top
8 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2005-08-02 13:41:43 得分 20
1.应该向按钮所在的窗口发送BM_CLICK,将按钮ID作为参数
2.进程之间最好通过WM_COPYDATA,SendMessage对于很多少消息都不能正确跨进程(主要是用到字符串等类型的参数),Windows只对一些简单的控制(Button,Edit之类的)作了跨进程边界的处理。对于ListView,TreeCtrl之类,SendMessage可能无法达到你的目的。Top
9 楼laiyiling(陌生人[MVP])回复于 2005-08-02 13:44:19 得分 0
如何向一个按钮发送单击消息?
//知道ID时:
SendMessage(WM_COMMAND,((WPARAM)BN_CLICKED)<<8|(WPARAM)IDC_BUTTON,0L);
::PostMessage(m_hWnd,WM_COMMAND,MAKEWPARAM(IDOK,BN_CLICKED),0);
::SendMessage(m_hWnd,WM_COMMAND,MAKEWPARAM(IDOK,BN_CLICKED),0);
//知道HWND的值pwnd
::SendMessage(pwnd->GetSafeHwnd(),WM_LBUTTONDOWN,0,0);
::SendMessage(pwnd->GetSafeHwnd(),WM_LBUTTONUP,0,0);Top
10 楼xqk(夏乾坤)回复于 2005-08-02 15:02:31 得分 0
你向它发送 WM_COMMAND不就得了
h_Main =::FindWindow(NULL,"ComMM");
if(h_Main == NULL)
{
ShellExecute(NULL, "open", apppath, NULL, NULL, SW_SHOWNORMAL);
h_Main =::FindWindow(NULL,"ComMM");
if(h_Main != NULL)
{
::SendMessage(h_Main ,WM_COMMAND,0x2,0); //WM_COMMAND 命令消息
}
}
Top
11 楼xqk(夏乾坤)回复于 2005-08-02 15:03:15 得分 0
::SendMessage(h_Main ,WM_COMMAND,0x2,0); //WM_COMMAND 命令消息
第三个参数,按钮ID是固定的,你如果要是不知道的话,可以用SPY++查看一下就知道了Top
12 楼younggle(洋溢)回复于 2005-08-02 15:08:06 得分 30
你的方法应该是可以的,我试了一下可以响应,或者用我的方法
HWND h_Main;
h_Main =::FindWindow(NULL,"ComMM");
if(h_Main == NULL)
{
ShellExecute(NULL, "open", apppath, NULL, NULL, SW_SHOWNORMAL);
Sleep(1000);
h_Main =::FindWindow(NULL,"ComMM");
if(h_Main != NULL)
{
h_AUTO =::GetDlgItem(h_Main,nButtonID);//nButtonID要改为"开始"按钮ID
if(h_AUTO)
{
if(::SetForegroundWindow(h_Main ))
::SendMessage(h_AUTO,BM_CLICK,0,0);
}
else AfxMessageBox("没找到开始按钮");
}
}
Top
相关问题
- C# DLL 被 VB 6 调 的 问题(超级急急急急急急急急急急急急急急急急)
- 关于&的解释,在线等,急急急急急!!!!!!!!!!!!!!!
- 解释脚本,(百分向送!)急急急!!!!!!!!!!!!!
- 超级难题!!!快进来!!!急急!!!
- 超级简单问题(急!急!急!放分100,在线等待)
- 谁能给我解释一下InvokeHelper()函数功能及它的参数含义?在线等待,急急急急急急急
- 急急急,Apache无法解释perl脚本!!!open webmail问题!!!送100大洋
- 急!急!急!为什么我的机器解释看不了aspx文件
- 盼望大虾解释一个基础的问题:关于 class of ** 的问题
- 急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急




