vc模拟键盘鼠标命令

vc模拟鼠标键盘操作实用类//****************** 类mk头文件mk.h **************************#if !defined(AFX_MK_H__B024D48F_090A_4F6F_A199_32996DF699B3__INCLUDED_)#define AFX_MK_H__B024D48F_090A_4F6F_A199_32996DF699B3__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#include "winable.h"class mk{public:mk();static void Key(BYTE k, int mSeconds=0);//按一个键,mSeconds表按键后到//下一次操作延迟的时间:msstatic void Key2(BYTE k1, BYTE k2,int mSeconds=0);//按2个键static void Key3(BYTE k1,BYTE k2,BYTE k3,int mSeconds=0);//按3个键static void Click(int x,int y,int mSeconds=0);//单击static void RClick(int x,int y,int mSeconds=0);//右击static void DClick(int x,int y,int mSeconds=0);//双击static void CtrlClick(int x, int y, int mSeconds=0);//Ctrl+单击static void Drag(int x1,int y1,int x2,int y2,int mSeconds=0);//鼠标拖动virtual ~mk();};#endif// !defined(AFX_MK_H__B024D48F_090A_4F6F_A199_32996DF699B3__INCLUDED_) //****************** 类mk头文件mk.h end**************************//****************** 类mk实现文件mk.cpp **************************#include "stdafx.h"#include "mk.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////mk::mk(){}mk::~mk(){}void mk::Click(int x, int y, int mSeconds){SetCursorPos(x,y);mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);Sleep(mSeconds);}void mk::DClick(int x, int y, int mSeconds){SetCursorPos(x,y);mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); Sleep(mSeconds);}void mk::Drag(int x1, int y1, int x2, int y2, int mSeconds) {SetCursorPos(x1,y1);mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); SetCursorPos(x2,y2);mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); Sleep(mSeconds);}void mk::RClick(int x, int y, int mSeconds){SetCursorPos(x,y);mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0); Sleep(mSeconds);}void mk::Key(BYTE k, int mSeconds){keybd_event(k,0,0,0);keybd_event(k,0,KEYEVENTF_KEYUP,0);Sleep(mSeconds);}void mk::Key2(BYTE k1, BYTE k2, int mSeconds){//法1//keybd_event(k1, 0, 0 ,0);//keybd_event(k2, 0, 0 ,0);//keybd_event(k2, 0, KEYEVENTF_KEYUP,0);//keybd_event(k1, 0, KEYEVENTF_KEYUP,0);//法2,更通用,但须先#include "winable.h"INPUT input[4];memset(input,0,sizeof(input));input[0].type=input[1].type=input[2].type=input[3].type=INPUT_KEYBOARD;input[0].ki.wVk=input[3].ki.wVk=k1;input[1].ki.wVk=input[2].ki.wVk=k2;input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP;SendInput(4, input, sizeof(INPUT));Sleep(mSeconds);}void mk::CtrlClick(int x, int y, int mSeconds){SetCursorPos(x,y);keybd_event(VK_CONTROL ,0,0,0);mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);Sleep(mSeconds);}void mk::Key3(BYTE k1, BYTE k2, BYTE k3, int mSeconds){if(k1==VK_CONTROL&&k2==VK_MENU&&k3==VK_DELETE)ShellExecute(NULL,NULL,"taskmgr.exe",NULL,NULL,SW_SHOW);else{INPUT input[6];memset(input,0,sizeof(input));input[0].type=input[1].type=input[2].type=input[3].type=input[4].type=input[5].type=INPUT_KE YBOARD;input[0].ki.wVk=input[5].ki.wVk=k1;input[1].ki.wVk=input[4].ki.wVk=k2;input[2].ki.wVk=input[3].ki.wVk=k3;input[3].ki.dwFlags=input[4].ki.dwFlags=input[5].ki.dwFlags=KEYEVENTF_KEYUP;SendInput(6, input, sizeof(INPUT));}Sleep(mSeconds);}//****************** 类mk实现文件mk.cpp end**************************===================================================================VC模拟键盘操作INPUT input[4];memset(input, 0, sizeof(input));//设置模拟键盘输入input[0].type = input[1].type = input[2].type = input[3].type = INPUT_KEYBOARD;input[0].ki.wVk = input[2].ki.wVk = VK_CONTROL;input[1].ki.wVk = input[3].ki.wVk = VK_ESCAPE;// 释放按键input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP;SendInput(4, input, sizeof(INPUT));******************************************************************************* **符号常量十六进制值指定的鼠标或键盘按键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 SPACEBARVK_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_MULTIPL Y 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 键举例:(一)响应单独的按键:先添加PreTranslateMessage()(响应WM_CHAR)也是同样的效果,因为本例只捕捉键盘) BOOL CMydilog::PreTranslateMessage(MSG* pMsg){// TODO: Add your specialized code here and/or call the base classif (pMsg->message == WM_KEYDOWN){if(pMsg->wParam=='M')//直接用上面的虚码代替就可以响应所指键MessageBox("hello");//如果按下M键弹出消息.比如想当按下小键盘1时//弹出就用VK_NUMPAD1代替'M'}return CDialog::PreTranslateMessage(pMsg);}(二)组合键的用法:(本例响应Ctrl+X键)BOOL CMydilog::PreTranslateMessage(MSG* pMsg){// TODO: Add your specialized code here and/or call the base classif (pMsg->message == WM_KEYDOWN){switch (pMsg->wParam){case VK_ESCAPE:SetFocus ();return TRUE;case 'X':if(::GetKeyState(VK_CONTROL) < 0)//如果是Shift+X这里就//改成VK_SHIFTMessageBox("hello");return TRUE;}}return CDialog::PreTranslateMessage(pMsg); }。

合集下载

C#实现的三种方式实现模拟键盘按键

C#实现的三种方式实现模拟键盘按键

C#实现的三种⽅式实现模拟键盘按键1.System.Windows.Forms.SendKeys组合键:Ctrl = ^ 、Shift = + 、Alt = %模拟按键:Aprivate void button1_Click(object sender, EventArgs e){textBox1.Focus();SendKeys.Send("{A}");}模拟组合键:CTRL + Aprivate void button1_Click(object sender, EventArgs e){webBrowser1.Focus();SendKeys.Send("^{A}");}SendKeys.Send // 异步模拟按键(不阻塞UI)SendKeys.SendWait // 同步模拟按键(会阻塞UI直到对⽅处理完消息后返回)//这种⽅式适⽤于WinForm程序,在Console程序以及WPF程序中不适⽤2.keybd_eventDLL引⽤[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]public static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);模拟按键:Aprivate void button1_Click(object sender, EventArgs e){textBox1.Focus();keybd_event(Keys.A, 0, 0, 0);}模拟组合键:CTRL + Apublic const int KEYEVENTF_KEYUP = 2;private void button1_Click(object sender, EventArgs e){webBrowser1.Focus();keybd_event(Keys.ControlKey, 0, 0, 0);keybd_event(Keys.A, 0, 0, 0);keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);}3.PostMessage上⾯两种⽅式都是全局范围呢,现在介绍如何对单个窗⼝进⾏模拟按键模拟按键:A / 两次[DllImport("user32.dll", EntryPoint = "PostMessageA", SetLastError = true)]public static extern int PostMessage(IntPtr hWnd, int Msg, Keys wParam, int lParam);public const int WM_CHAR = 256;private void button1_Click(object sender, EventArgs e){textBox1.Focus();PostMessage(textBox1.Handle, 256, Keys.A, 2);}模拟组合键:CTRL + A如下⽅式可能会失效,所以最好采⽤上述两种⽅式1public const int WM_KEYDOWN = 256;public const int WM_KEYUP = 257;private void button1_Click(object sender, EventArgs e){webBrowser1.Focus();keybd_event(Keys.ControlKey, 0, 0, 0);keybd_event(Keys.A, 0, 0, 0);PostMessage(webBrowser1.Handle, WM_KEYDOWN, Keys.A, 0); keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);}。

VC 模拟鼠标和键盘输入

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 &lt; length;index++) { int val = text[index];if(val &gt;= 97 &amp;&amp; val &lt;= 122) //小写a-z {val -= 32; bShift = false; } else if(val&gt;= 65 &amp;&amp; val &lt;= 90) //大写A-Z { bShift = true;} else if(val &gt;= 48 &amp;&amp; val &lt;= 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 '&amp;':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'\&quot;': val = 222; bShift = true;break; case ',': val = 188;bShift = false; break; case '&lt;': val = 188; bShift = true;break; case '.': val = 190;bShift = false; break; case '&gt;':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); } }但是要注意,如果用户默认是中文输入法,那我们得先想办法切换到英文输入法才行。

模拟ctrl+alt+delete三键 VC编程

模拟ctrl+alt+delete三键  VC编程

加入收藏设为首页联系站长| 网站首页| 数据库教程| web编程| 服务器| 程序设计|| 程序设计首页| C语言编程| VC编程| VB编程| Delphi编程| Java编程| PowerBuilder |您现在的位置:网络学院>> 程序设计>> VC编程>> 文章正文模拟ctrl+alt+delete三键【字体:小大】模拟ctrl+alt+delete三键作者:佚名文章来源:不详点击数:更新时间:2007-7-1在我们编写远程控制软件的时候,我们会发现要想解锁server端我们就得发送这三个键的虚拟。

正在装载数据……下面我说一下解决过程1.一开始,决定通过keybd_event()来模拟键盘keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),0,0);keybd_event(VK_MENU,MapVirtualKey(VK_MENU,0),0,0);keybd_event(VK_DELETE,MapVirtualKey(VK_DELETE,0),0,0);keybd_event(VK_DELETE,MapVirtualKey(VK_DELETE,0),KEYEVENTF_KEYUP,0);keybd_event(VK_MENU,MapVirtualKey(VK_MENU,0),KEYEVENTF_KEYUP,0);keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),KEYEVENTF_KEYUP,0);发现只能模拟ctrl+alt两个键的效果,然而其他的两个键的都可以模拟比如win+d。

不知道是不是keybd_event()只能模拟两键还是因为ctrl+alt+delete的特殊性,望高手告之,在此谢过。

2.运用PostMessage(HWND_BROADCAST, WM_HOTKEY, 0, MAKELONG(MOD_ALT | MOD_CONTROL, VK_DELETE));来发送虚拟键盘,但是在winNT以后的系统里我们还有很多事情要做,比如:OpenDesktop()、OpenInputDesktop()、GetThreadDesktop()、SetThreadDesktop()、CloseDesktop ()、GetUserObjectInformation()代码如下:#include "windows.h"BOOL simulateAltControlDel();void main(){simulateAltControlDel();}BOOL simulateAltControlDel(){HDESK hdeskCurrent;HDESK hdesk;HWINSTA hwinstaCurrent;HWINSTA hwinsta;//// Save the current Window station//hwinstaCurrent = GetProcessWindowStation();if (hwinstaCurrent == NULL)return FALSE;//// Save the current desktop//hdeskCurrent = GetThreadDesktop(GetCurrentThreadId());if (hdeskCurrent == NULL)return FALSE;//// Obtain a handle to WinSta0 - service must be running// in the LocalSystem account//hwinsta = OpenWindowStation("winsta0", FALSE,WINSTA_ACCESSCLIPBOARD |WINSTA_ACCESSGLOBALATOMS |WINSTA_CREATEDESKTOP |WINSTA_ENUMDESKTOPS |WINSTA_ENUMERATE |WINSTA_EXITWINDOWS |WINSTA_READATTRIBUTES |WINSTA_READSCREEN |WINSTA_WRITEATTRIBUTES);if (hwinsta == NULL)return FALSE;//// Set the windows tation to be winsta0//if (!SetProcessWindowStation(hwinsta))return FALSE;//// Get the default desktop on winsta0//hdesk = OpenDesktop("Winlogon", 0, FALSE,DESKTOP_CREATEMENU |DESKTOP_CREATEWINDOW |DESKTOP_ENUMERATE |DESKTOP_HOOKCONTROL |DESKTOP_JOURNALPLAYBACK |DESKTOP_JOURNALRECORD |DESKTOP_READOBJECTS |DESKTOP_SWITCHDESKTOP |DESKTOP_WRITEOBJECTS);if (hdesk == NULL)return FALSE;//// Set the desktop to be "default"//if (!SetThreadDesktop(hdesk))return FALSE;PostMessage(HWND_BROADCAST,WM_HOTKEY,0,MAKELPARAM(MOD_ALT|MOD_CONTROL,VK_DELETE));//// Reset the Window station and desktop//if (!SetProcessWindowStation(hwinstaCurrent))return FALSE;if (!SetThreadDesktop(hdeskCurrent))return FALSE;//// Close the windows tation and desktop handles//if (!CloseWindowStation(hwinsta))return FALSE;if (!CloseDesktop(hdesk))return FALSE;return TRUE;}偶一开始试验了发现不成功,后来冰河大哥告诉我说OpenDesktop("Winlogon", ......)本身需要LocalSystem权限,果然如此,把它注册成服务,然后效果实现。

c#模拟键盘鼠标事件sendkeys

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驱动模拟按键

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#实现数字输入模拟键盘

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,内。

MFC设置热键代替手游的鼠标点击(相对坐标)

MFC设置热键代替手游的鼠标点击(相对坐标)void CXXXDlg::mouseClick(CPoint p){::PostMessage(hWnd,WM_MOUSEMOVE, MK_LBUTTON, M AKELONG(p.x,p.y));::PostMessage(hWnd,WM_LBUTTONDOWN,MK_LBUTTON, MAKELPARAM(p.x,p.y));::PostMessage(hWnd,WM_LBUTTONUP,MK_LBUTTON,MAKE LPARAM(p.x,p.y));Sleep(50);}我喜欢玩FPS(First-person shooting game),左手对ASDF键位很熟悉。

因为几个点位在一起,用鼠标点经常滑标,所以有了这个想法,let's go。

一、先拖个复选框用于注册热键,勾选的时候能用,不想用了可以勾掉,不然你要关掉程序了才能恢复正常打字。

void CXXXDlg::OnCheck1(){CButton *button =(CButton *)GetDlgItem(IDC_CHECK1);if(button->GetCheck()){GetDlgItem(IDC_CHECK1)->SetWindowText(_T("游戏状态"));RegisterHotKey(m_hWnd,1001,0,'A'); //自己设置RegisterHotKey(m_hWnd,1002,0,'S'); //自己加的RegisterHotKey(m_hWnd,1003,0,'D'); //自己加的RegisterHotKey(m_hWnd,1004,0,'F'); //自己加的RegisterHotKey(m_hWnd,1005,0,VK_SPACE); //自己加的mycheck=TRUE;}else{GetDlgItem(IDC_CHECK1)->SetWindowText(_T("打字状态"));CMy20221008Dlg::OnDestroy() ;mycheck=FALSE;}}二、添加响应并实现系统热键消息 WM_HOTKEY。

模拟鼠标的操作方法

模拟鼠标的操作方法
模拟鼠标的操作方法通常可以使用编程语言提供的相关函数或库来实现。

下面是一些常见的操作方法:
1. 鼠标移动:可以使用`MouseMove`函数来模拟鼠标的移动操作。

该函数接受两个参数,分别是鼠标移动到的目标位置的横坐标和纵坐标。

例如,
`MouseMove(x, y)`可以将鼠标移动到坐标为(x, y)的位置。

2. 鼠标点击:可以使用`MouseClick`函数来模拟鼠标的点击操作。

该函数接受一个参数,表示点击的按钮。

例如,`MouseClick("left")`表示模拟鼠标左键的点击操作。

3. 鼠标双击:可以使用`MouseDoubleClick`函数来模拟鼠标的双击操作。

该函数接受一个参数,表示双击的按钮。

例如,`MouseDoubleClick("left")`表示模拟鼠标左键的双击操作。

4. 鼠标拖动:可以使用`MouseDown`、`MouseMove`和`MouseUp`等函数来模拟鼠标的拖动操作。

首先使用`MouseDown`函数按下鼠标按钮,然后使用`MouseMove`函数移动鼠标到目标位置,最后使用`MouseUp`函数释放鼠标按钮。

例如,`MouseDown("left")`、`MouseMove(x, y)`和`MouseUp("left")`可以模拟鼠标左键的拖动操作。

需要注意的是,具体的操作方法可能因编程语言和操作系统的不同而有所差异。

VC模拟鼠标键盘输入

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, // 鼠标水平方向位置。

VBS基础篇 vbscript Sendkeys模拟键盘操作

VBS基础篇vbscript Sendkeys模拟键盘操作vbscript中我们可以使用object.SendKeys模拟键盘操作,将一个或多个按键指令发送到指定Windows窗口来控制应用程序运行。

其使用格式为:object.SendKeys(string)object:表示WshShell对象string:表示要发送的按键指令字符串,需要放在英文双引号中。

WshShel l.SendKeys “string”1、基本键一般来说,要发送的按键指令都可以直接用该按键字符本身来表示,例如要发送字母"x",使用WshShell.SendKeys "x" 即可。

也可直接发送多个按键指令,只需要将按键字符按顺序排列在一起即可。

例如,要发送按键"cfan",可以使用WshShell.SendKeys "cfan"2、特殊功能键对于需要与Shift、Ctrl、Alt三个控制键组合的按键SendKeys使用特殊字符来表示:Shift +Ctrl ^Alt %具体如下:Shift ---------WshShell.SendKeys "+"Ctrl---------WshShell.SendKeys "^"Alt---------WshShell.SendKeys "%"由于“+”、“^”这些字符用来表示特殊的控制按键了,如何表示这些按键呢?只要用大括号括住这些字符即可。

例如: 要发送加号“+”,可使用“WshSh ell.SendKeys "{+}"”另外对于一些不会生成字符的控制功能按键,也同样需要使用大括号括起来按键的名称。

例如要发送回车键,需要用“WshShell.SendKeys "{ENTER}" ”表示;发送向下的方向键用“Wshell.SendKeys "{DOWN}" ”表示Space---------WshShell.SendKeys " "Enter---------WshShell.SendKeys "{ENTER}"←---------WshShell.SendKeys "{RIGHT}"↑---------WshShell.SendKeys "{UP}"F1---------WshShell.SendKeys "{F1}"常见按键代码:如果需要发送多个重复的单字母按键,不必重复输入该字母,SendKeys允许使用简化格式进行描述,使用格式为“{按键数字}”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档