c# - 时间:2019-04-01 标签:c#keep running application without run
问题描述
我试图在.net 中实现键盘记录器和鼠标记录器。所以我有一堂课KeyLog
和MouseLog
. 在两个类的构造函数中,我有相同的逻辑:
鼠标日志:
public MouseLog()
{
_hookID = SetHook(_proc);
Application.Run();
UnhookWindowsHookEx(_hookID);
}
键盘记录:
public KeyLog()
{
_hookID = SetHook(_proc);
Application.Run();
UnhookWindowsHookEx(_hookID);
}
我Application.Run
用来继续运行应用程序。
注意:这是一个控制台应用程序。
现在我有另一个类PLog
(父日志),里面有:
public PLog()
{
KeyLog();
MouseLog();
}
这PLog
是从Main
方法调用的。问题是如果我KeyLog
之前MouseLog
输入PLog
,MouseLog
不起作用,否则KeyLog
不起作用。
我可以理解这个问题,它没有进入下一个语句,因为Application.Run
已经被调用了。我该如何解决这个问题?
我不想使用线程,因为只要 PC 运行它就会一直运行。
使用 System.Windows.Forms;
解决方案
- 从 KeyLog 和 MouseLog 中删除 Application.Run 并在为这两个事件设置挂钩后调用它
- 考虑对应用程序的一些事件进行取消挂钩操作 - 例如应用程序关闭等。
- 此类操作最好使用线程
- 如果这是控制台应用程序 - 为什么要使用 Windows 窗体来保持它运行?可能最好使用 Thread.Sleep 或更适合此目的的东西。
推荐阅读
- elasticsearch - 如何在弹性搜索中设置 Metricbeat?
- android - 如何在离子的inAppBrowser内的后退按钮上添加确认弹出窗口
- sql - 在 IB Expert 中插入
- mysql - Mysql - 使用多个 where 子句进行查询
- java - JavaFx:在 UI 中更新属性时出现问题
- javascript - 在 React Web 应用程序中集成 Microsoft Teams 嵌入式共享按钮
- java - websphere 工作管理器超过最大线程数
- kubernetes - 在 Kubernetes 集群中使用 LogCLI 查询 LOKI
- c++ - 如何使用使用宏定义的函数
- jsf - Primefaces commandButton 和 commandLink actionListeners 不工作