VC模拟鼠标键盘输入
C语言实现模拟键盘输入

C语言实现模拟键盘输入keybd_event functionSynthesizes a keystroke. The system can use such a synthesized keystroke to generate a WM_KEYUP or WM_KEYDOWN message. The keyboard driver's interrupt handler calls the keybd_event function.Note This function has been superseded. Use SendInput instead.SyntaxC++VOID WINAPI keybd_event(_In_ BYTE bVk,_In_ BYTE bScan,_In_ DWORD dwFlags,_In_ ULONG_PTR dwExtraInfo);ParametersbVk [in]Type: BYTEA virtual-key code. The code must be a value in the range 1 to 254. For a complete list, see Virtual Key Codes.bScan [in]Type: BYTEA hardware scan code for the key.dwFlags [in]Type: DWORDControls various aspects of function operation. This parameter can be one or more of the following values.Value MeaningKEYEVENTF_EXTENDEDKEY 0x0001 If specified, the scan code was preceded by a prefix byte having the value 0xE0 (224).KEYEVENTF_KEYUP 0x0002 If specified, the key is being released. If not specified, the key is being depressed.dwExtraInfo [in]Type: ULONG_PTRAn additional value associated with the key stroke. Return valueThis function does not return a value.RemarksAn application can simulate a press of the PRINTSCRN key in order to obtain a screen snapshot and save it to the clipboard. To do this, call keybd_event with the bVk parameter set to VK_SNAPSHOT.ExamplesThe following sample program toggles the NUM LOCK light by using keybd_event with a virtual key of VK_NUMLOCK. It takes a Boolean value that indicates whether the light should be turned off (FALSE) or on (TRUE). The same technique can be used for the CAPS LOCK key (VK_CAPITAL) and the SCROLL LOCK key (VK_SCROLL).#include <windows.h>void SetNumLock( BOOL bState ){BYTE keyState[256];GetKeyboardState((LPBYTE)&keyState);if( (bState && !(keyState[VK_NUMLOCK] & 1)) || (!bState && (keyState[VK_NUMLOCK] & 1)) ){// Simulate a key presskeybd_event( VK_NUMLOCK,0x45,KEYEVENTF_EXTENDEDKEY | 0,0 );// Simulate a key releasekeybd_event( VK_NUMLOCK,0x45,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0);}}void main(){SetNumLock( TRUE );}RequirementsMinimum supportedclient Windows 2000 Professional [desktop apps only]Minimum supportedWindows 2000 Server [desktop apps only] serverHeader Winuser.h (include Windows.h)Library User32.libDLL User32.dllScan CodesKey Scan Code~ ` 29! 1 2@ 2 3# 3 4$ 4 5% 5 6^ 6 7& 7 8* 8 9( 9 0A) 0 0B_ - 0C+ = 0DBackspace 0ETab 0FQ 10W 11E 12R 13T 14Y 15U 16I 17O 18P 19{ [ 1A} ] 1B| \ 2B Caps Lock 3A A 1ES 1FD 20F 21G 22H 23J 24K 25L 26: ; 27“ ' 28 Enter 1CL SHIFT 2AZ 2CX 2DC 2EV 2FB 30N 31M 32< , 33> . 34/ 35R SHIFT 36L CTRL 1DL ALT 38Space Bar 39R ALT E0 38R CTRL E0 1D Insert E0 52 Delete E0 53L Arrow E0 4B Home E0 47End E0 4FUp Arrow E0 48 Dn Arrow E0 50 Page Up E0 49 Page Down E0 51 R Arrow E0 4D Num Lock 45 Numeric 7 47 Numeric 4 4B Numeric 1 4F Numeric / E0 35 Numeric 8 48 Numeric 5 4C Numeric 2 50 Numeric 0 52 Numeric * 37 Numeric 9 49 Numeric 6 4D Numeric 3 51 Numeric . 53Numeric - 4A Numeric + 4E Numeric Enter E0 1CEsc 1F1 3BF2 3CF3 3DF4 3EF5 3FF6 40F7 41F8 42F9 43F10 44F11 57F12 58Print Screen ??Scroll Lock 46Pause ??Left Win E0 5B Right Win E0 5C Application E0 5D ACPI Power E0 5E ACPI Sleep E0 5F ACPI Wake E0 63。
VC 模拟鼠标和键盘输入

VC 模拟鼠标和键盘输入 - 天下 - 博客频道 -模拟鼠标点击:1、这里是鼠标左键按下和松开两个事件的组合即一次单击:mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )2、模拟鼠标右键单击事件:mouse_event (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 )3、两次连续的鼠标左键单击事件构成一次鼠标双击事件:mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )4、使用绝对坐标MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0需要说明的是,如果没有使用MOUSEEVENTF_ABSOLUTE,函数默认的是相对于鼠标当前位置的点,如果dx,和dy,用0,0表示,这函数认为是当前鼠标所在的点--直接设定绝对坐标并单击mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 1024, Y * 65536 / 768, 0, 0);mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 1024, Y * 65536 / 768, 0, 0);其中X,Y分别是你要点击的点的横坐标和纵坐标模拟键盘输入:[cpp]void EnterString(const char* text) { bool bShift = false; size_t length = strlen(text);for(size_t index = 0;index < length;index++) { int val = text[index];if(val >= 97 && val <= 122) //小写a-z {val -= 32; bShift = false; } else if(val>= 65 && val <= 90) //大写A-Z { bShift = true;} else if(val >= 48 && val <= 57) //数字0-9 { bShift = false; } else //特殊符号{ switch(val) { case '`':val = 192; bShift = false;break; case '~': val = 192;bShift = true; break; case '!':val = '1'; //!和1在同一个键盘,使用同一个键盘码,以下相同bShift = true; break; case '@': val = '2'; //@和2在同一个键盘,使用同一个键盘码,以下相同bShift = true; break; case '#': val = '3'; bShift = true;break; case '$': val = '4';bShift = true; break; case '%':val = '5'; bShift = true;break; case '^': val = '6';bShift = true; break; case '&':val = '7'; bShift = true;break; case '*': val = '8';bShift = true; break; case '(':val = '9'; bShift = true;break; case ')': val = '0';bShift = true; break; case '-':val = 189; bShift = false;break; case '=': val = 187;bShift = false; break; case '_':val = 189; bShift = true;break; case '+': val = 187;bShift = true; break; case '[':val = 219; bShift = false;break; case '{': val = 219;bShift = true; break; case ']':val = 221; bShift = false;break; case '}': val = 221;bShift = true; break; case '\\':val = 220; bShift = false;break; case '|': val = 220;bShift = true; break; case ';':val = 186; bShift = false;break; case ':': val = 186;bShift = true; case '\'': val = 222; bShift = false; break; case'\"': val = 222; bShift = true;break; case ',': val = 188;bShift = false; break; case '<': val = 188; bShift = true;break; case '.': val = 190;bShift = false; break; case '>':val = 190; bShift = true;break; case '/': val = 191;bShift = false; break; case '?':val = 191; bShift = true;break; default: break;} } if(bShift)keybd_event(VK_SHIFT,0,0,0); keybd_event(val,0,0,0);keybd_event(val,0,KEYEVENTF_KEYUP,0); if(bShift)keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0); } }但是要注意,如果用户默认是中文输入法,那我们得先想办法切换到英文输入法才行。
c#模拟键盘鼠标事件sendkeys

C#模拟键盘鼠标事件-SendKeys2007-09-18 15:13 7689人阅读评论(1) 收藏举报1.模拟键盘事件System.Windows.Forms.SendKeys以下是SendKeys 的一些特殊键代码表。
键代码BACKSPACE {BACKSPACE}、{BS} 或{BKSP}BREAK {BREAK}CAPS LOCK {CAPSLOCK}DEL 或DELETE {DELETE} 或{DEL}DOWN ARROW(下箭头键){DOWN}END {END}ENTER {ENTER} 或~ESC {ESC}HELP {HELP}HOME {HOME}INS 或INSERT {INSERT} 或{INS}LEFT ARROW(左箭头键){LEFT}NUM LOCK {NUMLOCK}PAGE DOWN {PGDN}PAGE UP {PGUP}PRINT SCREEN {PRTSC}(保留,以备将来使用)RIGHT ARROW(右箭头键){RIGHT}SCROLL LOCK {SCROLLLOCK}TAB {TAB}UP ARROW(上箭头键){UP}F1 {F1}F2 {F2}F3 {F3}F4 {F4}F5 {F5}F6 {F6}F7 {F7}F8 {F8}F9 {F9}F10 {F10}F11 {F11}F12 {F12}F13 {F13}F14 {F14}F15 {F15}F16 {F16}数字键盘加号{ADD}数字键盘减号{SUBTRACT}数字键盘乘号{MULTIPLY}数字键盘除号{DIVIDE}若要指定与SHIFT、CTRL 和ALT 键的任意组合一起使用的键,请在这些键代码之前加上以下一个或多个代码:键代码SHIFT + (SHIFT="+")CTRL ^ (CTRL="^") 如果输入ALT % private void button1_Click(object sender, System.EventArgs e) {//英文输入this.richTextBox1.Focus();for(int i=65;i<91;i++){char Letter=(char)i;SendKeys.Send(Letter.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}for(int i=97;i<123;i++){char Letter=(char)i;SendKeys.Send(Letter.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}private void button3_Click(object sender, System.EventArgs e) {//数字输入this.richTextBox1.Focus();for(int i=0;i<10;i++){SendKeys.Send(i.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}}private void button4_Click(object sender, System.EventArgs e) {//Backspacethis.richTextBox1.Focus();SendKeys.Send("{Backspace}");}private void button5_Click(object sender, System.EventArgs e) {//Homethis.richTextBox1.Focus();SendKeys.Send("{Home}");}private void button6_Click(object sender, System.EventArgs e) {//Endthis.richTextBox1.Focus();SendKeys.Send("{End}");}private void button7_Click(object sender, System.EventArgs e) {//Enterthis.richTextBox1.Focus();SendKeys.Send("{Enter}");private void button8_Click(object sender, System.EventArgs e) {//Deletethis.richTextBox1.Focus();SendKeys.Send("{Delete}");}private void button2_Click(object sender, System.EventArgs e) {//Shift+Homethis.richTextBox1.Focus();SendKeys.Send("+{Home}");}private void button9_Click(object sender, System.EventArgs e) {//Shift+Endthis.richTextBox1.Focus();SendKeys.Send("+{End}");}看下方法的说明public class SendKeys : System.ObjectSystem.Windows.Forms 的成员摘要:提供将键击发送到应用程序的方法。
VC驱动模拟按键

KBCWait4IBE '发送数据前应该先等待键盘缓冲区为空
SetPortVal KBC_KEY_CMD, &HD2, 1 '发送键盘写入命令
'SetPortVal函数用于向端口写入数据,它的用法是SetPortVal 端口号,欲写入的数据,写入数据的长度
KBCWait4IBE
SetPortVal KBC_KEY_DATA, btScancode, 1 '写入按键信息,按下键
Private Sub Form_Load()
If InitializeWinIo = False Then
'用InitializeWinIo函数加载驱动程序,如果成功会返回true,否则返回false
MsgBox "驱动程序加载失败!"
Unload Me
End If
Timer1.Interval=3000
KBCWait4IBE '等待键盘缓冲区为空
SetPortVal KBC_KEY_CMD, &HD2, 1 '发送键盘写入命令
KBCWait4IBE
SetPortVal KBC_KEY_DATA, (btScancode Or &H80), 1 '写入按键信息,释放键
Declare Function GetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByRef PhysVal As Long) As Boolean
Declare Function SetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysVal As Long) As Boolean
Visualstudio之C#实现数字输入模拟键盘

Visualstudio之C#实现数字输⼊模拟键盘背景当前做的⼀个上位机需运⾏在⼯控机上,众所周知,⼯控机不可能配备键盘,只能是触屏,⽽我当前的上位机需要输⼊参数,于是之前的解决办法既是调⽤Windows⾃带的OSK.exe虚拟键盘,⽅法在我的另⼀外⼀篇博客中已详述,但这种做法有两个致命缺陷,⼀是由于调⽤了外部.exe程序,国产杀毒软件会将我的上位机判定为疑似病毒⽂件(⼿动微笑);⼆是,若是该虚拟键盘被提前打开,我就没办法继续打开该软键盘使其在我的上位机界⾯之上,⽽该软键盘不是由我打开,我就获取不到它的Process,也就⽆法将其关闭重新打开,⼯控机的界⾯通常不会出现任务栏,因此虚拟键盘要是没有实体键盘就永远⽆法打开,头疼⾄极。
于是就想到⾃⼰实现软键盘。
便有此⽂,做个记录。
⾸先强调⼀下,本软键盘⾮真正意义的软键盘,只是⽤了很笨的⽅法在同⼀个界⾯上提供了⼀个数字输⼊的解决⽅案,实际效果如下:正⽂为了不让按键在点击的时候获取焦点,所以我采⽤了label控件,⼀共12个控件,分别是0,1...9,退格,清除,对应的name分别为,keyb0,keyb1,```keb9,keybback,keybclear,对应的Text就是相应的0,1,2...9,退格,清除,为了调整所有按键⼤⼩,属性Autosize应该设置为false。
在窗体Load事件中,添加所有label控件的单击事件mybutton_clicked,private void lazerctrl_Load(object sender, EventArgs e){// 注册键盘按键单击事件keyb1.Click += new EventHandler(mybutton_clicked);keyb2.Click += new EventHandler(mybutton_clicked);keyb3.Click += new EventHandler(mybutton_clicked);keyb4.Click += new EventHandler(mybutton_clicked);keyb5.Click += new EventHandler(mybutton_clicked);keyb6.Click += new EventHandler(mybutton_clicked);keyb7.Click += new EventHandler(mybutton_clicked);keyb8.Click += new EventHandler(mybutton_clicked);keyb9.Click += new EventHandler(mybutton_clicked);keyb0.Click += new EventHandler(mybutton_clicked);keybback.Click += new EventHandler(mybutton_clicked);keybclear.Click += new EventHandler(mybutton_clicked);}在⿏标按键事件中,将控件代表的数字值,填⼊到页⾯上最后⼀个获取到焦点的TextBox,内。
C#模拟键盘鼠标事件-SendKeys

C#模拟键盘鼠标事件-SendKeys2007-09-18 15:13 7689人阅读评论(1) 收藏举报1.模拟键盘事件System.Windows.Forms.SendKeys以下是SendKeys 的一些特殊键代码表。
键代码BACKSPACE {BACKSPACE}、{BS} 或{BKSP}BREAK {BREAK}CAPS LOCK {CAPSLOCK}DEL 或DELETE {DELETE} 或{DEL}DOWN ARROW(下箭头键){DOWN}END {END}ENTER {ENTER} 或~ESC {ESC}HELP {HELP}HOME {HOME}INS 或INSERT {INSERT} 或{INS}LEFT ARROW(左箭头键){LEFT}NUM LOCK {NUMLOCK}PAGE DOWN {PGDN}PAGE UP {PGUP}PRINT SCREEN {PRTSC}(保留,以备将来使用)RIGHT ARROW(右箭头键){RIGHT}SCROLL LOCK {SCROLLLOCK}TAB {TAB}UP ARROW(上箭头键){UP}F1 {F1}F2 {F2}F3 {F3}F4 {F4}F5 {F5}F6 {F6}F7 {F7}F8 {F8}F9 {F9}F10 {F10}F11 {F11}F12 {F12}F13 {F13}F14 {F14}F15 {F15}F16 {F16}数字键盘加号{ADD}数字键盘减号{SUBTRACT}数字键盘乘号{MULTIPLY}数字键盘除号{DIVIDE}若要指定与SHIFT、CTRL 和ALT 键的任意组合一起使用的键,请在这些键代码之前加上以下一个或多个代码:键代码SHIFT + (SHIFT="+")CTRL ^ (CTRL="^") 如果输入ALT % private void button1_Click(object sender, System.EventArgs e) {//英文输入this.richTextBox1.Focus();for(int i=65;i<91;i++){char Letter=(char)i;SendKeys.Send(Letter.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}for(int i=97;i<123;i++){char Letter=(char)i;SendKeys.Send(Letter.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}private void button3_Click(object sender, System.EventArgs e) {//数字输入this.richTextBox1.Focus();for(int i=0;i<10;i++){SendKeys.Send(i.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}}private void button4_Click(object sender, System.EventArgs e) {//Backspacethis.richTextBox1.Focus();SendKeys.Send("{Backspace}");}private void button5_Click(object sender, System.EventArgs e) {//Homethis.richTextBox1.Focus();SendKeys.Send("{Home}");}private void button6_Click(object sender, System.EventArgs e) {//Endthis.richTextBox1.Focus();SendKeys.Send("{End}");}private void button7_Click(object sender, System.EventArgs e) {//Enterthis.richTextBox1.Focus();SendKeys.Send("{Enter}");private void button8_Click(object sender, System.EventArgs e) {//Deletethis.richTextBox1.Focus();SendKeys.Send("{Delete}");}private void button2_Click(object sender, System.EventArgs e) {//Shift+Homethis.richTextBox1.Focus();SendKeys.Send("+{Home}");}private void button9_Click(object sender, System.EventArgs e) {//Shift+Endthis.richTextBox1.Focus();SendKeys.Send("+{End}");}看下方法的说明public class SendKeys : System.ObjectSystem.Windows.Forms 的成员摘要:提供将键击发送到应用程序的方法。
VC++键盘与鼠标的消息处理(2)

教案2007 ~2008 学年第一学期主讲教师课程名称面向对象程序设计(VC++)课程类别专业基础课学时及学分80、4授课班级使用教材VC++的使用及面向对象软件工程实例分析系(院、部)教研室(实验室) 计算机应用教研室课时授课计划课次序号:一、课题:ch7 键盘与鼠标的消息处理(2)二、课型:讲授三、目的要求:1、熟悉键盘消息及常见的虚拟键码。
2、掌握键盘消息的处理方法。
四、重点、难点:重点:键盘消息处理技术。
难点:按键消息(WM_KEYDOWN)的处理技巧。
五、教学方法及手段:案例式教学:设计目标、关键技术、结合实例讲解语法、总结。
按照提出问题、解决问题的思路开展教学。
六、参考资料:《VC++的使用及面向对象软件工程实例分析》贺怀清编,电子工业出版社《C++面向对象程序设计》李涛编,高等教育出版社,第8章七、作业:实验题1,3八、授课记录:九、授课效果分析:十、教学进程(教学内容、教学环节及时间分配等)1、复习鼠标的消息处理:关键是确定使用哪个消息、如何编写消息处理函数。
2、导入课题利用键盘消息获取用户的输入信息,在消息处理函数中完成用户的功能需求。
3、教学内容一、键盘消息键盘消息分类:系统键消息和非系统键消息系统键:输入键与Alt键组合,一般有Windows内部处理。
非系统键:不与Alt键组合的输入键。
键盘消息:系统键消息:WM_SYSKEYDOWN WM_SYSKEYUP非系统键消息:WM_KEYDOWN WM_KEYUP WM_CHAR(可见字符的按键消息)说明:Windows总是把键盘消息发送给拥有输入焦点的窗口。
可以使用CWnd::SetFocus()函数设置某个窗口拥有输入焦点,用GetFocus()获取拥有输入焦点的窗口。
二、键盘消息的处理即键盘消息处理函数,所有键盘消息处理函数的参数相同,比如:void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)nChar表示被击键的字符,nRepCnt表示该键被击的重复次数,nFlags中包含键的扫描码和标志位。
c#SendInput模拟输入字符和按键

c#SendInput模拟输⼊字符和按键介绍: 该程序本意是为了在彩六⾥打中⽂⽤的,现整理出来供⼤家复制粘贴。
(源程序以开源⾄) 主要使⽤SendInput函数,与c语⾔中⽤法⼀致。
(部分代码来⾃⽹络)命名空间部分using static System.Threading.Thread;using System.Runtime.InteropServices;结构体和函数声明部分[StructLayout(LayoutKind.Explicit)]public struct INPUT{[FieldOffset(0)]public int type;[FieldOffset(4)]public KEYBDINPUT ki;[FieldOffset(4)]public MOUSEINPUT mi;[FieldOffset(4)]public HARDWAREINPUT hi;}public struct MOUSEINPUT{public int dx;public int dy;public int mouseData;public int dwFlags;public int time;public IntPtr dwExtraInfo;}public struct KEYBDINPUT{public short wVk;public short wScan;public int dwFlags;public int time;public IntPtr dwExtraInfo;}public struct HARDWAREINPUT{public int uMsg;public short wParamL;public short wParamH;}[DllImport("user32")]public static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);⾃定义函数封装部分public void SimulateInputString(char c){INPUT[] input = new INPUT[2];input[0].type = 1;input[0].ki.wVk = 0;//dwFlags 为KEYEVENTF_UNICODE 即4时,wVk必须为0input[0].ki.wScan = (short)c;input[0].ki.dwFlags = 4;//输⼊UNICODE字符input[0].ki.time = 0;input[0].ki.dwExtraInfo = IntPtr.Zero;input[1].type = 1;input[1].ki.wVk = 0;input[1].ki.wScan = (short)c;input[1].ki.dwFlags = 6;input[1].ki.time = 0;input[1].ki.dwExtraInfo = IntPtr.Zero;SendInput(2u, input, Marshal.SizeOf((object)default(INPUT)));}public void SimulateInputKey(int key){INPUT[] input = new INPUT[1];input[0].type = 1;//模拟键盘input[0].ki.wVk = (short)key;input[0].ki.dwFlags = 0;//按下SendInput(1u, input, Marshal.SizeOf((object)default(INPUT))); Sleep(50);input[0].type = 1;//模拟键盘input[0].ki.wVk = (short)key;input[0].ki.dwFlags = 2;//抬起SendInput(1u, input, Marshal.SizeOf((object)default(INPUT))); Sleep(50);}说明:SimulateInputString为发送单个字符⽂本;SimulateInputKey为模拟按键按下和抬起,参数key为虚拟键码;关于键码的列表,可以查看微软⽂档:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
vc模拟键盘输入
keybd_event(VK_LWIN, 0, 0 ,0);
keybd_event('M', 0, 0 ,0);
keybd_event('M', 0, KEYEVENTF_KEYUP ,0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);
方法1:
HWND hwnd=::FindWindow(0, "文档1"); //假设你要找的窗口标题为“文档1”CWnd::FromHandle(hwnd)->SetForegroundWindow();
::PostMessage(hwnd, WM_KEYDOWN, VK_ESCAPE, 0L); //发送ESC按下的键盘消息
方法2:这里以向记事本程序发送Ctrl+s按键消息为例:
CWnd *pWnd = FindWindow("Notepad", NULL);
if (pWnd->GetSafeHwnd())
{
pWnd->ShowWindow(SW_NORMAL);
pWnd->SetForegroundWindow();
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event('S', 0, 0, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
keybd_event('S', 0, KEYEVENTF_KEYUP, 0);
}
对于其他程序,关键就是要找到就收消息的窗口句柄。
::mouse_event(1) 模拟鼠标动作API函数mouse_event,它可以实现模拟鼠标按下和放开等动作。
VOID mouse_event(
DWORD dwFlags, // 鼠标动作标识。
DWORD dx, // 鼠标水平方向位置。
DWORD dy, // 鼠标垂直方向位置。
DWORD dwData, // 鼠标轮子转动的数量。
DWORD dwExtraInfo // 一个关联鼠标动作辅加信息。
);
其中,dwFlags表示了各种各样的鼠标动作和点击活动,它的常用取值如下:MOUSEEVENTF_MOVE 表示模拟鼠标移动事件;
MOUSEEVENTF_LEFTDOWN 表示模拟按下鼠标左键;
MOUSEEVENTF_LEFTUP 表示模拟放开鼠标左键;
MOUSEEVENTF_RIGHTDOWN 表示模拟按下鼠标右键;
MOUSEEVENTF_RIGHTUP 表示模拟放开鼠标右键;
MOUSEEVENTF_MIDDLEDOWN 表示模拟按下鼠标中键;
MOUSEEVENTF_MIDDLEUP 表示模拟放开鼠标中键。
符号常量十六进制值指定的鼠标或键盘按键
VK_LBUTTON 01 鼠标左键
VK_RBUTTON 02 鼠标右键
VK_CANCEL 03 Control-break 过程
VK_MBUTTON 04 鼠标中键
VK_BACK 08 BACKSPACE 键
VK_TAB 09 TAB 键
VK_CLEAR 0C CLEAR 键
VK_RETURN 0D ENTER 键
VK_SHIFT 10 SHIFT 键
VK_CONTROL 11 CTRL 键
VK_MENU 12 ALT 键
VK_PAUSE 13 PAUSE 键
VK_CAPITAL 14 CAPS LOCK 键
VK_ESCAPE 1B ESC 键
VK_SPACE 20 SPACEBAR
VK_PRIOR 21 PAGE UP 键
VK_NEXT 22 PAGE DOWN 键
VK_END 23 END 键
VK_HOME 24 HOME 键
VK_LEFT 25 LEFT ARROW 键
VK_UP 26 UP ARROW 键
VK_RIGHT 27 RIGHT ARROW 键
VK_DOWN 28 DOWN ARROW 键
VK_SELECT 29 SELECT 键
VK_EXECUTE 2B EXECUTE 键
VK_SNAPSHOT 2C PRINT SCREEN键(用于Windows 3.0及以后版本)VK_INSERT 2D INS 键
VK_DELETE 2E DEL 键
VK_HELP 2F HELP 键
///////////////////////////////////////////////////
对于字母键和非小键盘上的数字键,直接在单引号中加入该键就行.
比如:
a键:'A'
1键:'1'
//////////////////////////////////////////////
VK_LWIN 5B Left Windows 键(Microsoft自然键盘)
VK_RWIN 5C Right Windows 键(Microsoft自然键盘)
VK_APPS 5D Applications 键(Microsoft自然键盘)
VK_NUMPAD0 60 数字小键盘上的0 键
VK_NUMPAD1 61 数字小键盘上的1 键
VK_NUMPAD2 62 数字小键盘上的2 键VK_NUMPAD3 63 数字小键盘上的3 键VK_NUMPAD4 64 数字小键盘上的4 键VK_NUMPAD5 65 数字小键盘上的5 键VK_NUMPAD6 66 数字小键盘上的6 键VK_NUMPAD7 67 数字小键盘上的7 键VK_NUMPAD8 68 数字小键盘上的8 键VK_NUMPAD9 69 数字小键盘上的9 键VK_MULTIPLY 6A Multiply 键
VK_ADD 6B Add 键
VK_SEPARATOR 6C Separator 键
VK_SUBTRACT 6D Subtract 键
VK_DECIMAL 6E Decimal 键
VK_DIVIDE 6F Divide 键
VK_F1 70 F1 键
VK_F2 71 F2 键
VK_F3 72 F3 键
VK_F4 73 F4 键
VK_F5 74 F5 键
VK_F6 75 F6 键
VK_F7 76 F7 键
VK_F8 77 F8 键
VK_F9 78 F9 键
VK_F10 79 F10 键
VK_F11 7A F11 键
VK_F12 7B F12 键
VK_F13 7C F13 键
VK_F14 7D F14 键
VK_F15 7E F15 键
VK_F16 7F F16 键
VK_F17 80H F17 键
VK_F18 81H F18 键
VK_F19 82H F19 键
VK_F20 83H F20 键
VK_F21 84H F21 键
VK_F22 85H F22 键
VK_F23 86H F23 键
VK_F24 87H F24 键
VK_NUMLOCK 90 NUM LOCK 键
VK_SCROLL 91 SCROLL LOCK 键
VK_ATTN F6 Attn 键
VK_CRSEL F7 CrSel 键
VK_EXSEL F8 ExSel 键
VK_EREOF F9 Erase EOF 键
VK_PLAY FA Play 键
VK_ZOOM FB Zoom 键
VK_OEM_CLEAR FE Clear 键。