VC 模拟鼠标和键盘输入

合集下载

C语言实现模拟键盘输入

C语言实现模拟键盘输入

C语言实现模拟键盘输入

keybd_event function

Synthesizes 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.

Syntax

C++

VOID WINAPI keybd_event(

_In_ BYTE bVk,

_In_ BYTE bScan,

_In_ DWORD dwFlags,

_In_ ULONG_PTR dwExtraInfo

);

Parameters

bVk [in]

Type: BYTE

A 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: BYTE

A hardware scan code for the key.

dwFlags [in]

Type: DWORD

Controls various aspects of function operation. This parameter can be one or more of the following values.

vc第6章 键盘与鼠标

vc第6章 键盘与鼠标

case WM_CHAR: if(wParam==(65&VK_CONTROL)) { if(nCtrlKeyDown == TRUE) { nCtrlAKeyDown = TRUE; nCtrlKeyDown = FALSE; } } else if(wParam==98||wParam==66) //当按下 键时 当按下b键时 当按下 { if(nShiftKeyDown == TRUE) //检查 检查shift键是否处于按下状态。 键是否处于按下状态。 检查 键是否处于按下状态 {nShiftBKeyDown = TRUE; //当SHIFT键按下时,变量置为真 键按下时, 当 键按下时 nShiftKeyDown = FALSE;} } break; case WM_PAINT: //处理绘图消息 处理绘图消息. 处理绘图消息 hDC=BeginPaint(hWnd,&ps); hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH);//创建 白画刷。 创建 白画刷。 hPen = (HPEN)GetStockObject(WHITE_PEN); //创建白画笔。 创建白画笔。 创建白画笔 SelectObject(hDC,hPen); //选入白画刷 选入白画刷 SelectObject(hDC,hBrush); //选入白画笔 选入白画笔 SetTextColor(hDC,RGB(255,0,0)); //设置字体颜色为红色。 设置字体颜色为红色。 设置字体颜色为红色

C#模拟鼠标键盘动作

C#模拟鼠标键盘动作

C#模拟鼠标键盘动作

在实际应用中,有时需要程序模拟鼠标点击或键盘按键操作,代替某些程序既定的人工操作,这样不但省时省力,效率较高,而且可以进行一些人力很难持续完成的工作。因为人是血肉之躯,人有思考的能力,但是人是会疲劳的,而电脑不会,只要有足够的资源和性能稳定的硬件设备。

模拟键盘动作

SendKeys.Send 方法

向活动应用程序发送击键。

命名空间:System.Windows.Forms

程序集:System.Windows.Forms(在System.Windows.Forms.dll 中)

方法签名:public static void Send(string keys)

参数

keys

类型:System.String

要发送的击键字符串。

备注:

每个键都由一个或多个字符表示。要指定单个键盘字符,请使用该字符本身。例如,要表示字母 A,请将字符串“A”传递给方法。要表示多个字符,请将各个附加字符追加到它之前的字符的后面。要表示字母 A、B 和 C,请将参数指定为“ABC”。

加号 (+)、插入符号 (^)、百分号 (%)、波形符 (~) 以及圆括号 () 对SendKeys具有特殊含义。要指定这些字符中的某个字符,请将其放在大括号 ({}) 内。例如,要指定加号,请使用“{+}”。要指定大括号字符,请使用“{{}”和“{}}”。中括号 ([ ]) 对SendKeys没有特殊含义,但必须将它们放在大括号内。在其他应用程序中,中括号具有特殊含义,此含义可能会在发生动态数据交换 (DDE) 时起重要作用。

开源软件模拟键盘操作方法

开源软件模拟键盘操作方法

开源软件模拟键盘操作方法

1. 使用Python模拟键盘操作:使用Python中的pyautogui库可以模拟键盘按键。例如,要模拟按下“Ctrl+C”组合键,可以使用以下代码:

import pyautogui

pyautogui.keyDown('ctrl')

pyautogui.press('c')

pyautogui.keyUp('ctrl')

2. 使用AutoHotkey模拟键盘操作:AutoHotkey是一个免费开源脚本语言,专门用于自动化任务,包括模拟键盘和鼠标操作。以下是一个使用AutoHotkey 模拟按下“Ctrl+C”组合键的脚本:

^c::

Send, {ctrl down}c{ctrl up}

Return

3. 使用Java Robot类模拟键盘操作:Java中的Robot类可以让程序模拟键盘和鼠标操作。以下是一个使用Java Robot类模拟按下“Ctrl+C”组合键的代码:

import java.awt.Robot;

import java.awt.event.KeyEvent;

Robot robot = new Robot();

robot.keyPress(KeyEvent.VK_CONTROL);

robot.keyPress(KeyEvent.VK_C);

robot.keyRelease(KeyEvent.VK_C);

robot.keyRelease(KeyEvent.VK_CONTROL);

无论使用哪种方法,都需要先了解键盘上的按键代码和操作方法。开源社区中有大量的键盘模拟库和文档可用来参考。

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)

VC驱动模拟按键

VC驱动模拟按键

驱动级模拟 在DOS时代,当用户按下或者放开一个键时,就会产生一个键盘中断(如果键盘中断是允许的),这样程序会跳转到BIOS中的键盘中断处理程序去执行。打开windows的设备管理器,可以查看到键盘控制器由两个端口控制。其中&H60是数据端口,可以读出键盘数据,而&H64是控制端口,用来发出控制信号。也就是,从&H60号端口可以读此键盘的按键信息,当从这个端口读取一个字节,该字节的低7位就是按键的扫描码,而高1位则表示是按下键还是释放键。当按下键时,最高位为0,称为通码,当释放键时,最高位为1,称为断码。既然从这个端口读数据可以获得按键信息,那么向这个端口写入数据就可以模拟按键了!用过QbASIC4.5的朋友可能知道,QB中有个OUT命令可以向指定端口写入数据,而INP函数可以读取指定端口的数据。那我们先看看如果用QB该怎么写代码: 假如你想模拟按下一个键,这个键的扫描码为&H50,那就这样 OUT &H64,&HD2 '把数据&HD2发送到&H64端口。这是一个KBC指令,表示将要向键盘写入数据 OUT &H60,&H50 '把扫描码&H50发送到&H60端口,表示模拟按下扫描码为&H50的这个键 那么要释放这个键呢?像这样,发送该键的断码: OUT &H64,&HD2 '把数据&HD2发送到&H64端口。这是一个KBC指令,表示将要向键盘写入数据 OUT &H60,(&H50 OR &H80) '把扫描码&H50与数据&H80进行或运算,可以把它的高位置1,得到断码,表示释放这个键 好了,现在的问题就是在VB中如何向端口写入数据了。因为在windows中,普通应用程序是无权操作端口的,于是我们就需要一个驱动程序来帮助我们实现。在这里我们可以使用一个组件WINIO来完成读写端口操作。什么是WINIO?WINIO是一个全免费的、无需注册的、含源程序的WINDOWS2000端口操作驱动程序组件(可以到/)。它不仅可以操作端口,还可以操作内存;不仅能在VB下用,还可以在DELPHI、VC等其它环境下使用,性能特别优异。下载该组件,解压缩后可以看到几个文件夹,其中Release文件夹下的3个文件就是我们需要的,这3个文件是WinIo.sys(用于win xp下的驱动程序),WINIO.VXD(用于win 98下的驱动程序),WinIo.dll(封装函数的动态链接库),我们只需要调用WinIo.dll中的函数,然后WinIo.dll就会安装并调用驱动程序来完成相应的功能。值得一提的是这个组件完全是绿色的,无需安装,你只需要把这3个文件复制到与你的程序相同的文件夹下就可以使用了。用法很简单,先用里面的InitializeWinIo函数安装驱动程序,然后就可以用GetPortVal来读取端口或者用SetPortVal来写入端口了。好,让我们来做一个驱动级的键盘模拟吧。先把winio的3个文件拷

VC模拟鼠标键盘输入

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,它可以实现模拟鼠标按下和放开等动作。

C#模拟键盘鼠标事件-SendKeys

C#模拟键盘鼠标事件-SendKeys

C#模拟键盘鼠标事件-SendKeys

2007-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}

C#实现以驱动方式(winio)模拟键盘鼠标(part1)

C#实现以驱动方式(winio)模拟键盘鼠标(part1)

C#实现以驱动方式(winio)模拟键盘鼠标(part1)

winio3.0下载:

winio在win7 64w位系统无法使用解决办法: /wangqian0realmagic/

我代码移植自作者yeye55 Delphi下利用WinIo模拟鼠标键盘详解

你可以看成是此文一个 c#实现,具体原理性问题,请参照此文(mouse.ini 文件可参考此文实现,我暂时没移植)

文件名

WinIo.cs

代码预览

using System;

using System.Text;

using System.Runtime.InteropServices;

using System.IO;

using System.Drawing;

namespace WinIoApi

public class WinIo

{

............

}

public class ScanKey

{

............

}

public class ScanKeyCode

{

.........

}

具体实现

public class WinIo

{

public const int KBC_KEY_CMD = 0x64;

public const int KBC_KEY_DATA = 0x60;

public const int KEY_CMD_DATA = 0xD2;

public const int MOUSE_CMD_DATA = 0xD3;

public const int SM_CXSCREEN=0;

public const int SM_CYSCREEN=1;

利用VisualC#编程模拟鼠标操作

利用VisualC#编程模拟鼠标操作

 有时,我们需在我们的程序中模拟⿏标的移动、点击等动作。——⽐如,⼀个再现⽤户操作的宏,或者⼀个演⽰操作⽅法的Demo程序。那么,我们在.net中如何实现呢?

.Net并没有提供改变⿏标指针位置、模拟点击操作的函数;但是Windows API提供了。其中⼀个是:

[DllImport("user32.dll")]

static extern bool SetCursorPos(int X, int Y);

该函数可以改变⿏标指针的位置。其中X,Y是相对于屏幕左上⾓的绝对位置。

另⼀个函数是:

[DllImport("user32.dll")]

static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);

这个函数不仅可以设置⿏标指针绝对的位置,⽽且可以以相对坐标来设置。另外,该函数还可以模拟⿏标左右键点击、⿏标滚轮操作等。其中的MouseEventFlag是⼀个基于uint类型的枚举,定义如下:

[Flags]

enum MouseEventFlag : uint

{

Move = 0x0001,

LeftDown = 0x0002,

LeftUp = 0x0004,

RightDown = 0x0008,

RightUp = 0x0010,

MiddleDown = 0x0020,

MiddleUp = 0x0040,

XDown = 0x0080,

XUp = 0x0100,

c#模拟鼠标键盘操作

c#模拟鼠标键盘操作

c#模拟⿏标键盘操作 c#模拟⿏标键盘操作收藏

⼀个简单的模拟键盘⿏标操作的类,扩充 VirtualKeys 枚举就可以了,或者直接写!

using System;

using System.Runtime.InteropServices;

using System.Text;

class Keyboard

{

const uint KEYEVENTF_EXTENDEDKEY = 0x1;

const uint KEYEVENTF_KEYUP = 0x2;

[DllImport("user32.dll")]

static extern short GetKeyState(int nVirtKey);

[DllImport("user32.dll")]

static extern void keybd_event(

byte bVk,

byte bScan,

uint dwFlags,

uint dwExtraInfo

);

public enum VirtualKeys: byte

{

VK_NUMLOCK = 0x90, //数字锁定键

VK_SCROLL = 0x91, //滚动锁定

VK_CAPITAL = 0x14, //⼤⼩写锁定

VK_A = 62

}

public static bool GetState(VirtualKeys Key)

{

return (GetKeyState((int)Key)==1);

}

public static void SetState(VirtualKeys Key, bool State)

VC6讲座_键盘与鼠标编程

VC6讲座_键盘与鼠标编程

VC6讲座(十八)

处理键盘和鼠标事件

上一讲中我们学习了在MFC程序中使用定时器的方法,并成功地为Schedule添加了报警功能,现在的Schedule已具备了我们在第四讲中提出的基本功能,但是它使用起来仍然不太方便,添加、编辑和删除事件条目的操作都只能通过选取菜单中相应的命令或工具栏上相应的按钮来进行,Schedule还不能接受通过键盘输入的命令,对鼠标的支持也不够强,因此在本讲中,我准备介绍一下处理键盘和鼠标事件的方法,为Schedule添加相应的消息处理函数,并设计一个弹出式菜单,让它作为Schedule的关联菜单。

添加处理键盘输入事件的函数

按照Windows程序设计的基本要求,一个WIN32应用程序应该能够处理来自键盘的用户输入,这些键盘输入将以消息的形式被发送到应用程序的窗口处理函数中。在设计MFC 程序时,我们不用直接编写窗口处理函数,但需要利用ClassWizard来添加相应的消息处理函数。

现在让我们调出ClassWizard,选中CScheduleView类,准备把处理键盘输入的函数放在视类中,不过此时可以发现在Messages列表框中列出了多种与键盘输入有关的消息,例如WM_CHAR、WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN和WM_SYSKEYUP等等,面对这么多的消息,我们应该处理哪一条呢?

上述几种消息可以分成两类,一类被称为按键消息(Keystroke Messages),即当用户按下和松开某个键时拥有输入焦点的程序收到的消息,包括有WM_KEYDOWN、WM_KEYUP等四种,它们通常被用来处理键盘命令,另一类被称为字符消息(Character Messages),窗口处理函数在接收到第一类按键消息后,一般都要调用TranslateMessage()函数,该函数检查按键是否对应着一个ASCII字符,如果是的话,就额外放置一条字符消息(即

【初学VC讲稿】第3篇:鼠标和键盘消息简单示例

【初学VC讲稿】第3篇:鼠标和键盘消息简单示例

通过前三篇我们简单了解了Windows和MFC程序的框架以及它们的消息响应与处理,都是我们手工打造的,今天我们借助AppWizard和ClassWizard生成一个应用程序,并通过该程序简单了解一下鼠标和键盘消息的简单处理.我们今天先从程序入手,应用程序建立步骤:【1】打开[新建],选择[工程]标签,填入工程名"MouseKey",确定。【2】在MFC AppWizard-Step 1中选择"单文档应用程序"。【3】其它选择默认,可选择[完成].这时,我们利用AppWizard产生的应用程序的基本框架已经产生了,我们可以编译运行一下看看,界面还算丰富吧!下面我们让ClassWizard帮我们做一些事情:【4】打开[查看],选择[建立类向导...Ctrl+W],选择[Message Maps]标签,在[Class name]下拉框中选择"CMouseKeyView",在[Messages]列表框中选择WM_LBUTTONDOWN然后,分别按下[Add Function]和[Edit Code]按钮。好了,我们已经为鼠标左键按下的消息WM_LBUTTONDOWN添加了响应函数OnLButtonDown():void CMouseKeyView::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultCView::OnLButtonDown(nFlags, point);}下面我们在其中加入我们自己的代码:void CMouseKeyView::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultCString str;str.Format("鼠标按下位置:x=%d,y=%d",point.x,point.y);AfxMessageBox(str);CView::OnLButtonDown(nFlags, point);}好了,大家再运行一下,并在客户区按下鼠标左键,看一看是否弹出消息框并显示出鼠标按下的位置呢?【5】仿照第4步,我们再添加键盘消息WM_CHAR响应函数OnChar():打开[查看],选择[建立类向导...Ctrl+W],选择[Message Maps]标签,在[Class name]下拉框中选择"CMouseKeyView",在[Messages]列表框中选择WM_CHAR然后分别按下[Add Function]和[Edit Code]按钮,添加完成:void CMouseKeyView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {// TODO: Add your message handler code here and/or call defaultCView::OnChar(nChar, nRepCnt, nFlags);}下面加入我们自己的代码:(1)//在试图类中添加两个变量class CMouseKeyView : public CView{..........................public:int m_nLine;//记录行CString m_str;//记录输入字符串..........................};(2)//在试图类的构造函数中初始化CMouseKeyView::CMouseKeyView(){// TODO: add construction code herethis->m_nLine = 0;}(3)在键盘消息的响应函数OnChar()中加入代码void CMouseKeyView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);if(nChar == VK_RETURN){this->m_str.Empty();this->m_nLine+=20;}else{this->m_str+=nChar;}dc.TextO

vc模拟键盘鼠标命令

vc模拟键盘鼠标命令

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 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 键

C#模拟鼠标键盘动作

C#模拟鼠标键盘动作

C#模拟鼠标键盘动作

在实际应用中,有时需要程序模拟鼠标点击或键盘按键操作,代替某些程序既定的人工操作,这样不但省时省力,效率较高,而且可以进行一些人力很难持续完成的工作。因为人是血肉之躯,人有思考的能力,但是人是会疲劳的,而电脑不会,只要有足够的资源和性能稳定的硬件设备。

模拟键盘动作

SendKeys.Send 方法

向活动应用程序发送击键。

命名空间:System.Windows.Forms

程序集:System.Windows.Forms(在System.Windows.Forms.dll 中)

方法签名:public static void Send(string keys)

参数

keys

类型:System.String

要发送的击键字符串。

备注:

每个键都由一个或多个字符表示。要指定单个键盘字符,请使用该字符本身。例如,要表示字母 A,请将字符串“A”传递给方法。要表示多个字符,请将各个附加字符追加到它之前的字符的后面。要表示字母 A、B 和 C,请将参数指定为“ABC”。

加号 (+)、插入符号 (^)、百分号 (%)、波形符 (~) 以及圆括号 () 对SendKeys具有特殊含义。要指定这些字符中的某个字符,请将其放在大括号 ({}) 内。例如,要指定加号,请使用“{+}”。要指定大括号字符,请使用“{{}”和“{}}”。中括号 ([ ]) 对SendKeys没有特殊含义,但必须将它们放在大括号内。在其他应用程序中,中括号具有特殊含义,此含义可能会在发生动态数据交换 (DDE) 时起重要作用。

C语言人机交互键盘输入和鼠标事件处理

C语言人机交互键盘输入和鼠标事件处理

C语言人机交互键盘输入和鼠标事件处理

C语言人机交互:键盘输入和鼠标事件处理

C语言是一种广泛应用的编程语言,它可以与用户进行人机交互。

通过键盘输入和鼠标事件处理,我们可以实现用户与计算机之间的有

效沟通和交流。本文将详细介绍C语言中的人机交互方法,包括键盘

输入的处理和鼠标事件的处理。

一、键盘输入的处理

1. 单个字符的输入

在C语言中,我们可以使用`getchar()`来获取用户输入的单个字符。它会等待用户输入,并返回输入的字符。下面是一个简单的例子:```c

#include <stdio.h>

int main() {

char c;

printf("请输入一个字符:");

c = getchar();

printf("您输入的字符是:%c\n", c);

return 0;

}

```

2. 字符串的输入

如果需要获取用户输入的字符串,可以使用`gets()`函数。该函数可以获取用户输入的一行字符串,并存储在指定的字符数组中。下面是一个示例:

```c

#include <stdio.h>

int main() {

char str[100];

printf("请输入一个字符串:");

gets(str);

printf("您输入的字符串是:%s\n", str);

return 0;

}

```

需要注意的是,`gets()`函数存在安全性问题,建议使用`fgets()`函数来代替。`fgets()`函数可以指定缓冲区的大小,避免溢出。

二、鼠标事件的处理

在C语言中,基于控制台的鼠标事件处理相对复杂。我们可以使用Windows API来实现控制台窗口中的鼠标事件响应。下面是一个示例,演示了如何处理鼠标的移动和点击事件:

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

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

相关文档
最新文档