在键盘记录器中区分密码和其他类型的键盘输入

时间:2017-07-05 15:16:57

标签: c++ winapi keylogger

我正在为Windows编写键盘记录程序。我打算用GetAsyncKeyState(KEY)和一个隐藏的控制台来获取按下的键。在确定按键后,我将使用GetForegroundWindow获取当前聚焦的窗口,并在按下该键时识别哪个程序在顶部。我还希望能够区分按键和其他类型的输入。有办法吗?怎么样?

我不是在写恶意软件。这是高级编程课程中的作业。

1 个答案:

答案 0 :(得分:0)

如果前台应用使用标准的Win32 UI控件,请尝试以下操作:

  • 使用GetForegroundWindow()获取前景窗口的HWND
  • 然后使用GetWindowThreadProcessId()GetGUIThreadInfo()来获取前景窗口当前关注的子控件。
  • 然后使用GetClassName()检查它是否是标准EDIT控件(在某些UI框架中此检查可能会失败!您可能必须使用UI Automation API来检测控件类型)
  • 然后使用GetWindowLong/Ptr()检查是否已应用ES_PASSWORD样式。

但是,如果前台应用程序没有使用标准的Win32 UI控件,和/或是自定义绘制它们等,那么所有的赌注都会关闭。