2010-12-10 7 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

은 무엇을위한 같이 당신의 PInvoke 코드를 보면 '그건 @Paedow이 아닌 C# – SwDevMan81

+1

을 SetWindowsHookEx' Windows API. 피팅 p/invoke 메서드를 사용해야하지만 어렵지 않습니다. – fardjad

답변

1

Main() 메서드는 후크를 설정 한 다음 즉시 종료하고 종료합니다. 또한 후크 콜백 작업을 수행하려면 메시지 루프가 필요합니다. Windows Forms 또는 WPF 앱이 필요합니다. 후크 대신 실제 핫 키를 사용하면 옵션이됩니다. 예를 들어 this thread을 확인하면 C#이 페이지 아래쪽에 있습니다.

0

키보드 훅은 일반적으로 글로벌 단축키를 가져 오는 올바른 방법이 아닙니다.

가능한 경우 RegisterHotkey을 사용하십시오.

+0

롤 도움이 될 ++ 및 수 – Paedow

+0

C 것은 이것이, http://www.codeproject.com/KB/cs/globalhook.aspx – CodesInChaos

+0

나는 배운 적이 없기 때문에 나는 이것에별로 좋지 않은 것을 justz한다. – Paedow

관련 문제