using ClassLibrary.Win32;
using System.Runtime.InteropServices;
//快捷键
[DllImport("user32.dll", EntryPoint = "keybd_event")]
public static extern void keybd_event(
byte bVk, //虚拟键值
byte bScan,// 一般为0
int dwFlags, //这里是整数类型 0 为按下,2为释放
int dwExtraInfo //这里是整数类型 一般情况下设成为0
);
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if ((msg.Msg == (int)WindowMessage.WM_KEYDOWN) || (msg.Msg == (int)WindowMessage.WM_SYSKEYDOWN))
{
switch (keyData)
{
case Keys .Enter:
keybd_event((byte)Keys.Tab, 0, 0, 0);
break;
case Keys.F2:
if (MessageBoxHelper.ShowQuestion("确定保存?") == DialogResult.Yes)
{
btnQuery_Click(null, null);
}
break;
default:
break;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
using System.Runtime.InteropServices;
//快捷键
[DllImport("user32.dll", EntryPoint = "keybd_event")]
public static extern void keybd_event(
byte bVk, //虚拟键值
byte bScan,// 一般为0
int dwFlags, //这里是整数类型 0 为按下,2为释放
int dwExtraInfo //这里是整数类型 一般情况下设成为0
);
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if ((msg.Msg == (int)WindowMessage.WM_KEYDOWN) || (msg.Msg == (int)WindowMessage.WM_SYSKEYDOWN))
{
switch (keyData)
{
case Keys .Enter:
keybd_event((byte)Keys.Tab, 0, 0, 0);
break;
case Keys.F2:
if (MessageBoxHelper.ShowQuestion("确定保存?") == DialogResult.Yes)
{
btnQuery_Click(null, null);
}
break;
default:
break;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
本文介绍如何使用C#和PInvoke技术调用Win32 API中的keybd_event函数来模拟键盘按键事件,例如实现快捷键功能。文章通过具体代码示例展示了如何模拟Enter和Tab键的按下与释放,以及如何响应F2键执行特定操作。
2060

被折叠的 条评论
为什么被折叠?



