请教个在一个程序中控制其他程序的问题 例如我有个程序A.Exe 在A程序中有个按钮,我想实现的功能是当我点击A中的按钮时,会启动B程序,并向B程序传送数据,同时把B程序的窗口移动到 A指定的位置上,,大牛帮忙下啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用CreateProcess或者ShellExe都可以启动B程序,并传送参数。然后用FindWindow找到B程序,获得句柄,接下来用MoveWindow就可移动到指定位置了。 在开启进程时传送参数也可以替换成FINDWINDOW后向B发送消息 感觉楼主说的直接可以用一个exe完成吧,点击按钮后弹出新窗口(基于CDialog),数据传给新窗口,剩下的都在新窗口中处理不一样么,呵呵~还简单。 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); 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); 如何在VC++下用API讀LCD的EDID信息? MFC中如何修改CMonthCalCtrl日历的外观 请教一个问题! 想做个排课系统(高手进) 全局钩子。。。。 求 VC 读写 xml的例子 谁给俺介绍一个免费的gif编码库? 一个小问题 用过SendInput的请进来 MFC 中打印的问题 求一个面试用的程序 如何在VC中控制FLASH翻书效果翻页?
在开启进程时传送参数也可以替换成FINDWINDOW后向B发送消息
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);
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);