当前位置: 首页 > news >正文

VSTO幻灯片退出播放(C#模拟键盘鼠标的事件)

今天遇到了个问题,幻灯片放映到某一页时需要退出播放,没有找到对应的方法,所以想到了直接通过ESC键可以退出,所以模拟执行了一下ESC键,发现真的可以。在此记录一下。

C# 模拟键盘鼠标的事件整理

  • 1、模拟键盘
  • 2、模拟鼠标
  • 3、例子
    • 3.1、幻灯片放映时实现退出播放
    • 3.2、幻灯片放映时实现跳过播放
    • 3.3、其他例子

1、模拟键盘

System.Windows.Forms.SendKeys

以下是 SendKeys 的一些特殊键代码表。

代码功能
INS 或 INSERT{INSERT} 或 {INS}模拟 Insert 键
DEL 或 DELETE{DELETE} 或 {DEL}模拟 删除 键
ESC{ESC}模拟 退出 键
ENTER{ENTER} 或 ~模拟 回车 键
END{END}模拟 End 键
BACKSPACE{BACKSPACE}、{BS} 或 {BKSP}模拟 退格 键
HOME{HOME}模拟 Home 键
PAGE UP{PGUP}模拟 Page Up 键
PAGE DOWN{PGDN}模拟 Page Down 键
TAB{TAB}模拟 Tab 键
UP ARROW ⬆{UP}模拟 上箭头 键
DOWN ARROW⬇{DOWN}模拟 下箭头 键
LEFT ARROW⬅{LEFT}模拟 左箭头 键
RIGHT ARROW➡{RIGHT}模拟 右箭头 键
PRTSC{PRTSC}模拟 打印屏幕 键
BREAK{BREAK}模拟 Break 键
HELP{HELP}模拟 帮助 键
NUM LOCK{NUMLOCK}数字锁定(注意:可能在某些系统上不起作用)
SCROLL LOCK{SCROLLLOCK}滚动锁定(注意:可能在某些系统上不起作用)
CAPS LOCK{CAPSLOCK}大小写锁定(注意:可能在某些系统上不起作用)
F1{F1}模拟 F1 功能键
F2{F2}模拟 F2 功能键
F3{F3}模拟 F3 功能键
F4{F4}模拟 F4 功能键
F5{F5}模拟 F5 功能键
F6{F6}模拟 F6 功能键
F7{F7}模拟 F7 功能键
F8{F8}模拟 F8 功能键
F9{F9}模拟 F9 功能键
F10{F10}模拟 F10 功能键
F11{F11}模拟 F11 功能键
F12{F12}模拟 F12 功能键
+{ADD}数字键盘加号
-{SUBTRACT}数字键盘减号
*{MULTIPLY}数字键盘乘号
/{DIVIDE}数字键盘除号

{CTRL}, {SHIFT}, {ALT} - 这些可以与其它键组合使用,例如 ^{C} =(Ctrl+C),+{TAB} =(Shift+Tab)
若要指定与 SHIFT、CTRL 和 ALT 键的任意组合一起使用的键,请在这些键代码之前加上以下一个或多个代码:

代码
SHIFT+
CTRL^
ALT%

方法的说明:
public class SendKeys : System.Object
System.Windows.Forms 的成员

  • 提供将键击发送到应用程序的方法。
    public static void Send ( System.String keys )
    System.Windows.Forms.SendKeys 的成员
  • 向活动应用程序发送击键。
    public static void Sleep ( System.TimeSpan timeout )
    System.Threading.Thread 的成员
  • 将当前线程阻塞指定的时间。
    public static void Flush ( )
    System.Windows.Forms.SendKeys 的成员

2、模拟鼠标

一个简单的模拟键盘鼠标操作的类,扩充 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){if (State != GetState(Key)){keybd_event((byte)Key,0x45,KEYEVENTF_EXTENDEDKEY | 0,0);keybd_event((byte)Key,0x45,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0);}}
}

示例:

  • 模拟操作
Keyboard.SetState(VirtualKeys.VK_CAPITAL,!Keyboard.GetState(VirtualKeys.VK_CAPITAL));
  • 得到键盘状态
Keyboard.GetState(VirtualKeys.VK_CAPITAL)
  • 十进制值 标识符 IBM兼容键盘

1    VK_LBUTTON   鼠标左键
2    VK_RBUTTON   鼠标右键
3    VK_CANCEL   Ctrl+Break(通常不需要处理)
4    VK_MBUTTON   鼠标中键
8    VK_BACK    Backspace
9    VK_TAB     Tab
12   VK_CLEAR    Num Lock关闭时的数字键盘5
13   VK_RETURN   Enter(或者另一个)
16   VK_SHIFT    Shift(或者另一个)
17   VK_CONTROL   Ctrl(或者另一个)
18   VK_MENU    Alt(或者另一个)
19   VK_PAUSE    Pause
20   VK_CAPITAL   Caps Lock
27   VK_ESCAPE   Esc
32   VK_SPACE    Spacebar
33   VK_PRIOR    Page Up
34   VK_NEXT    Page Down
35   VK_END     End
36   VK_HOME    Home
37    VK_LEFT    左箭头
38   VK_UP     上箭头
39   VK_RIGHT   右箭头
40   VK_DOWN    下箭头
41   VK_SELECT   可选
42   VK_PRINT   可选
43   VK_EXECUTE  可选
44   VK_SNAPSHOT  Print Screen
45   VK_INSERT   Insert
46   VK_DELETE  Delete
47   VK_HELP   可选
48~57  无      主键盘上的0~9
65~90  无      A~Z
96~105  VK_NUMPAD0~VK_NUMPAD9   Num Lock打开时数字键盘上的0~9
106   VK_NULTIPLY         数字键盘上的*
107   VK_ADD           数字键盘上的+
108   VK_SEPARATOR        可选
109   VK_SUBTRACT         数字键盘上的-
110   VK_DECIMAL         数字键盘上的.
111   VK_DIVIDE          数字键盘上的/
112~135 VK_F1~VK_F24        功能键F1~F24
144   VK_NUMLOCK         Num Lock
145   VK_SCROLL          Scroll Lock

*/

  • 函数声明:
    private readonly int MOUSEEVENTF_LEFTDOWN = 0x2;
    private readonly int MOUSEEVENTF_LEFTUP = 0x4;
    [DllImport(“user32”)]
    public static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);

  • 调用方法:
    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分别是你要点击的点的横坐标和纵坐标
    关于这两个函数的详细说明,可以查看MSDN Library或者Windows的Platform SDK文档。

3、例子

3.1、幻灯片放映时实现退出播放

//退出放映
SendKeys.Send("{ESC}");

3.2、幻灯片放映时实现跳过播放

//跳过放映,播放下一页SendKeys.Send("{ENTER}");

3.3、其他例子

// 模拟按下 Enter 键
SendKeys.Send("{ENTER}");// 模拟按下 Tab 键
SendKeys.Send("{TAB}");// 模拟按下 Ctrl+C(复制)
SendKeys.Send("^{C}");// 模拟按下 Shift+Tab(反向 Tab)
SendKeys.Send("+{TAB}");
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}");
}

相关文章:

  • 股指期货怎样选择换月时点?
  • [GESP202409 二级] 小杨的 N 字矩阵 题解
  • 学习笔记十五——rust柯里化,看不懂 `fn add(x) -> impl Fn(y)` 的同学点进来!
  • Oracle--安装Oracle Database23ai Free
  • .net core 项目快速接入Coze智能体-开箱即用-全局说明
  • 第二十四天 - 分布式任务队列 - Celery高级应用 - 练习:分布式监控任务系统
  • Linux 入门指令(2)
  • 数据结构与算法[零基础]---6.算法概况
  • 定制化突围:遨游防爆手机的差异化竞争策略
  • 单细胞分析读取处理大型数十万细胞的数据集的优化
  • Linux,redis数据库安装使用
  • ASP.NET Core Web API 配置系统集成
  • GPIO输出模式
  • 第七章--查找
  • Qt 核心库总结
  • C++11智能指针深度解析:在Visual Studio中高效管理内存
  • OpenHarmony Camera开发指导(五):相机预览功能(ArkTS)
  • list容器介绍及模拟实现和与vector比较
  • 应用篇02-镜头标定(上)
  • AI agents系列之AI工作流和AI智能体对比
  • AI赋能科学红毯,机器人与科学家在虚实之间叩问“科学精神”
  • 吉利汽车一季度净利润大增264%,称整合极氪后实现整体效益超5%
  • 龚正市长调研闵行区,更加奋发有为地稳增长促转型,久久为功增强发展后劲
  • 美F-35险被胡塞武装击中,损失增大让行动成“烂尾仗”
  • 国台办:台湾自古属于中国,历史经纬清晰,法理事实清楚
  • 首个偏头痛急性治疗药物可缓解前期症状