CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

问题1、批处理设置,问题2、向DOS程序发送消息。每个问题500分。另外给

楼主supersusheng(我是谁?)2006-03-02 20:17:53 在 VC/MFC / 基础类 提问

一个已有的DOS控制台程序,使用的时候先输入一个参数回车以后再输入输入文件的名字回车,之后再输入输出文件的名字回车得到结果,求两种办法来使这个流程自动化。  
          办法1、通过写批处理。本人不熟悉批处理,求代码。  
          办法2、通过另一个程序发送消息过来,DOS程序的类为“ConsoleWindowClass”,无法用SPY看到输入的MSG及wparam、lparam。求代码。  
          每个解决办法500分,另外开题再给,谢谢。 问题点数:100、回复次数:21Top

1 楼pomelowu(羽战士)回复于 2006-03-02 21:04:51 得分 0

新建个文本文件,输入(假如exe的名字叫Sample1.exe)  
      Sample1.exe   para1  
      para2  
   
  另存为.bat文件,比如Sample.bat  
  运行这个sample.bat试试看。Top

2 楼pomelowu(羽战士)回复于 2006-03-02 21:10:32 得分 1

嗯。好像不行Top

3 楼chehw(chehw)回复于 2006-03-02 21:45:14 得分 0

可以使用输入输出重定向,   分别创建将dos程序的标准输入指向输入管道,将dos程序的标准输出指向输出管道,通过程序进行控制。Top

4 楼striking(庸人自扰)回复于 2006-03-02 21:52:48 得分 0

第一个参数,   可以实现吧.  
   
  第2个参数,   cin>>等待.  
   
  第3个参数,   cin>>等待.    
   
  不知道我这样子是否满足要求Top

5 楼supersusheng(我是谁?)回复于 2006-03-02 22:02:11 得分 0

postmessage或者sendmessage的办法呢?  
   
  好像我原来试过一个Vfox开发的系统,也不可以驱动其运作。Top

6 楼supersusheng(我是谁?)回复于 2006-03-02 22:04:14 得分 0

 
  to   striking   and   chehw  
   
  老大,能不能象pomelowu(羽战士)   一样给详细点,小弟真的很水哦。  
   
  谢谢。  
  Top

7 楼striking(庸人自扰)回复于 2006-03-02 22:22:05 得分 1

办法1:   先将参数记录到文件中.  
  一下代码实现在程序启动时读取文件.  
  #define     MAXLINE   512  
   
  void   DoLoop(FILE   *fp)  
  {  
          int   n;  
          char   sendline[MAXLINE];  
          char   recvline[MAXLINE+1];  
   
          while   (fgets(sendline,   MAXLINE,   fp)   !=   NULL)  
          {  
                  n   =   strlen(sendline);  
         
  cout   <<   sendline   <<   endl;  
   
          }  
   
          if   (ferror(fp))  
                  cout   <<   "DoLoop:   error   reading   file"   ;  
  }  
   
   
  你只需要在main函数开头调用   : DoLoop(   stdin   );   即可.  
   
  这样行不行  
  Top

8 楼striking(庸人自扰)回复于 2006-03-02 22:24:08 得分 0

承上,批处理文件这样写  
  test   <   testme.txt  
   
  保存.testme.txt为你的参数的文件.  
   
  运行bat.Top

9 楼chehw(chehw)回复于 2006-03-02 22:50:00 得分 0

输入输出重定向是进程间通讯的一项基本技术,   作用类似于dos下的   ->   |   <.  
  代码较长,有空儿我写一个程序给你.Top

10 楼supersusheng(我是谁?)回复于 2006-03-02 23:08:34 得分 0

to   striking(硬撑者   thecpp@hotmail.com)    
          DOS程序是专用的仿真软件,没有代码也无法调用写的这个函数的。所以比较麻烦。Top

11 楼supersusheng(我是谁?)回复于 2006-03-02 23:10:24 得分 0

to   chehw(chehw)    
          你提到的这个办法好像有门,麻烦老大帮忙再找段代码或指点一二,谢谢。Top

12 楼striking(庸人自扰)回复于 2006-03-02 23:24:55 得分 0

搞了半天,   理解错误  
   
  -_-Top

13 楼chehw(chehw)回复于 2006-03-02 23:31:54 得分 2

留个email,   明天我给你发过去.Top

14 楼crushor()回复于 2006-03-03 00:54:46 得分 0

修改你的控制台程序行不?  
  一次接受2个参数,问题不就都解决了?Top

15 楼supersusheng(我是谁?)回复于 2006-03-03 11:37:19 得分 0

to     chehw(chehw)  
          邮件是supersusheng@yahoo.com.cn,谢谢大佬先。  
   
  to   crushor()   (   )    
          没有控制台程序的代码,没有办法修改。控制台程序需要手动一步一步设置,目的就在于以其他方式使这个手动设置的流程自动化起来。  
   
          有没有通过窗口发消息Sengmessage或postmessage的方式解决这个问题的办法啊?Top

16 楼Snow_Ice11111(雪上加冰)回复于 2006-03-03 13:23:18 得分 96

还是发送模拟按键吧:  
  HWND   hwnd=::FindWindow("ConsoleWindowClass","D:\\WINDOWS\\System32\\cmd.exe");                 //后面D:\\WINDOWS\\System32\\cmd.exe要换成你的目标程序的标题栏内容  
   
  CWnd::FromHandle(hwnd)->SetForegroundWindow();  
  ::PostMessage(hwnd,WM_KEYDOWN,   'd'-'a'+65,   0L);    
  ::PostMessage(hwnd,WM_KEYDOWN,   'i'-'a'+65,   0L);  
  ::PostMessage(hwnd,WM_KEYDOWN,   'r'-'a'+65,   0L);  
  ::PostMessage(hwnd,WM_KEYDOWN,VK_RETURN,   0L);  
  上面的代码是向XP下DOS窗口发送dir命令。经过   VC++6.0下测试无误,自己再完善一下就行了。Top

17 楼Snow_Ice11111(雪上加冰)回复于 2006-03-03 13:45:43 得分 0

HWND   hwnd=0;  
  hwnd=::FindWindow("ConsoleWindowClass","D:\\WINDOWS\\System32\\cmd.exe");    
  if   (hwnd)  
  {  
  CWnd::FromHandle(hwnd)->SetForegroundWindow();  
  ::PostMessage(hwnd,WM_KEYDOWN,   'd'-'a'+65,   0L);    
  ::PostMessage(hwnd,WM_KEYDOWN,   'i'-'a'+65,   0L);  
  ::PostMessage(hwnd,WM_KEYDOWN,   'r'-'a'+65,   0L);  
  ::PostMessage(hwnd,WM_KEYDOWN,VK_RETURN,   0L);  
  }  
  else  
  AfxMessageBox("Can't   find   the   target   console   window.");Top

18 楼Snow_Ice11111(雪上加冰)回复于 2006-03-03 14:04:25 得分 0

另外,若我的方法侥幸可以实现你的要求的话,请不要另外开贴给分了,谢谢!Top

19 楼supersusheng(我是谁?)回复于 2006-03-03 16:58:43 得分 0

 
  感谢Snow_Ice11111(雪上加冰),采用的方法、效果和我预期的完全一致。  
   
  to     chehw(chehw)  
          明天结帖了。Top

20 楼supersusheng(我是谁?)回复于 2006-03-04 10:53:44 得分 0

女同胞比较厉害哦。Top

21 楼chehw(chehw)回复于 2006-03-05 11:48:16 得分 0

来晚了.    
  邮件已发.Top

相关问题

  • 关于VB程序中处理消息:
  • 如何在主程序中设置ON ERROR处理?
  • 怎样在单文档程序中处理最大化消息
  • windows程序设计 消息处理问题
  • 在单线程的程序中能处理window的消息吗?
  • 如何在程序在自己截取消息处理
  • 请问:非MFC程序中,如何自行设置ComboBox下拉列表框的位置(主要是指left,而非width)?应该处理什么窗口的什么消息?怎么实现?
  • 请问在程序运行时出现session设置错误如何处理?在线等候
  • 怎样自定义消息。在线程运行时发出消息,主程序收到消息后处理?
  • Word程序处理

关键词

  • 代码
  • 文件
  • postmessage
  • 程序
  • keydown
  • chehw
  • sendline
  • hwnd
  • maxline
  • 参数

得分解答快速导航

  • 帖主:supersusheng
  • pomelowu
  • striking
  • chehw
  • Snow_Ice11111

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo