最近、Visual Studio 2010 を使用して Visual C# .NET 2010 で Windows フォーム アプリケーションとしてプログラムを作成しました。このプログラムは、user32.dll 関数「RegisterHotkey」を通じてグローバル ホットキーを使用します。すべてがうまくいきました。登録されたホットキーが押されたときに MessageBox を表示することができました (たとえば)。その後、今日、Visual Studio で奇妙なエラー (ホットキーとは関係ありません) が発生した後 (実際には、ロードされていないイメージでした)、RegisterHotkey 関数が機能しなくなりました。
ホットキー コードは何も変更していません。
Visual Studio でデバッグすると、例外は発生しません。ブレークポイントを使用すると、コードが RegisterHotkey 関数で停止することがわかりました。プロジェクトの "debug" フォルダーから .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」の代わりに「user32.dll」をインポートしようとしましたが、エラー メッセージのテキスト以外は何も変更されませんでした。そこでは、「user32」が「user32.dll」に置き換えられました。
編集: 関連するかどうかはわかりませんが、Windows 7 Professional 64 ビット バージョンと .NET Framework 4.0 (クライアント プロファイルではない) を使用しています。