编程中怎么调用其他已有程序,并获取他计算出的结果?? VC编程中如何才能调用别的现存程序(如果是exe的),调用后又如何获得该程序界面上返回的结果值?求大神指教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void CCntrlOtherPrcssDlg::OnStart() { PROCESS_INFORMATION pi; STARTUPINFO si; //初始化变量 memset(&si,0,sizeof(si)); si.cb=sizeof(si); si.wShowWindow=SW_SHOW; si.dwFlags=STARTF_USESHOWWINDOW; //打开记事本程序 BOOL fRet=CreateProcess(NULL, "c:\\windows\\notepad.exe c:\\autoexec.bat", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS|CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); if(!fRet) {//创建失败,显示错误信息 LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); AfxMessageBox( (LPCTSTR)lpMsgBuf); LocalFree( lpMsgBuf ); } else { AfxMessageBox("CreateProcess成功"); m_hPro=pi.hProcess; }} CreateProcess 的时候,进行输入输出重定向或者把程序执行结果写到文件里,之后读取文件内容,如:system("ping www.baidu.com >temp.txt");之后可以读取temp.txt得到结果 晕 这个可以实现?? 至少别的程序要提供一个方法来获取,或者提供一个接口来获取。比如IE浏览器就有一个IWebBrowser接口,可以用来遍历网页中的表单,甚至可以获取输入框输入的密码。 不是啊,比如你调用pingsystem("ping www.baidu.com >temp.txt");之后可以读取temp.txt得到结果---------------------- #2楼 得分:0回复于:2012-09-05 20:35:30CreateProcess 的时候,进行输入输出重定向或者把程序执行结果写到文件里,之后读取文件内容,如:system("ping www.baidu.com >temp.txt");之后可以读取temp.txt得到结果 这个问题要分情况了,如果你调用的是console(控制台)程序,可以通过管道接管其输出结果。如果是有用户界面的,就又要区分了,如果是窗口控件上显示结果,你findwindow后gettext。如果是无窗口控件,则截图,然后文字识别……。 调用exe的方法很多。如楼上说得可以使用CreateProcess或者 CString szPath = GetCurDir() +_T("别人的.exe");ShellExecute(NULL, _T("open"), szPath,NULL, NULL, SW_SHOWMAXIMIZED );或者:WinExec("C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe",SW_SHOW);至于说调用后又如何获得该程序界面上返回的结果值。那也简单。可以首先通过遍历找到别人程序对话框的句柄。然后就可以操作对话框上的控件了,包括可以获得控件上的值,状态等等之类的信息了。 HWND oldHWnd = NULL; EnumWindows(EnumWndProc,(LPARAM)&oldHWnd); //枚举所有运行的窗口 if(oldHWnd != NULL) { //AfxMessageBox("本程序已经在运行了"); ::ShowWindow(oldHWnd,SW_SHOWNORMAL); //激活找到的前一个程序 ::SetForegroundWindow(oldHWnd); //把它设为前景窗口 return false; //退出本次运行 }BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam){ HANDLE h = GetProp(hwnd,g_szPropName); if( h == g_hValue) { *(HWND*)lParam = hwnd; return false; } CString str; TCHAR text[10]; GetWindowTextW(hwnd,(LPWSTR)text,10); str.Format(_T("%s"),text); if (str.Compare(SOFTWEARNAME)==0) { *(HWND*)lParam = hwnd; return false; } return true;} CAsyncSocket类中Connect与OnConnect的问题 注入进程申请空间的权限问题 MFC连接数据库的一个小问题 VC.NET程序 兼容性问题?高手的请赐教。 应试选哪本MFC教材看 为什么关闭套接字之后,对方还会受到数据?? 求助如何在vc中获取当前日期? 急,如何检测打印机是否联机! 基于半边数据结构的欧拉操作 winsock用UDP广播,为什么只有跟服务器同网段的客户端收到,其他网段无法收 d3d是不是会影响widnows的消息循环 mfc读写excel的问题
void CCntrlOtherPrcssDlg::OnStart()
{
PROCESS_INFORMATION pi;
STARTUPINFO si;
//初始化变量
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
si.wShowWindow=SW_SHOW;
si.dwFlags=STARTF_USESHOWWINDOW; //打开记事本程序
BOOL fRet=CreateProcess(NULL,
"c:\\windows\\notepad.exe c:\\autoexec.bat",
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS|CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi); if(!fRet)
{//创建失败,显示错误信息
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL );
AfxMessageBox( (LPCTSTR)lpMsgBuf);
LocalFree( lpMsgBuf ); }
else
{
AfxMessageBox("CreateProcess成功");
m_hPro=pi.hProcess;
}
}
或者把程序执行结果写到文件里,之后读取文件内容,如:
system("ping www.baidu.com >temp.txt");
之后可以读取temp.txt得到结果
system("ping www.baidu.com >temp.txt");
之后可以读取temp.txt得到结果
----------------------
或者把程序执行结果写到文件里,之后读取文件内容,如:
system("ping www.baidu.com >temp.txt");
之后可以读取temp.txt得到结果
如楼上说得可以使用CreateProcess
或者
CString szPath = GetCurDir() +_T("别人的.exe");
ShellExecute(NULL, _T("open"), szPath,NULL, NULL, SW_SHOWMAXIMIZED );
或者:
WinExec("C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe",SW_SHOW);至于说调用后又如何获得该程序界面上返回的结果值。那也简单。
可以首先通过遍历找到别人程序对话框的句柄。然后就可以操作对话框上的控件了,包括可以获得控件上的值,状态等等之类的信息了。 HWND oldHWnd = NULL;
EnumWindows(EnumWndProc,(LPARAM)&oldHWnd); //枚举所有运行的窗口
if(oldHWnd != NULL)
{ //AfxMessageBox("本程序已经在运行了");
::ShowWindow(oldHWnd,SW_SHOWNORMAL); //激活找到的前一个程序
::SetForegroundWindow(oldHWnd); //把它设为前景窗口
return false; //退出本次运行
}BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam)
{
HANDLE h = GetProp(hwnd,g_szPropName);
if( h == g_hValue)
{
*(HWND*)lParam = hwnd;
return false;
}
CString str;
TCHAR text[10];
GetWindowTextW(hwnd,(LPWSTR)text,10);
str.Format(_T("%s"),text);
if (str.Compare(SOFTWEARNAME)==0)
{
*(HWND*)lParam = hwnd;
return false;
}
return true;
}