首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • VC中需要启动另一个程序,并且需要控制或者得到其运行结果! [已结贴,结贴人:wphnudt]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 15:56:32 楼主
    在VC中调用另一个有窗口的exe文件,我想在程序中得到调用exe的运行结果,不知道有没有什么好的办法?
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 16:05:351楼 得分:0
    如果目标程序预留有接口就很好办,如果没有~~
    1.目标程序的输出结果是文件---读文件
    2.目标程序的轮子结果显示在一个窗口中----使用线程注入或API钩挂等非法手段获取结果.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 16:10:542楼 得分:0
    我想在程序中得到调用exe的运行结果
    =======================
    如果是命令行程序好办一点,用匿名管道即可,有窗口的程序不行,不过想问一下,有什么叫程序的运行结果?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 16:23:053楼 得分:0
    目标文件运行结果是Windows窗口,但可能是不一样的窗口,这个怎么得到?api hook?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 16:45:364楼 得分:0
    管道,SOCKET,WM_COPY消息或通过COM接口
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 17:58:305楼 得分:0
    CreateProcess设置相应的参数,好像是调试器的东东。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    发表于:2008-07-03 18:11:006楼 得分:0
    要得到什么结果?exe程序能不能改?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 18:17:427楼 得分:0
    倒底你的目的是什么?"结果"这个词让人看不明白
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 18:17:518楼 得分:10
    STARTUPINFO si = {0};
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;

    PROCESS_INFORMATION pi = {0};
    // Start the child process.
    if( !CreateProcess(NULL,
    szCmd.GetBuffer(),
    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.
    )
    {
    TRACE(_T("Failed to execute Upgrade process(%d) \r\n%s!"),
    GetLastError(), szCmd);
    return -1;
    }

    WaitForSingleObject(pi.hProcess, INFINITE);
    DWORD dwCode = -1;
    GetExitCodeProcess(pi.hProcess, &dwCode);
    // Close process and thread handles.
    CloseHandle( pi.hThread );
    CloseHandle( pi.hProcess );

    if(m_WaitPackDlg.m_hWnd != NULL)
    m_WaitPackDlg.Exit();
    return dwCode;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • shuiyan
    • 等级:
    发表于:2008-07-03 18:24:559楼 得分:0
    目标程序是你们写的吗?希望得到什么结果?是一段程序的运算之后的数据结果?还是屏幕显示作为结果?还是那个程序保存的文件作为结果?还是那个程序发出的消息作为结果?还是………………
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 20:47:5310楼 得分:0
    目标程序不是我写的。所谓的结果是这样子的,比如说我调用它登陆另一个系统,我想知道我是否登陆成功了,没有成功是因为密码错误还是其他的原因!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 22:06:4511楼 得分:10
    简单点的话,如果他有一个窗口是用来显示的,比如有个RichEdit会显示"执行成功",你找到他主窗口句柄 然后枚举到这个richedit句柄 然后getwindowtext得到文字来分析
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-04 09:10:5812楼 得分:0
    高!楼上的有类似的源码吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    发表于:2008-07-04 09:39:3113楼 得分:0
    目标程序的结果是以什么方式给出的?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-04 17:25:5514楼 得分:0
    引用 13 楼 cnzdgs 的回复:
    目标程序的结果是以什么方式给出的?


    就是对话框吗?正确的话就进入系统了,错误就报出错了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-04 18:05:2615楼 得分:0
    commandline就可以压
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    发表于:2008-07-04 21:08:0516楼 得分:20
    那就SetWindowsHookEx,监视目标程序的窗口变化,然后发消息通知自己的进程。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 15:57:1617楼 得分:0
    别想太多,这个答案最好

    引用 8 楼 element_cn 的回复:
    STARTUPINFO si = {0};
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;

    PROCESS_INFORMATION pi = {0};
    // Start the child process.
    if( !CreateProcess(NULL,
    szCmd.GetBuffer(),
    NULL,            // Process handle not inheritable.
    NULL,            // Thread handle not inheritable.
    FALSE,            // Set handle inheritance to FALSE.
    0,          …
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-07 16:54:1518楼 得分:10
    CreateProcess调用子程序,其中有一个参数包含子程序全路径(在这里应该是你的.exe文件的全路径),完成子程序的调用,在你的子程序中用SendMessage发送消息给主程序,SendMessage中有一个参数包括数据信息,使得子程序中的一些数据能够传给主程序。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved