c语言键盘控制函数 c语言键盘控制物体移动

C语言中的键盘输入函数 。。。k=k0xff?0x00ff:k8;其实就是
if(k0xff) {
k=0x00ff;
}else {
k=k8;
}的简写 。
其实0xff和0x00ff是一样的 , 都表示同一个十六进制的值 。
书上这么写,没有错;至于为什么 , 就不好说了 。
可能是让你多学点知识 , 也可能是现在很多书其实在编写时并不是很认真的 。毕竟尽信书不如无书!
后面的k8是把0xff的值右移8位,达到计算的目的(具体什么目的要看具体内容)
我想知道用C语言怎么写一个控制键盘输入的程序,比如让键盘自动执行ctrl或shift功能等.请哪位高手帮帮忙可以用普通的C语言来写 。调用User32.lib
的函数:
void keybd_event(BYTE bVirturalKey,BYTE bScanCode,
DWORD dwFlags,DWORD dwExtraInfo)
ctrl 键是 VK_CONTROL bScanCode = 0x9d
shift键是 VK_SHIFT 0xaa
揿键是 0,0
键弹上来是:KEYEVENTF_KEYUP,0
例如simu_keyboard.c程序,模拟 Alt-PrintScreen,把屏幕图像放入剪切板 。
头文件:
#include Windows.h
#include Winuser.h
#include stdio.h
#include stdlib.h
/* ----------------------------------
simulation of Alt-PrintScreen
to get current Window image in clipboard
* -----------------------------------*/
void snapwin_2_clipboard()
{
keybd_event(VK_LMENU,0xA4,0,0);// 揿 Alt
keybd_event(VK_SNAPSHOT,0x2C,0,0);// 揿 PrintScreen
keybd_event(VK_SNAPSHOT,0x2C,KEYEVENTF_KEYUP,0); // 键弹上
keybd_event(VK_LMENU,0xA4,KEYEVENTF_KEYUP,0); // 键弹上
}
void main()
{
(void) snapwin_2_clipboard();
exit(0);
}
编译命令: cl simu_keyboard.c user32.lib
运行:simu_keyboard.exe
用任何图像编辑软件中的Edit-paste 可贴剪切板里的内容了 。
c语言:鼠标和键盘函数的相关问题首先最简单的但可以后台处理的有SendMessage()PostMessage()
发送鼠标,
键盘消息,
这个百度一搜n多了
然后中等级的模拟就是keyboard_eventmouse_event了这个比较用的比较多,
给个例子你
模拟键盘点击void
Press(UINT
key)
{
keybd_event(key,MapVirtualKey(key,
0),0,0);
keybd_event(key,MapVirtualKey(key,
0),KEYEVENTF_KEYUP,0);
}
模拟
鼠标左键单击mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
这里注意调用
keyboard_event
的时候一定要用MapVirtualKey
网上大部分的代码都是没用的,
这个函数时获取
硬件扫描码
的先说下keybd_event();函数的参数keybd_event(要模拟按下的虚拟按键码,
虚拟按键码对应的硬件扫描码,0,0);网上的代码大部分都有
虚拟按键码,
当然你运行大部分都是没问题的,
因为对于一般的程序而言是没问题的但有的程序为了防止
外挂
或者
防止其他程序恶意修改什么的,会对
鼠标键盘
消息进行检测,
如果检测到没有硬件扫描码会拒绝执行的
然后还有比较高级的就是SendInput模拟了void
OnSendCharCode(unsigned
short
unicode
=
0,unsigned
short
vcode
=
0,bool
bDown
=
false,bool
bUnicode
=
true);
void
OnSendCharCode(unsigned
short
unicode,unsigned
short
vcode,bool
bDown,bool
bUnicode)
{
unsigned
short
uNum
=
0;
//
v-code
Clicked
INPUT
事件设定
KEYBDINPUT
kDown;
KEYBDINPUT
kUp;
if(!bUnicode)
{
//
'A';
(Virtual
Code
只有大写),
要输入小写
//
Enter:
13,
Backspace:
8,
Up:38
kDown.wVk
=
kUp.wVk
=
vcode;
kDown.wScan
=
kUp.wScan
=
::MapVirtualKey(kDown.wVk,0);
//kDown.dwFlags
=
KEYEVENTF_EXTENDEDKEY;
kUp.dwFlags
=
KEYEVENTF_KEYUP;
}else{
kDown.wVk
=
kUp.wVk
=
0;
kDown.wScan
=
kUp.wScan
=
unicode;
kDown.dwFlags
=
KEYEVENTF_UNICODE;
kUp.dwFlags
=
KEYEVENTF_UNICODE
|
KEYEVENTF_KEYUP;
}
//
建立
KeyDown
事件
建立
KeyUP
事件
INPUT
inputKeyDown,
inputKeyUP;
inputKeyDown.type
=
inputKeyUP.type
=
INPUT_KEYBOARD;
//
指定
input

keyboard
kDown.time
=
kUp.time
=
0;
//
the
system
will
provide
its
own
time
stamp.
kDown.dwExtraInfo
=
kUp.dwExtraInfo
=
(WORD)::GetMessageExtraInfo();
inputKeyDown.ki
=
kDown;//
指定
键盘
属性结构
inputKeyUP.ki
=
kUp;
//
指定
键盘
属性结构
//
v-code
Clicked
INPUT
事件设定完成
//

INPUT
事件送到
Root
视窗,
系统会根据视窗位置,送给目标视窗
if(bDown)
{
INPUT
event[1]
=
{inputKeyDown};
uNum
=
::SendInput(1,event,
sizeof(INPUT));
}else{
INPUT
event[2]
=
{inputKeyDown,inputKeyUP};
uNum
=
::SendInput(2,event,
sizeof(INPUT));
}
}
//例子:
OnSendCharCode(0,VK_SHIFT,true,false);
OnSendCharCode(0,'A',false,false);
OnSendCharCode(0,VK_SHIFT,false,false);
OnSendCharCode(0,'A',false,false);
//KEYEVENTF_UNICODE
能区分大小写
OnSendCharCode('A');
OnSendCharCode('a');
不过还是有很多游戏,它是用
DirectX
技术去做的,这些大部分对他们没用所以还有最最最高级的模拟,
就是
对硬件驱动程序的模拟这个有个外国人写的
winio.h
的头文件,
有兴趣可以去学,
一般用不到的,
【c语言键盘控制函数 c语言键盘控制物体移动】关于c语言键盘控制函数和c语言键盘控制物体移动的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读