如何调用API

happy_gaoxing 2009-04-23 09:40:28
我写了个winform程序,在后台运行,现在需要一个全局热键,也可以说是监视系统的粘贴动作,即检测用户是否按了ctrl+v.在网上找了些资料,说是调用api,研究了半天也没个头绪,现在我要解决的问题是,监视粘贴动作需要导入那几个dll?比如按下ctrl+v后我要调用change(),该怎么写啊?高手们帮忙啊!
...全文
565 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
null1 2009-04-27
  • 打赏
  • 举报
回复
http://blog.csdn.net/null1/archive/2009/03/03/3953155.aspx
you684 2009-04-26
  • 打赏
  • 举报
回复
同意楼上的观点:
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);
}

spmzfz 2009-04-24
  • 打赏
  • 举报
回复
C# 就是这个不喜欢,还要 Use vb6.0 中的DLL ,为什么自己不集成呢?

任何界面下按下Ctrl+V,看看下面的这个能不能作一下参考:
http://topic.csdn.net/u/20090423/14/899352d5-9bf4-4bb2-8b46-d634ba0aec2b.html
happy_gaoxing 2009-04-24
  • 打赏
  • 举报
回复
我还想保留系统的ctrl+v的粘贴功能,这能做得了吗?即,按下Ctrl+V后,先粘贴再调用系统的消息?
spmzfz 2009-04-24
  • 打赏
  • 举报
回复
Help you up!
格拉 2009-04-24
  • 打赏
  • 举报
回复
wujinjian2008n 2009-04-23
  • 打赏
  • 举报
回复
例如:

[DllImport("GDI32.DLL")]
private static extern bool BitBlt(参数);
happy_gaoxing 2009-04-23
  • 打赏
  • 举报
回复
谢谢,不过这样的话就阻止了粘贴动作,我是想监视粘贴,只要有粘贴动作就调用我自己的方法一次,该怎么写啊?
deyter 2009-04-23
  • 打赏
  • 举报
回复
用楼上注册热键的方法要好些,用全局钩子有点卡
hanjun1024 2009-04-23
  • 打赏
  • 举报
回复

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);
}
wartim 2009-04-23
  • 打赏
  • 举报
回复
用全局键盘钩子
基本就是调用api和写一个回调函数

api 就几个dll
内核有关
Kernel32.dll
绘图有关
Gdi32.dll
和..有关
user32.dll
还有几个不常用的
在system32下




walkghost 2009-04-23
  • 打赏
  • 举报
回复
是不是想禁止粘贴还是啥滴?
zgke 2009-04-23
  • 打赏
  • 举报
回复
使用全局键盘钩子..
.NET 你的先建个类库项目 使用API

SetWindowsHookEx
happy_gaoxing 2009-04-23
  • 打赏
  • 举报
回复
老大们啊,我的意思是
当我在任何界面下按下Ctrl+V时,会调用我的一段代码

伪代码

//调用API
if(Ctrl && V )
{
//我的代码
}
fenglaijun 2009-04-23
  • 打赏
  • 举报
回复
调用写内存的API函数

/// <summary>
/// 向指定内存地址写入数据
/// </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);

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧