12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System;
- using System.Diagnostics;
- using System.Runtime.InteropServices;
- using System.Threading;
- using System.Windows.Forms;
- using PTMedicalInsurance.Forms;
- namespace PTMedicalInsurance.Business
- {
- public class PasswordKeyboardTrigger
- {
- // 启动监控线程
- public static void Start()
- {
- Thread monitorThread = new Thread(MonitorEditBox);
- monitorThread.IsBackground = true;
- monitorThread.Start();
- }
- // 监控编辑框状态
- private static void MonitorEditBox()
- {
- while (true)
- {
- IntPtr targetWindow = FindWindow(null, "安全控件 V1.0.6"); // 替换为目标窗体的标题
- if (targetWindow != IntPtr.Zero)
- {
- IntPtr editBox = FindWindowEx(targetWindow, IntPtr.Zero, "Edit", null); // 查找编辑框
- if (editBox != IntPtr.Zero)
- {
- // 检查编辑框是否获得焦点
- IntPtr focusedWindow = GetFocus();
- if (focusedWindow == editBox)
- {
- // 显示密码键盘
- Invoke((MethodInvoker)delegate
- {
- PasswordKeyboardForm passwordKeyboard = new PasswordKeyboardForm(editBox);
- passwordKeyboard.ShowDialog();
- });
- }
- }
- }
- Thread.Sleep(500); // 每500ms检查一次
- }
- }
- private static void Invoke(MethodInvoker methodInvoker)
- {
- throw new NotImplementedException();
- }
- // Windows API
- [DllImport("user32.dll", SetLastError = true)]
- private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
- [DllImport("user32.dll", SetLastError = true)]
- private static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);
- [DllImport("user32.dll", SetLastError = true)]
- private static extern IntPtr GetFocus();
- }
- }
|