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

andy1020tc 2011-11-18 01:51:22
看清楚 是wpf的示例代码 应该我之前得到一些代码 但是我放到我的wpf程序上去
键盘钩子句柄的值始终是0
不知道为什么
钩子始终没有安装成功 但是在winform里测试热键都屏蔽了 除了ALT+F4
所以 希望给我的是wpf的成功示例代码
...全文
261 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy1020tc 2011-11-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jshi123 的回复:]

C# code

using System;
using System.Windows;
using System.Runtime.InteropServices;

namespace WpfApplication1
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public……
[/Quote]
大哥 真是太崇拜你了 我刚去测试了 直接就能用
你去回复我另外一个呗 把那个分子也给你
另外 可以加下我QQ不 有什么WPF的问题 可以问问你 嘿嘿
QQ:25847278
andy1020tc 2011-11-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jshi123 的回复:]

C# code

using System;
using System.Windows;
using System.Runtime.InteropServices;

namespace WpfApplication1
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public……
[/Quote]
把这放到APP去以后呢 怎么操作 怎么调用 我研究WPF没多久 很多还不会
希望能解释详细些
jshi123 2011-11-19
  • 打赏
  • 举报
回复

using System;
using System.Windows;
using System.Runtime.InteropServices;

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

private delegate int LowLevelKeyboardProcDelegate(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);

[DllImport("user32.dll")]
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProcDelegate lpfn, IntPtr hMod, int dwThreadId);

[DllImport("user32.dll")]
private static extern bool UnhookWindowsHookEx(IntPtr hHook);

[DllImport("user32.dll")]
private static extern int CallNextHookEx(int hHook, int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);

[DllImport("kernel32.dll")]
private static extern IntPtr GetModuleHandle(IntPtr path);

private IntPtr hHook;
LowLevelKeyboardProcDelegate hookProc; // prevent gc
const int WH_KEYBOARD_LL = 13;

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

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

private static int LowLevelKeyboardProc(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam)
{
if (nCode >= 0)
switch (wParam)
{
case 256: // WM_KEYDOWN
case 257: // WM_KEYUP
case 260: // WM_SYSKEYDOWN
case 261: // 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
{
return 1;
}
break;
}
return CallNextHookEx(0, nCode, wParam, ref lParam);
}
}
}
fallincloud 2011-11-18
  • 打赏
  • 举报
回复
额。。

protected override void OnKeyDown(KeyEventArgs e)
{
if (Keyboard.Modifiers == ModifierKeys.Alt || Keyboard.Modifiers==ModifierKeys.Control ||
Keyboard.Modifiers== ModifierKeys.Windows|| Keyboard.Modifiers==ModifierKeys.Shift
)
{
e.Handled = true;
}
else
{
base.OnKeyDown(e);
}
}
Just4life 2011-11-18
  • 打赏
  • 举报
回复
你屏蔽热键,完全可以在代码里面来写么, 不是有一个函数叫ProcessCmdKey的么?重载他,自己屏蔽热键

你不是想在XAML文件里面来做这些吧?
ohkuy 2011-11-18
  • 打赏
  • 举报
回复
wpf的机制还不太懂,只能帮顶一下
andy1020tc 2011-11-18
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20111117/13/9de81c34-47fb-47ec-b61f-6e5c7cd2d277.html
这个也是我的帖子 要是有实现了的 两边都回复下 采用的话 一下就是一两百分哦。。。。
andy1020tc 2011-11-18
  • 打赏
  • 举报
回复
头都大了我 搞了两天了 这问题
熙风 2011-11-18
  • 打赏
  • 举报
回复
WPF没搞过。。

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧