读书人

数据传送有关问题

发布时间: 2012-02-17 17:50:42 作者: rapoo

数据传送问题
问题1:我先用 ShellExecute(0,"open","C:\\WINDOWS\\system32\\cmd.exe","","",SW_SHOW);
将cmd打开了,之后我想在当前光标下自动输入字符(“Edit”+“回车”),让其直接进入DOS界面,
应该怎么写码??

问题2:打开之后怎么自动控制DOS界面下的open,Save等命令?


其实整个过程就是想编一个程序,当运行后,起动Dos界面,之后向Dos界面里输入一个已知的“字符串”,输入之后自动保存文件到本地,自动关闭Dos界面,最好是这些都在后台执行!!哪位大哥帮想想思路。

[解决办法]
从你的目的来看,完全可以通过一系列文件函数来实现。
为什么非要把 DOS 界面弄出来?????

难道你要做“效果”???

这样的话,其实也不难啊。。。

1.ShellExecute(0,"open","C:\\WINDOWS\\system32\\cmd.exe","","",SW_SHOW); 打开DOS界面
2.利用 FindWindow 函数,找到 cmd窗口(也就是 dos 窗口)的句柄。
3.利用 PostMessage 向 dos 窗口发送 key_up 或者 wm_char 消息,模拟键盘输入你想要输入的内容。
4.DOS 下的 open ,save 命令,都应该有对应的快捷键,找到以后,用第三步当中的方法,模拟键盘输入这些快捷键
5.同样利用 PostMessage 想 dos 窗口发送一个 wm_close 关闭它。。。
[解决办法]
稍稍研究了一下,发现在windows下很难实现你的要求:
1.用SendMessage不可用,因为你是16位DOS应用程序,无法接收windows消息,试着向它的父窗口发送消息,也不行
2.用keybd_event,SendInput甚至winio都不行,它们都只对前台程序有效
3.用管道重定向的方法,也不可以,它只能对DOS的IO进行重新向,对键盘无效。
现在我能想到的是在纯DOS下写一个键盘模拟程序(N多年前写过),相当于把你的程序在DOS加一层自动运行的外壳,这个理论上可行。但问题是如果你的windows程序要对后台程序操作的话,(后台程序不是全自动运行的,需要外部干预)那就又复杂了(只能通过内存共享来实现了)
另外的可能的方法是利用dos的mode功能将键盘重新向到串口,然后在windows装一个串口模拟程序,再对串口模拟程序进行操作,这个也不简单。
看来这个看似简单的问题还真的不好解决,如果你原来的程序不是特别复杂,建议你还是在windows下重写一个,可能比上面的都省时间。

读书人网 >C++ Builder

热点推荐