我写了个winform程序,在后台运行,现在需要一个全局热键,也可以说是监视系统的粘贴动作,即检测用户是否按了ctrl+v.在网上找了些资料,说是调用api,研究了半天也没个头绪,现在我要解决的问题是,监视粘贴动作需要导入那几个dll?比如按下ctrl+v后我要调用change(),该怎么写啊?高手们帮忙啊!
解决方案 »
- datagrid数据绑定的问题!!!
- 把GV的内容存入数据库,给代码就送100分.
- 在三层架构中,用户输入验证是否合法及简单的运算(比如单价*数量=金额)是放在UI层还是业务层?谢谢.
- 请教各位达人:如何实现DataGridView中单元格编辑结束后安回车时候,横向移动单元格呢
- 什么叫在线程的外部结束线程的运行?
- asp.net怎么动态设置控制在网页上的位置
- 有关dataGrid绑定dataView的问题
- 如何实现记录超连接的点击次数,并写入数据库?
- ORM中所说的主实体、子实体翻译成英文怎么拼写
- C#怎么没有stringGrid控件呀,对表格怎么操作呢?
- C# 绘图问题
- 求助C#开发wince下的语音识别.
private static extern bool BitBlt(参数);
/// 向指定内存地址写入数据
/// </summary>
/// <param name="hProcess">进程句柄</param>
/// <param name="lpBaseAddress">需要写入的地址</param>
/// <param name="lpBuffer">将要写入的数据</param>
/// <param name="nSize">写入长度</param>
/// <param name="lpNumberOfBytesWritten">实际写入长度</param>
/// <returns></returns>
[DllImport("Kernel32.dll")]
private static extern bool WriteProcessMemory(IntPtr hProcess, int lpBaseAddress, int lpBuffer, int nSize, int lpNumberOfBytesWritten);
当我在任何界面下按下Ctrl+V时,会调用我的一段代码伪代码//调用API
if(Ctrl && V )
{
//我的代码
}
.NET 你的先建个类库项目 使用APISetWindowsHookEx
基本就是调用api和写一个回调函数api 就几个dll
内核有关
Kernel32.dll
绘图有关
Gdi32.dll
和..有关
user32.dll
还有几个不常用的
在system32下
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); RegisterHotKey(this.Handle, 100, 2, Keys.V);
} protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0312//这个是window消息定义的注册的热键消息
&& (int)m.WParam == 100) //如果是我们注册的那个热键
{
MessageBox.Show("你按了ctrl+v");
} base.WndProc(ref m);
} protected override void OnClosing(CancelEventArgs e)
{
UnregisterHotKey(this.Handle, 100); base.OnClosing(e);
} [DllImport("user32.dll")]
static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, Keys vk); [DllImport("user32")]
static extern bool UnregisterHotKey(IntPtr hWnd, int id);
}
http://topic.csdn.net/u/20090423/14/899352d5-9bf4-4bb2-8b46-d634ba0aec2b.html
C# code
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); RegisterHotKey(this.Handle, 100, 2, Keys.V);
} protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0312//这个是window消息定义的注册的热键消息
&& (int)m.WParam == 100) //如果是我们注册的那个热键
{
MessageBox.Show("你按了ctrl+v");
} base.WndProc(ref m);
} protected override void OnClosing(CancelEventArgs e)
{
UnregisterHotKey(this.Handle, 100); base.OnClosing(e);
} [DllImport("user32.dll")]
static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, Keys vk); [DllImport("user32")]
static extern bool UnregisterHotKey(IntPtr hWnd, int id);
}