123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Diagnostics;
- using System.Runtime.InteropServices;
- using System.Windows.Forms;
- using PTMedicalInsurance.Forms;
- namespace PTMedicalInsurance.Business
- {
- class KeyBoardHook
- {
- public class KeyboardHook
- {
- private static LowLevelKeyboardProc _proc = HookCallback;
- private static IntPtr _hookID = IntPtr.Zero;
- public static void Start()
- {
- _hookID = SetHook(_proc);
- }
- public static void Stop()
- {
- UnhookWindowsHookEx(_hookID);
- }
- private static IntPtr SetHook(LowLevelKeyboardProc proc)
- {
- using (Process curProcess = Process.GetCurrentProcess())
- using (ProcessModule curModule = curProcess.MainModule)
- {
- return SetWindowsHookEx(WH_KEYBOARD_LL, proc,
- GetModuleHandle(curModule.ModuleName), 0);
- }
- }
- private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
- private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
- {
- if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
- {
- int vkCode = Marshal.ReadInt32(lParam);
- if (vkCode == (int)Keys.F12)
- {
- IntPtr foregroundWindow = GetForegroundWindow();
- StringBuilder windowTitle = new StringBuilder(256);
- GetWindowText(foregroundWindow, windowTitle, windowTitle.Capacity);
-
- if (windowTitle.ToString().Contains("目标程序标题"))
- {
- IntPtr focusedHandle = GetFocusedControl();
- if (focusedHandle != IntPtr.Zero)
- {
- ShowPasswordKeyboard(focusedHandle);
- }
- }
- }
- }
- return CallNextHookEx(_hookID, nCode, wParam, lParam);
- }
- private static void ShowPasswordKeyboard(IntPtr targetHandle)
- {
-
- PasswordKeyboardForm passwordKeyboard = new PasswordKeyboardForm(targetHandle);
- passwordKeyboard.ShowDialog();
- }
- private const int WH_KEYBOARD_LL = 13;
- private const int WM_KEYDOWN = 0x0100;
- [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
- [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- [return: MarshalAs(UnmanagedType.Bool)]
- private static extern bool UnhookWindowsHookEx(IntPtr hhk);
- [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
- [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- private static extern IntPtr GetModuleHandle(string lpModuleName);
- [DllImport("user32.dll")]
- private static extern IntPtr GetForegroundWindow();
- [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
- [DllImport("user32.dll")]
- private static extern IntPtr GetFocus();
- [DllImport("user32.dll")]
- private static extern IntPtr GetFocusedControl();
- }
- }
- }
|