相关疑难解决方法(0)

在没有找到模块的32位机器上,.NET 4.0中的SetWindowsHookEx失败了吗?

我在这个页面上发现了类似的问题,但我似乎无法弄清楚如何解释答案或弄清楚它们是否真的重复.

以下是我发现的可能重复项,并附有评论:

Hans Passant对最后一个删除答案的评论如下:

你在使用.NET 4.0吗?它的CLR改变了程序集的加载方式,不再有LoadLibrary调用,也没有模块句柄.使用GetEntryAssembly()代替另一种修复. - 汉斯帕斯特5月5日19:43

那么,这里的字是什么?你在使用.NET 4.0吗?您是否尝试使用LoadLibrary("user32.dll")来获取可用的DLL句柄? - Hans Passant 5月6日15:43

我很确定我不需要这样做,但显然我不是百分百肯定.如果我需要更改它,我留下的问题是,为什么它适用于64位操作系统,在编译时Any CPU,但在任何配置中都不适用于32位.

如果加载.NET程序集确实发生了一些变化,那么我没有得到类库的正确句柄,我有以下问题:

  • 有没有什么方法可以欺骗我做我想要的,而不必降级到.NET 3.5或将钩子库更改为不受管理?
  • 为什么它在64位操作系统上运行时有效,而在32位运行时无效?

背景

我在.NET 4.0中构建了一个程序,它使用带有WH_KEYBOARD_LL钩子类型的SetWindowsHookEx来捕获按键.这在我的64位Windows 7上运行良好,但在32位Windows 7上安装键盘挂钩时崩溃时出现"找不到模块".

这是我尝试过的:

  • 编译为x86,在64位操作系统上运行,崩溃时出现"找不到模块"
  • 编译x86,在32位操作系统上运行,崩溃
  • 编译任何CPU,在64位操作系统上运行,运行良好
  • 编译任何CPU,在32位操作系统上运行,崩溃
  • 切换到.NET 3.5并重复上述四种情况,它们都有效

我宁愿不将我的代码切换到.NET 3.5,因为我使用了一些类库来简化工作,而最新的代码只在.NET 4.0中.

如果需要,可以下载包含Visual Studio 2010项目的.ZIP文件,也可以粘贴以下两个文件.

要重新创建是否要沿着该路线前进:

  1. 创建一个新的控制台项目.NET 4.0
  2. 添加另一个类库项目,也就是.NET 4.0
  3. 从控制台程序项目添加对类库项目的引用
  4. 将下面的Program.cs内容粘贴到控制台项目中的Program.cs文件中
  5. 将下面的Hook.cs内容粘贴到类库项目中的文件中.您可以将其粘贴到Class1.cs默认文件中,或添加另一个文件.你不能把它放到控制台项目中

然后构建并运行,测试各种配置.

Program.cs中

using System;
using HookLib;

namespace HookTest
{
    class Program
    {
        static void Main() …
Run Code Online (Sandbox Code Playgroud)

64-bit 32-bit .net-4.0 .net-3.5 setwindowshookex

14
推荐指数
1
解决办法
5092
查看次数

在Windows XP中使用SetWindowsHookEx时出错,但在Windows 7中没有

我开发了一个使用全局键盘/鼠标钩子的应用程序.它在Windows 7中运行良好,但在Windows XP中运行不佳.

当我在Windows XP中调用SetWindowsHookEx时,我收到错误代码1428

int MouseLowLevel   = 14
int code = SetWindowsHookEx(MouseLowLevel,
                 MouseHookProc,
                 IntPtr.Zero,
                 0);

private IntPtr MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam) {}
Run Code Online (Sandbox Code Playgroud)

c# hook winapi keyboard-hook setwindowshookex

5
推荐指数
1
解决办法
3718
查看次数

如何在 WPF 窗口外捕获 MouseUp 事件?

主题全部在标题中。对不起,如果它是重复的,我真的在 SO 上找不到任何东西。

wpf

3
推荐指数
1
解决办法
1507
查看次数

标签 统计

setwindowshookex ×2

.net-3.5 ×1

.net-4.0 ×1

32-bit ×1

64-bit ×1

c# ×1

hook ×1

keyboard-hook ×1

winapi ×1

wpf ×1