c# - 将代码放在外部 dll 中时,SetWindowsHookEx 不起作用
问题描述
HI i have a following code that reads mouse event
using System;
using System.Drawing;
using System.Reflection;
using System.Runtime.InteropServices;
public enum MouseKeyType
{
MouseMoveOnly=512,
MouseLeftKeyDown=513,
MouseLeftKeyup=514,
MouseRightKeyDown = 516,
MouseRightKeyup = 517,
MouseMiddleKeyDown = 519,
MouseMiddleKeyup = 520,
MouseScroll=522
}
[StructLayout(LayoutKind.Sequential)]
public class MouseEventData
{
public Point point;
private int mouseData;
private int flags;
public int time;
//public int dwExtraInfo;
public bool IsScrollUp
{
get
{
return mouseData > -1;
}
}
public MouseKeyType mouseKeyType;
}
public class gc
{
// Event
public delegate void gcMouseEvents(object source, MouseEventData e);
public event gcMouseEvents gcevent;
// WIN32 hook
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
private static extern int SetWindowsHookEx( int idHook, HookProc lpfn, IntPtr hMod, int dwThreadId);
//just a delegate to simplify the type of
private delegate int HookProc(int nCode,int wParam, IntPtr lParam);
private HookProc _hookCallback;
public gc()
{
_hookCallback = new HookProc((x,y,z)=>
{
//string output = JsonConvert.SerializeObject(ptr);
//Console.WriteLine(output);
if (gcevent!=null)
{
MouseEventData ptr = (MouseEventData)Marshal.PtrToStructure(z, typeof(MouseEventData));
ptr.mouseKeyType = (MouseKeyType)y;
gcevent(this, ptr);
}
return 0;
});
SetWindowsHookEx(
14,
_hookCallback,
Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),
0);
}
}
当代码放置在该项目中时,这似乎在表单应用程序中工作正常。但是当代码被放置在控制台库中并添加了一个引用然后它就不起作用了..我尝试将dll添加到windows窗体等并使用静态等但是当它放置在dll中时似乎没有任何工作
解决方案
推荐阅读
- three.js - 如何防止在鼠标、触摸或按键事件之外的 iTowns 地球旋转上进行剔除或简单地重绘?
- android - 在 ViewModel 中使用 LiveData 将对象传递给其他活动
- django - 如何调试 Django 网站的长时间等待
- powerbi - Power BI网关服务器指向数十个报表后,如何更改它?
- python - keras.losses.binary_crossentropy 输出张量的形状
- python - os.path.join 与 import 语句
- flutter - 当 Flutter 子项未放置在堆栈小部件中时,它隐藏在另一个子项下
- javascript - 如何修复“onClick 以显示内容”?
- python - LSTM 词预测模型仅预测最频繁的词,或者用于不平衡数据的损失
- javascript - 单击 googlemap 标记时执行功能