在键盘记录器中区分密码和其他类型的键盘输入
Differentiating between password and other kind of keyboard inputs in a keylogger
我正在为 windows 编写键盘记录器。我打算用 GetAsyncKeyState(KEY) and a hidden console. After a key press has been identified I will get the current focused windows with GetForegroundWindow 获取按下的键,并确定按下该键时哪个程序在最上面。我还希望能够区分密码按键和其他类型的输入。有办法吗?怎么样?
我不是在写恶意软件。这是高级编程课程的作业。
如果前台应用程序使用标准 Win32 UI 控件,请尝试以下操作:
- 使用
GetForegroundWindow()
得到前景window的HWND
。
- 然后使用
GetWindowThreadProcessId()
和 GetGUIThreadInfo()
获取前景 window 当前聚焦的子控件。
- 然后使用
GetClassName()
检查它是否是标准 EDIT
控件(此检查在某些 UI 框架中可能会失败!您可能必须使用 UI Automation API检测控件类型)
- 然后使用
GetWindowLong/Ptr()
检查它是否应用了 ES_PASSWORD
样式。
但是,如果前台应用程序没有使用标准的 Win32 UI 控件,and/or 正在自定义绘制它们,等等,那么所有赌注都会被取消。
我正在为 windows 编写键盘记录器。我打算用 GetAsyncKeyState(KEY) and a hidden console. After a key press has been identified I will get the current focused windows with GetForegroundWindow 获取按下的键,并确定按下该键时哪个程序在最上面。我还希望能够区分密码按键和其他类型的输入。有办法吗?怎么样?
我不是在写恶意软件。这是高级编程课程的作业。
如果前台应用程序使用标准 Win32 UI 控件,请尝试以下操作:
- 使用
GetForegroundWindow()
得到前景window的HWND
。 - 然后使用
GetWindowThreadProcessId()
和GetGUIThreadInfo()
获取前景 window 当前聚焦的子控件。 - 然后使用
GetClassName()
检查它是否是标准EDIT
控件(此检查在某些 UI 框架中可能会失败!您可能必须使用 UI Automation API检测控件类型) - 然后使用
GetWindowLong/Ptr()
检查它是否应用了ES_PASSWORD
样式。
但是,如果前台应用程序没有使用标准的 Win32 UI 控件,and/or 正在自定义绘制它们,等等,那么所有赌注都会被取消。