我最近使用 Visual Studio 2010 在 Visual C# .NET 2010 中作为 Windows 窗体应用程序制作了一个程序。该程序通过 user32.dll 函数“RegisterHotkey”使用全局热键。一切正常。当按下注册的热键时(例如),我能够显示一个 MessageBox。然后,今天,在 Visual Studio 中出现一些奇怪的错误(与 Hotkey 无关)(实际上它只是一个未加载的图像)之后,RegisterHotkey 功能不再起作用。
我没有更改热键代码中的任何内容。
当我在 Visual Studio 中调试时,我没有任何异常。通过断点,我发现代码在 RegisterHotkey 函数处停止。当我从项目的“调试”文件夹中执行 .exe 文件时,程序显示一个错误,指出“在“user32”DLL 中找不到“入口点“RegisterHotkey”。
这很奇怪,因为它一直有效。
为了检查我的项目或代码是否是原因,我创建了一个新的 Windows 窗体应用程序并输入了代码:
using System.Runtime.InteropServices;
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int RegisterHotkey(IntPtr Hwnd, int ID, int Modifiers, int Key);
[DllImport("kernel32", EntryPoint = "GlobalAddAtomA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern short GlobalAddAtom(string IDString);
private void Form1_Load(object sender, EventArgs e)
{
int atomid = GlobalAddAtom("hallo");
RegisterHotkey(this.Handle, atomid, 0, (int)Keys.A);
}
}
}
这产生了同样的错误。尝试调用 RegisterHotkey 函数时发生错误。这次我尝试输入尽可能少的代码。
该表单没有控件,它应该在其 Load 事件中注册一个热键。
我的问题是:谁能告诉我为什么突然找不到RegisterHotkey?我在哪里犯错了吗?我该怎么做才能让它再次工作?
我尝试导入“user32.dll”而不是“user32”,但除了错误消息中的文本外,它没有改变任何内容。在那里,“user32”被“user32.dll”取代。
编辑:我不知道它是否相关,但我使用 Windows 7 Professional 64 位版本和 .NET 框架 4.0(不是客户端配置文件)