1.发消息,主要是找到窗口句柄
2.要么是 C盘根目录下没有Notepad.exe(系统目录下),
   要么是你系统的问题,如果不是在2000下,这样是会出现问题.
TCHAR szPath[] = _T ("Notepad My.txt");//这行是关键
CreateProcess ( _T(“C:\\WINNT\\SYSTEM32\\WORDPAD.EXE”) , szPath , ... );

TCHAR szPath[] = _T ("Notepad");//这是关键
CreateProcess ( NULL , szPath , ... );

解决方案 »

  1.   

    多谢答复!1。ShellExecute 返回的句柄不是窗口的句柄,我有什么方法从这个句柄获取主窗口的句柄?
    2。即使我把路径写对CreateProcess依然不能执行另外的程序。
    如 我的c盘根目录下有 tollgate.exe
    CreateProcess(_T("c:\\tollgate.exe"),NULL,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS
    ,NULL,NULL,&startupinfo,&processinformation);
      

  2.   

    1、运行程序错误原因:
    startupinfo 为输入参数,要清空或最起码要把成员.cb置为结构体大小。
    memset(&startupinfo,0,sizeof(startupinfo));
    然后就可以了。
    倒数第三个参数:路径也要注意一下。
    2、发消息可通过如下方法:
    a. 如知道目标窗口的标题,可用FindWindow得到HWND.然后......
    b. 使用可用processinformation中返回的Thread ID 调用EnumThreadWindows/EnumWindows取得相应的窗口,然后.......
    c. 也可使用可用processinformation中返回的Thread ID,直接使用PostThreadMessage(...);Sleep(0);
    肯定还有别的方法,找肯定还能找得到。
    多看一些Windows/进程/线程/内存相关的资料会有所帮助。
      

  3.   

    用我这段试试
    void CCatchmapView::OnRButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    STARTUPINFO stStartUpInfo;
    PROCESS_INFORMATION stProcessInfo;
    memset(&stStartUpInfo,0,sizeof(STARTUPINFO));
    stStartUpInfo.cb=sizeof(STARTUPINFO);
    CreateProcess(NULL,"e:\\bitmap\\Debug\\bitmap.exe",NULL,NULL,TRUE,
    NORMAL_PRIORITY_CLASS,NULL,NULL,
    &stStartUpInfo,&stProcessInfo);

    CView::OnRButtonDown(nFlags, point);
    }