怎样向DOS程序传递键盘消息

fsunboy 2008-11-14 11:41:35
问题有两个:
1、在VC6.0程序里用ShellExecute启动一个DOS程序,启动DOS程序老是全屏;直接点击exe也是一样。cmd属性里的显示模式是窗口模式;但是用Alt+Enter可以切换到窗口模式。
2、用模拟键盘的消息传递不成功。代码:如下;
CString pszWindowTitle = "";
HWND TheWindow = 0;
GetCurrentDirectory(1000,pszWindowTitle.GetBuffer(1000));
pszWindowTitle.ReleaseBuffer();

pszWindowTitle+="\\software\\KERTEST.EXE";
TheWindow = ::FindWindow("ConsoleWindowClass",pszWindowTitle);
CWnd::FromHandle(TheWindow)->SetForegroundWindow();
if(TheWindow != NULL)
{
::SendMessage(TheWindow,WM_KEYDOWN,VK_RETURN,0L);
Beep(1000,1000);
}
else
{
Beep(100,100);
}
请大家赐教,谢谢!!!
...全文
142 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fsunboy 2008-11-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zzz822163 的回复:]
shellexecute可以传递命令行控制窗口化吧
[/Quote]
我试了对dos本身程序好像不行哦
zzz822163 2008-11-15
  • 打赏
  • 举报
回复
shellexecute可以传递命令行控制窗口化吧
fsunboy 2008-11-15
  • 打赏
  • 举报
回复
楼上的两位大侠可以说得详细一点,在DOS程序开始启动起来时候是全屏,FindWindow是找不到窗口的。在ALT+Enter后是可以找到的。我的意思是在程序起来的就不要他全屏,这样就可以发送键盘消息的。谢谢楼上的两位!!
hpig 2008-11-15
  • 打赏
  • 举报
回复
哦 只要你得console窗口是active? foreground?的窗口,
就用SendInput 模拟键盘输入ALT+ENTER就行,你想模拟什么样的键盘操作都行!!
pushregistration 2008-11-15
  • 打赏
  • 举报
回复
up
qap22 2008-11-15
  • 打赏
  • 举报
回复
up
hpig 2008-11-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fsunboy 的回复:]
楼上的两位大侠可以说得详细一点,在DOS程序开始启动起来时候是全屏,FindWindow是找不到窗口的。在ALT+Enter后是可以找到的。我的意思是在程序起来的就不要他全屏,这样就可以发送键盘消息的。谢谢楼上的两位!!
[/Quote]

haha 你也不看名字!!

用SendInput 是不需要获得窗口句柄的。
你启动console后,console获得键盘的输入,这个时候你用SendInput发送键盘操作,就是模拟实际的键盘的某个键的输入。那么输入的键就会被你得程序所获得、处理。
看msdn里对SendInput的说明
hpig 2008-11-15
  • 打赏
  • 举报
回复
Console 窗口没试验过,我给窗口发送鼠标操作、键盘动作是用SendInput来实现的:)

SendInput Function

--------------------------------------------------------------------------------

The SendInput function synthesizes keystrokes, mouse motions, and button clicks.

Try!

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧