Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的低级键盘钩子_C#_.net_Keyboard_Hook - Fatal编程技术网

C# C语言中的低级键盘钩子

C# C语言中的低级键盘钩子,c#,.net,keyboard,hook,C#,.net,Keyboard,Hook,我正在制作一个模块,通过键盘控制和移动摇摄和倾斜装置。 该模块是一个C.DLL,通过使用反射的其他模块动态加载。 模块不能有任何可见的窗体 我正在使用在上找到的代码作为低级别kb挂钩。 唯一的问题是它使用Console应用程序并调用application.Run来处理消息循环,这是挂钩正常工作所必需的。因为我有一个.dll而不是控制台应用程序,所以我无法让它工作并捕捉按下的键 问题是: 如何替换对Application.Run的调用以处理.dll中的消息循环以捕获KB挂钩 谢谢 DLL应该使用加

我正在制作一个模块,通过键盘控制和移动摇摄和倾斜装置。 该模块是一个C.DLL,通过使用反射的其他模块动态加载。 模块不能有任何可见的窗体

我正在使用在上找到的代码作为低级别kb挂钩。 唯一的问题是它使用Console应用程序并调用application.Run来处理消息循环,这是挂钩正常工作所必需的。因为我有一个.dll而不是控制台应用程序,所以我无法让它工作并捕捉按下的键

问题是: 如何替换对Application.Run的调用以处理.dll中的消息循环以捕获KB挂钩


谢谢

DLL应该使用加载它的程序的消息循环。但是,如果不可能,您可以让DLL启动一个新线程并调用应用程序。从该线程内部运行并使用它自己的消息循环

public static void InjectionPoint()
{
    Thread thread = new Thread(new ThreadStart(DLLMessageLoop));
    thread.IsBackground = true;
    thread.Start();
}

public static void DLLMessageLoop()
{
    _hookID = SetHook(_proc);
    Application.Run();
    UnhookWindowsHookEx(_hookID);
}

对于消息循环,不需要控制台或GUI—它可以保持隐藏并截获消息