所以我有2个类:Timers和KeyHook。
在Timers类中,我有一个名为lastInteraction的公共变量,类型为DateTime。
KeyHook类负责监听键盘事件。目前,当按下某个键时,它会打印到屏幕上。
我希望KeyHook事件用当前的DateTime更新lastInteraction变量,这可能吗?即使我在计时器类中创建了KeyHook实例,它也没有帮助。
我怎样才能实现这样的目标,我在网上进行了分析,但据我所知,变量不能在不同类之间共享,并且在不同类之间传递值不会起作用。
一些代码段:
Program.cs的
static void Main(string[] args)
{
BeatW.Timers timer = new BeatW.Timers();
timer.startTimers();
KeyHook kh = new KeyHook();
Console.ReadKey();
}
KeyHook.cs
public static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
Timers.cs
class Timers
{
public DateTime lastInteraction;
...
}
答案 0 :(得分:1)
授予let imageView : UIImageView = (vc.view.viewWithTag(1) as? UIImageView)!
imageView.image = UIImage(named: backgroundImage, in: Bundle(for: type(of: self)), compatibleWith: nil)
代理人更新KeyHook
:
lastInteraction
注意:这是一种快速而简单的方法,可以轻松实现功能。使用C# events构建更强大的功能,允许您使用C#工具添加,删除和组合事件处理程序以处理事件。
答案 1 :(得分:0)
如果设置静态类,则可以执行您想要的操作。
public static class Timers
{
public static DateTime lastInteraction { get; set; }
...
}
在KeyHook类中,您可以在其上放置值。
public static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
>>>>>Timers.lastInteraction = DateTime.Now;
Console.WriteLine((Keys)vkCode);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
您可以在运行时访问所有命名空间范围内的Timers.lastInteraction
值。