首页 > 解决方案 > 时间:2019-04-01 标签:c#keep running application without run

问题描述

我试图在.net 中实现键盘记录器和鼠标记录器。所以我有一堂课KeyLogMouseLog. 在两个类的构造函数中,我有相同的逻辑:

鼠标日志:

 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输入PLogMouseLog不起作用,否则KeyLog不起作用。

我可以理解这个问题,它没有进入下一个语句,因为Application.Run已经被调用了。我该如何解决这个问题?

我不想使用线程,因为只要 PC 运行它就会一直运行。

使用 System.Windows.Forms;

标签: c#.netwindowswinforms

解决方案


  1. 从 KeyLog 和 MouseLog 中删除 Application.Run 并在为这两个事件设置挂钩后调用它
  2. 考虑对应用程序的一些事件进行取消挂钩操作 - 例如应用程序关闭等。
  3. 此类操作最好使用线程
  4. 如果这是控制台应用程序 - 为什么要使用 Windows 窗体来保持它运行?可能最好使用 Thread.Sleep 或更适合此目的的东西。

推荐阅读