wpf中的全局键

摘要:
wpf中的全局键和表单之间存在一些差异,因此请在此处记录。如果你有用,你可以试试!代码已完成!!!!!!在WindowsXP中测试!!!!!!

在wpf中的全局键和form中有些差异,所以在这里记录一下,有用到得朋友可以试试!

首先注册APi

代码

1  [DllImport("user32.dll")]
2  public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint control, System.Windows.Forms.Keys keys);
3  [DllImport("user32.dll")]
4  public static extern bool UnregisterHotKey(IntPtr hWnd, int id);

首先在这里事件里注册一个hotkey 并添加windows消息拦截,重点在于在wpf中必须使用

PresentationSource.FromVisual(this) as HwndSource;

来获取source。请注意。

代码

搞定收工!!!!!!

window xp中测试过!!!!!!

 1    protected override void OnSourceInitialized(EventArgs e)
 2         {
 3             base.OnSourceInitialized(e);
 4 
 5             IntPtr handle = new WindowInteropHelper(this).Handle;
 6 
 7             //注册快捷键 0为失败
 8             bool isHotKeySuccess = false;
 9 
10             isHotKeySuccess = RegisterHotKey(handle, MY_HOTKEYID, (UInt32)Hotkey.KeyFlags.Win, System.Windows.Forms.Keys.W);
11 
12             //设置 windows消息拦截
13             //HwndSource.FromHwnd(handle).AddHook(new HwndSourceHook(WndProc));
14 
15             HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
16 
17             source.AddHook(WndProc);
18 
19             SetWindowLong(handle, -16, 0);
20         }之后就是要处理你自己的方法就可以了,呵呵!!!代码 /// <summary>
        /// Windows消息拦截
        /// </summary>
        /// <param name="hwnd"></param>
        /// <param name="msg"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <param name="handle"></param>
        /// <returns></returns>
        IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handle)
        {
            switch (msg)
            {
                case MY_HOTKEYID:
                    Executes.WindowShow(TabTypes.None);
                    break;
            }
            return IntPtr.Zero;
        }

免责声明:文章转载自《wpf中的全局键》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇unittest自定义封装与应用[转]vim常用命令汇总下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF布局(2)控件拖动

从Window继承的控件窗体,实现窗体拖动时可以简单的调用DragMove方法。但是对于自定义控件可以采取响应MouseButtonDown,MouseMove,MouseButtonUp的方法来实现控件的拖动。首先定义两个位置变量:    Point pOld = new Point();    Point pNew = new Point(); 1、M...

[WPF](小结3)DataGridInTreeView树嵌表

树嵌表格,也算是创新了,展开树时Show出表格,好象不太习惯,WPF就是在这方面比较强大,啥组合都弄得出来,好了操作步骤: 第一:选构建题目类,再建一个选项类,题目类集合中的每个项包含一个选项类集合,即数组嵌套数组,C#语句如下: (为方便看清语句,类直接写在主程序中) C#代码如下:usingSystem; usingSystem.Collecti...

XAML

XAML定义   XAML是一种相对简单、通用的声明式编程语言,它适合于构建和初始化.NET对象。   XAML仅仅是一种使用.NET API的方式,把它与HTML、可伸缩向量图形(SVG)或其他特定领域的格式或语言作比较是完全错误的。XAML由一些规则(告诉解析器和编译器如何处 理XML)和一些关键字组成,但它自己没有任何有意义的元素。因此,如果在没有...

WPF中如何为ItemsControl添加ScrollViewer并显示ScrollBar

    今天在开发的过程中突然碰到了一个问题,本来的意图是想当ItemsControl中加载的Item达到一定数量时,会出现ScrollViewer并出现垂直的滚动条,但是实际上并不能够达成目标,对于熟手来说这个问题非常简单,但是如果不了解WPF的模板的原理,可能并不清楚这些,这里举出一个例子来论证。 <Window x: xmln...

Wpf 自定义控件(1)

1. 新建一个wpf工程,在工程下面新建  一个文件夹themes,在themes下新建两个资源字典文件generic.xaml和PrettySeekBar.xaml generic.xaml   <ResourceDictionary xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/pr...

wpf 制作播放视频的屏保程序、而且能分屏显示

     这个程序用到了WPF里  “visual_Brush”(主要是为了实现分屏显示) , “UserControl” ,这两个知识点;   在屏保状态下播放指定文件夹下的视频,而且能分屏显示;   把编译好的屏保程序(原本是.exe)改名为.SCR 放到C:WindosSystem32下    现在就可以设置为屏保了:譬如win7系统的 在桌面属性→...