求助。编写win控制台程序时 怎么样监控按键输入阿 ?比如Esc,a,b,Ctrl+s

不会种地的老农 2004-12-26 10:33:17
如题 我是要写一个 记事本 像 dos下的 edit一样
如果是字母就显示 如果是系统键就 执行 相应的程序
应该用什么方法好?
...全文
431 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
madmanahong 2004-12-30
  • 打赏
  • 举报
回复
控制台应用ye是PE格式的。
可以直接使用windows api。除了gdi32.dll里面的接口!
fflush 2004-12-30
  • 打赏
  • 举报
回复
32位的程序你不是可以直接处理消息了吗,那样你可以很方便的处理按键输入啊
32位的程序内嵌汇编还没用过,不能提供实质性的意见:)
  • 打赏
  • 举报
回复
试了一下 _getch()确实 可以哈
那就暂时用这个了

直接嵌入汇编 32位程序好办么?
我在写界面的时候 想直接用汇编 就过不行阿  还是用了API
  • 打赏
  • 举报
回复
哦 了解 谢谢各位拉
QD_IceWolf 2004-12-30
  • 打赏
  • 举报
回复
GetConsoleWindow可以得到控制台的窗口句柄。
若只是想控制CTRL+C,可以看SetConsoleCtrlHandler 的帮助。
  • 打赏
  • 举报
回复
我这个是 win32 console 程序阿 
getmessage  好像不能用阿???
不起作用
  • 打赏
  • 举报
回复
楼上上上的 说用 WM_KEYDOWN

GetMessage 好像不能再 console程序下 使用阿?
fflush 2004-12-29
  • 打赏
  • 举报
回复
他说的控制台程序的窗口句柄说的是windows中那个console窗口,所以有个句柄
中断应该可以用的,windows的控制台就是模拟了以前的dos环境,如果你在控制台下要监控所有的键盘输入,我觉得与其用键盘钩子,还不如内嵌汇编直接用中断来获取来的简单
另外,我给你提供的那个_getch()的程序是可以检测到ctrl+c的,虽然msdn上说不行,不过我验证过了,这些键会返回特定的ascii码
  • 打赏
  • 举报
回复
控制台程序 有窗口句柄么?
好像句柄是NULL ,GetMessage会得到本线程所有的消息阿
可是在 控制台下不行阿~
中断win32不行吧?

我也想过用 HOOK ,但是这个不太清楚阿

sethook ,能不能 只截取 到程序的 消息呢?
我不想影响其他的程序阿? 怎么过滤?
有人能讲讲细节么?
独孤过儿 2004-12-29
  • 打赏
  • 举报
回复
的确是个困难的问题!

我知道这个函数 cin.get()可以读入回车和别的字符,但是没办法处理ESC和空格键。我已经调试过

了。如果实在没有办法,就只能用中断的方法了。
healer_kx 2004-12-29
  • 打赏
  • 举报
回复
GetMessage要窗口句柄的, 你的控制台也是窗口啊. 也有的:)

要是这个不行, 你就HOOK吧.
  • 打赏
  • 举报
回复
_getch()好像不能处理 ctrl+c 这种 按键吧?
sonic_andy 2004-12-28
  • 打赏
  • 举报
回复
_getch()应该可以
fflush 2004-12-28
  • 打赏
  • 举报
回复
int main ()
{
int i;

while (1)
{
if ((i = _getch ()) == 0 || i == 0xE0)//是控制键
{
cout << _getch () << endl;//得到控制键的asc码
}
else
{
cout << i << endl;//得到一般字符的asc码
}
}

}
ishumin 2004-12-28
  • 打赏
  • 举报
回复
处理WM_KEYDOWN消息,具体查看msdn关于WM_KEYDOWN的论述。
  • 打赏
  • 举报
回复
我用的是 vc6
bioskey() 是tc里的把?

有没有其他什么方法阿?
fflush 2004-12-28
  • 打赏
  • 举报
回复
使用bioskey ()这个函数,可以完成你所需要的功能,具体怎么用我没有现成的代码,你可以到网上搜一下
beyondtkl 2004-12-28
  • 打赏
  • 举报
回复
应该是不行的。。
我的女神 2004-12-28
  • 打赏
  • 举报
回复
你可以查看这些键的定义,然后做出switch...case...判断,或者用bioskey(),好像是这个函数。
  • 打赏
  • 举报
回复
没有人知道么?
还是觉得太简单了?
帮帮忙嘛~
加载更多回复(4)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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