请教个在一个程序中控制其他程序的问题

andywei1982 2010-02-25 11:23:08
例如我有个程序A.Exe 在A程序中有个按钮,我想实现的功能是当我点击A中的按钮时,会启动B程序,并向B程序传送数据,同时把B程序的窗口移动到 A指定的位置上,,
大牛帮忙下啊
...全文
60 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangli820 2010-03-19
  • 打赏
  • 举报
回复
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);
zxdyu2009 2010-03-19
  • 打赏
  • 举报
回复
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);



WizardK 2010-02-25
  • 打赏
  • 举报
回复
引用 1 楼 lllyyy2403 的回复:
用CreateProcess或者ShellExe都可以启动B程序,并传送参数。然后用FindWindow找到B程序,获得句柄,接下来用MoveWindow就可移动到指定位置了。


在开启进程时传送参数也可以替换成FINDWINDOW后向B发送消息
Eleven 2010-02-25
  • 打赏
  • 举报
回复
引用 1 楼 lllyyy2403 的回复:
用CreateProcess或者ShellExe都可以启动B程序,并传送参数。然后用FindWindow找到B程序,获得句柄,接下来用MoveWindow就可移动到指定位置了。

UP
lllyyy2403 2010-02-25
  • 打赏
  • 举报
回复
用CreateProcess或者ShellExe都可以启动B程序,并传送参数。然后用FindWindow找到B程序,获得句柄,接下来用MoveWindow就可移动到指定位置了。
gamezealot 2010-02-25
  • 打赏
  • 举报
回复
感觉楼主说的直接可以用一个exe完成吧,点击按钮后弹出新窗口(基于CDialog),数据传给新窗口,剩下的都在新窗口中处理不一样么,呵呵~还简单。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧