WPF的屏蔽系统热键的示例代码

看清楚 是wpf的示例代码 应该我之前得到一些代码 但是我放到我的wpf程序上去
键盘钩子句柄的值始终是0
不知道为什么
钩子始终没有安装成功 但是在winform里测试热键都屏蔽了 除了ALT+F4
所以 希望给我的是wpf的成功示例代码

 

usingSystem;
usingSystem.Windows;
usingSystem.Runtime.InteropServices;

namespace WpfApplication1
{
   
/// <summary>
   
/// Interaction logic for App.xaml
   
/// </summary>
   
public partial classApp:Application
   
{
       
privatestruct KBDLLHOOKSTRUCT
       
{
           
publicint vkCode;
           
int scanCode;
           
publicint flags;
           
int time;
           
int dwExtraInfo;
       
}

       
privatedelegateintLowLevelKeyboardProcDelegate(int nCode,int wParam,ref KBDLLHOOKSTRUCT lParam);

       
[DllImport("user32.dll")]
       
privatestaticexternIntPtrSetWindowsHookEx(int idHook,LowLevelKeyboardProcDelegate lpfn,IntPtr hMod,int dwThreadId);

       
[DllImport("user32.dll")]
       
privatestaticexternboolUnhookWindowsHookEx(IntPtr hHook);

       
[DllImport("user32.dll")]
       
privatestaticexternintCallNextHookEx(int hHook,int nCode,int wParam,ref KBDLLHOOKSTRUCT lParam);

       
[DllImport("kernel32.dll")]
       
privatestaticexternIntPtrGetModuleHandle(IntPtr path);

       
privateIntPtr hHook;
       
LowLevelKeyboardProcDelegate hookProc;// prevent gc
       
constint WH_KEYBOARD_LL =13;

       
publicApp()
       
{
           
// hook keyboard
           
IntPtr hModule =GetModuleHandle(IntPtr.Zero);
            hookProc
=newLowLevelKeyboardProcDelegate(LowLevelKeyboardProc);
            hHook
=SetWindowsHookEx(WH_KEYBOARD_LL, hookProc, hModule,0);
           
if(hHook ==IntPtr.Zero)
           
{
               
MessageBox.Show("Failed to set hook, error = "+Marshal.GetLastWin32Error());
           
}
       
}

       
protectedoverridevoidOnExit(ExitEventArgs e)
       
{
           
UnhookWindowsHookEx(hHook);// release keyboard hook
           
base.OnExit(e);
       
}

       
privatestaticintLowLevelKeyboardProc(int nCode,int wParam,ref KBDLLHOOKSTRUCT lParam)
       
{
           
if(nCode >=0)
               
switch(wParam)
               
{
                   
case256:// WM_KEYDOWN
                   
case257:// WM_KEYUP
                   
case260:// WM_SYSKEYDOWN
                   
case261:// M_SYSKEYUP
                       
if(
                           
(lParam.vkCode ==0x09&& lParam.flags ==32)||// Alt+Tab
                           
(lParam.vkCode ==0x1b&& lParam.flags ==32)||// Alt+Esc
                           
(lParam.vkCode ==0x73&& lParam.flags ==32)||// Alt+F4
                           
(lParam.vkCode ==0x1b&& lParam.flags ==0)  ||// Ctrl+Esc
                           
(lParam.vkCode ==0x5b&& lParam.flags ==1)  ||// Left Windows Key
                           
(lParam.vkCode ==0x5c&& lParam.flags ==1))    // Right Windows Key
                       
{
                           
return1;
                       
}
                       
break;
               
}
           
returnCallNextHookEx(0, nCode, wParam,ref lParam);
       
}
   
}
}  

来自:http://www.itstrike.cn/Question/b30528db-1a7e-46b2-a582-d8264f09bfb2
posted @ 2011-11-21 09:49  ctou45  阅读(536)  评论(0编辑  收藏  举报