2010-12-10 12 views
1

グローバルにAlt + Shift + Sをインターセプトするアプリケーションを作成する必要があります。C#でグローバルホットキーを実装する方法は?

namespace Hotkeydll 
{ 
    public class MyHotKey 
    { 
     public static void setHooks() 
     { 
      KeyboardHookProcedure = new HookProc(KeyboardHookProc); 
      hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); 
     } 

     private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) 
     { 
      //write something into file 
     } 


    } 
} 

その後、私は、このDLLをロードし、フックを設定するプログラムを作成しました::

using Hotkeydll; 
namespace IWFHotkeyStarter 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MyHotKey.setHooks(); 
     } 
    } 
} 

今問題があることである私が、私はグローバルフックを設定DLLを作成したのは何

ホットキーは機能しません。

DLLがメモリに永久にロードされていないようです。私はファイルシステムからdllファイルを削除することができますが表示されます。

私が間違っていることをアドバイスしてください。

別の方法を使用する必要がありますか?

ありがとうございます。

+0

それはだ@Paedow 'SetWindowsHookEx' – SwDevMan81

+1

のためのようなあなたのPInvokeコードを見て何これはhttp://www.codeproject.com/KB/cs/globalhook.aspx – fardjad

答えて

1

Main()メソッドはフックを設定し、すぐにプログラムを終了して終了します。さらに、フックコールバックを行うにはメッセージループが必要です。これにはWindowsフォームまたはWPFアプリケーションが必要です。フックの代わりに実際のホットキーを使用することもオプションになります。例ではthis threadをチェックし、C#はページのさらに下にあります。

0

通常、キーボードのフックはグローバルホットキーを取得する正しい方法ではありません。

できるだけRegisterHotkeyを使用してください。

+0

笑、that's C++やC#ではない – Paedow

+0

役に立つかもしれませんWindows API。フィッティングp/invokeメソッドを使用する必要がありますが、それは難しくありません。 – CodesInChaos

+0

それは私がこれほど良くはないことを私は学んだことがないので – Paedow

関連する問題