例如我有个程序A.Exe  在A程序中有个按钮,我想实现的功能是当我点击A中的按钮时,会启动B程序,并向B程序传送数据,同时把B程序的窗口移动到 A指定的位置上,,
大牛帮忙下啊

解决方案 »

  1.   

    用CreateProcess或者ShellExe都可以启动B程序,并传送参数。然后用FindWindow找到B程序,获得句柄,接下来用MoveWindow就可移动到指定位置了。
      

  2.   


    在开启进程时传送参数也可以替换成FINDWINDOW后向B发送消息
      

  3.   

    感觉楼主说的直接可以用一个exe完成吧,点击按钮后弹出新窗口(基于CDialog),数据传给新窗口,剩下的都在新窗口中处理不一样么,呵呵~还简单。
      

  4.   

        STARTUPINFO si;
        PROCESS_INFORMATION pi;    ZeroMemory( &si, sizeof(si) );
        si.cb = sizeof(si);
        ZeroMemory( &pi, sizeof(pi) );
        CString strCmdLine = "D:\\B.exe"
        // Start the child process. 
        if( !CreateProcess( NULL, // No module name (use command line). 
            (LPTSTR)(LPCTSTR)strCmdLine,   // Command line. 
            NULL,             // Process handle not inheritable. 
            NULL,             // Thread handle not inheritable. 
            FALSE,            // Set handle inheritance to FALSE. 
            0,                // No creation flags. 
            NULL,             // Use parent's environment block. 
            NULL,             // Use parent's starting directory. 
            &si,              // Pointer to STARTUPINFO structure.
            &pi )             // Pointer to PROCESS_INFORMATION structure.
        ) 
        {
    return FALSE;
        }
    这是启动B.exe的代码
    两个进程之间传送数据,使用WM_COPYDATA 最简单,不适合大数据。
    COPYDATASTRUCT Data;                //消息携带数据的结构
    Data.cbData  = strlen(szBuf);
    Data.lpData  = (void*)szBuf;
    Data.dwData  = 1;
    SendMessage(hWnd, WM_COPYDATA, 0, (LPARAM)(LPVOID)&Data);//hWnd要你先用FindWindow找到B.EXE的句柄,Data是你要发送的数据
    在B.exe里写上WM_COPYDATA 的接收函数
    ON_WM_COPYDATA()
    afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
      

  5.   

    STARTUPINFO si;
    PROCESS_INFORMATION pi;ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );
    CString strCmdLine = "D:\\B.exe"
    // Start the child process. 
    if( !CreateProcess( NULL, // No module name (use command line). 
    (LPTSTR)(LPCTSTR)strCmdLine, // Command line. 
    NULL, // Process handle not inheritable. 
    NULL, // Thread handle not inheritable. 
    FALSE, // Set handle inheritance to FALSE. 
    0, // No creation flags. 
    NULL, // Use parent's environment block. 
    NULL, // Use parent's starting directory. 
    &si, // Pointer to STARTUPINFO structure.
    &pi ) // Pointer to PROCESS_INFORMATION structure.

    {
    return FALSE;
    }
    这是启动B.exe的代码
    两个进程之间传送数据,使用WM_COPYDATA 最简单,不适合大数据。
    COPYDATASTRUCT Data; //消息携带数据的结构
    Data.cbData = strlen(szBuf);
    Data.lpData = (void*)szBuf;
    Data.dwData = 1;
    SendMessage(hWnd, WM_COPYDATA, 0, (LPARAM)(LPVOID)&Data);//hWnd要你先用FindWindow找到B.EXE的句柄,Data是你要发送的数据
    在B.exe里写上WM_COPYDATA 的接收函数
    ON_WM_COPYDATA()
    afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);