0

特定のことを実行するスレッドがあり、最後に F キーをグローバルホットキーとしてバインドすることになっています。これを機能させることができませんでした。何が間違っているのか、または RegisterHotKey がそうでない場合私のスレッドの機能原因?

[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, System.Windows.Input.ModifierKeys fsModifiers, Keys vk);

[DllImport("user32.dll", SetLastError = true)]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);

private const int WmHotKey = 0x0312;

private void onLoad()
{
   //RegisterHotKey(this.Handle, 0, System.Windows.Input.ModifierKeys.None, Keys.F); // This works
}

private void OnSeparateThread()
{
   // This gets called by a separate thread, in the full version of the code more stuff
   // happen here, which does get executed.
   RegisterHotKey(this.Handle, 0, System.Windows.Input.ModifierKeys.None, Keys.F); // Does not bind
}

protected override void WndProc(ref Message m)
{
   if (m.Msg == WmHotKey)
   {
      MessageBox.Show("Test me!");
   }
   base.WndProc( ref m );
}

編集:当然、これらの両方を同時にバインドすることはありません。一方は常にコメントアウトされています。

4

1 に答える 1

4

(元々はコメントですが、提起された質問に答えます):

MSDNから、RegisterHotKey

この関数は、ホットキーを別のスレッドによって作成されたウィンドウに関連付けることはできません。

だから、簡単な答えはノーです。

于 2012-06-08T14:31:56.850 に答える