CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

超级想不通:关于简单的消息问题!!急急,盼望高手解释

楼主lveight(重装骑士)2005-08-01 19:32:42 在 VC/MFC / 基础类 提问

我做的功能很简单:  
  就是在一个程序里对另一个程序发送一个按纽的消息,但是它就是不响应,郁闷  
  下面是程序:高手帮我解释一下!谢谢(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 ** 的问题
  • 急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急

关键词

  • 消息
  • sleep
  • commm
  • findwindow
  • sendmessage
  • nbuttonid
  • 按钮
  • apppath
  • 按纽
  • bm

得分解答快速导航

  • 帖主:lveight
  • wangk
  • DentistryDoctor
  • younggle

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo