在c语言中什么函数能实现识别键盘上的按键

在c语言中什么函数能实现识别键盘上的按键,第1张

添加WM_KEYDOWN函数。在函数体中case WM_KEYDOWN: if (wParam==VK_LEFT)//方向键左 { rect1left-=10; rect1right-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_RIGHT)//方向键右 { rect1left+=10; rect1right+=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_UP)//方向键上 { rect1top-=10; rect1bottom-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_DOWN)//方向键下 { rect1top+=10; rect1bottom+=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_PRIOR)//PG UP { rect1top-=10; rect1bottom-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_NEXT)//PG DN { rect1top+=10; rect1bottom+=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_HOME)//HOME { rect1left-=10; rect1right-=10; InvalidateRect (hWnd,NULL,TRUE); } else if (wParam==VK_END)//END { rect1left+=10; rect1right+=10; InvalidateRect (hWnd,NULL,TRUE); } break;

我估计你分数给的在高也没人回答。来个这样的代码太麻烦了。而且百度金币用处也不大。

不过,我可以写几个鼠标函数给你参考一下。

首先了解一下鼠标的中断。

_AX=0x01 表示显示光标

_AX=0x02 停止显示光标

_AX=0x03 读取光标位置与案件

_AX=0x04 设置光标位置

所以啊。根据这四个中断,有以下几个函数

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

void MouseOn(void)//鼠标光标显示

{

_AX = 0x01;

geninterrupt(0x33);

}

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

void MouseOff(void)//鼠标光标隐藏

{

_AX = 0x02;

geninterrupt(0x33);

}

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

void MouseSetXY(int x,int y)//设置当前位置

{

_CX = x,

_CD = y;

_AX = 0x04;

geninterrupt(0x33);

}

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

int LeftPress(void)//鼠标左键按下

{

_AX = 0x33;

geninterrupt(0x33);

return(_BX&1);

}

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

鼠标右键的应该也会了吧。不过要return(_BX&2);

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

void MouseGetXY(void)//得到当前位置

{

_AX = 0x33;

geninterrupt(0x33);

MouseX = _CX;

MouseY = _DX;

}

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

最好要复制粘贴,打字打得手疼。

你可以使用热键来实现你要的功能 不需要窗口焦点 代码如下using SystemRuntimeInteropServices; [DllImport("user32dll", EntryPoint = "RegisterHotKey")]

public static extern bool RegisterHotKey

(

IntPtr hWnd, //要注册热键的窗口句柄

int id, //热键编号

int fsModifiers, //特殊键如:Ctrl,Alt,Shift,Window

int vk //一般键如:A B C F1,F2 等

); [DllImport("user32dll", EntryPoint = "UnregisterHotKey")]

public static extern bool UnregisterHotKey

(

IntPtr hWnd, //注册热键的窗口句柄

int id //热键编号上面注册热键的编号

);

private const int WM_HOTKEY = 0x312;

private enum MyKeys

{

None = 0,

Alt = 1,

Ctrl = 2,

Shift = 4,

Win = 8

}

private void Form1_Load(object sender, EventArgs e)

{

RegisterHotKey(thisHandle, 1, (int)(MyKeysCtrl | MyKeysAlt), (int)KeysW);//Ctrl+Alt+W

RegisterHotKey(thisHandle, 2, (int)(MyKeysNone), (int)KeysH);//直接按H

} private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

UnregisterHotKey(thisHandle, 1);

UnregisterHotKey(thisHandle, 2);

} protected override void WndProc(ref Message m)

{

if (mMsg == WM_HOTKEY)

{

switch (mWParamToInt32())

{

case 1://按Ctrl+Alt+W时显示窗体

thisShow();

thisWindowState = FormWindowStateNormal;

break;

case 2://直接按H输出AAAA

MessageBoxShow("AAAA");

break;

default:

break;

}

}

baseWndProc(ref m);

}

你的问题并未说清楚。在你这个循环里,不能放在12行后面。因为while(sec>0)中要判断sec是否大于0,如果放在12行后面那么sec被后面的语句改变以了的话,就有问题了。另外,因为while前有一句scanf("%d",&sec);,12行后面再scanf("%d",&sec);的话不是两个语句重复了?若去掉while前的scanf("%d",&sec);,那么第一次进入while(sec>0)时sec还没有赋值,则要出错。所以这段代码的结构决定了scanf("%d",&sec);放在while循环的最后是合理的。放在什么地方是代码结构决定的,并不是while中的scanf("%d",&sec);一定要放在最后……

以上就是关于在c语言中什么函数能实现识别键盘上的按键全部的内容,包括:在c语言中什么函数能实现识别键盘上的按键、c语言 获取鼠标键盘事件、C#中怎么获取键盘的记录,窗口没焦点也能获取的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9581428.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存