在application.Run()之后运行Next行

时间:2018-02-02 19:04:18

标签: c# console-application keylogger

我的要求是当用户在chrome中打开特定网址时获得按键。 为此,我首先检查在chrome中打开的URL,之后我使用下面的代码设置钩子

    _hookID = SetHook(_proc);
    Application.Run();
    UnhookWindowsHookEx(_hookID);

它正在获取该URL上的密钥,但在此之后,如果我关闭该URL,它将不断获取密钥,这就是我不想要的。 这是因为我正在调用application.run()。如何在application.run()之后运行代码?我认为这将是解决方案

1 个答案:

答案 0 :(得分:-2)

Aplication.Run的调用在启动Windows消息循环时阻塞。一旦主窗口关闭和/或消息循环正在接收和处理将结束Windows程序的消息之一(例如WM_QUIT),该调用将返回

如果要在调用Run方法后运行代码,一个选项是在Application.Idle事件上注册处理程序

_hookID = SetHook(_proc);
Application.Idle += (s,e) => { UnhookWindowsHookEx(_hookID);};
Application.Run();

在我的测试中,引发了Idle事件,一旦调用了Run方法,主消息循环就不会处理其他消息。

或者优雅地退出Windows循环,例如将WM_QUIT发布到其顶部窗口。