void CSrvDlg::OnButton1() 
{
// TODO: Add your control notification handler code here

PROCESS_INFORMATION pi;//PROCESS_INFORMATION 结构用于接收新进程的信息
STARTUPINFO sui;//STARTUPINFO结构 指定新进程如何显示
ZeroMemory(&sui,sizeof(STARTUPINFO));//将sui中所有变量初始化为0  防止随机值传给CreateProcess
sui.cb=sizeof(STARTUPINFO);
sui.dwFlags=STARTF_USESTDHANDLES;//标记
sui.hStdError=GetStdHandle(STD_ERROR_HANDLE); if(!CreateProcess("D:\\Program Files\\Hotel\\CHOTEL.exe",NULL,NULL,NULL,TRUE,0,NULL,NULL,
 &sui,&pi))
{
MessageBox("创建子进程失败!");
return;
}
else
{
CloseHandle(pi.hProcess);//新进程的 进程句柄
CloseHandle(pi.hThread);//新进程的 主线程句柄
//以上2句柄个在父进程不需要使用 关闭句柄 计数器减一
}
}void CSrvDlg::OnButton2() 
{
//在这里 我想先找到CHOTEL.exe进程的句柄 然后再想其       文件 新建      菜单发送消息
//问题1:  我知道用FindWindow找主窗口句柄 但是第一个参数是什么东西啊? 看人家写什么#33720的  这是什么啊  从哪里得到的啊?问题2: 如何实现 执行      文件  新建       菜单命令???(代码不知道怎么写?不知道要获取什么东西 发送什么消息)}总的来说就是运行A程序 然后 执行B程序的 开始  新建  菜单命令!!!!
希望高手帮我回答下上面2个简单的问题!谢谢

解决方案 »

  1.   

    1.
    HWND FindWindow(
      LPCTSTR lpClassName,  // class name
      LPCTSTR lpWindowName  // window name
    );
    用spy抓一下就看到了。
    2. 看B程序的需要了,一般菜单命令是WM_COMMAND消息。
      

  2.   

    FindWindow 第一个参数是class名字,这个名字是在你创建窗口时注册的类名,如果你不知道的话,可以设置为NULL
               第二个参数是窗口的标题名,就是这个窗口在任务栏上显示的字符串,或者用SPY抓一下看看菜单一般响应WM_COMMAND消息,这个只能通过消息捕获工具才能知道SPY++ 工具在http://www.ccrun.com/spy4win/ 有下载!
      

  3.   

    1、FindWindow的第1参数是窗口类名,第2参数是窗口标题文字,两个参数都可以指定也可以不指定,如果不指定则匹配所有窗口。对话框窗口类名默认都是#32770,自己可以改成其它名字。
    2、用SendMessage发WM_COMMAND消息,给出菜单项的ID就可以。
      

  4.   

    B是一个应用程序 我没有源代码的  怎么设置ID???
    要怎么实现啊
      

  5.   

    可以用SPY++来查,或者在代码中用GetMenu、GetSubMenu、GetMenuItemID来获得。