C# 控制winform控件

张开发
2026/4/10 12:51:38 15 分钟阅读

分享文章

C# 控制winform控件
第一步确认winform的窗体和控件打开spy看起来winform可以顺便说一句我另外弄的一个wpf窗体树里没有子控件。。再琢磨第二步用user32.dll的几个方法[DllImport(user32.dll, SetLastError true, CharSet CharSet.Auto)] static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport(user32.dll, SetLastError true, CharSet CharSet.Auto)] static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, StringBuilder lParam); [DllImport(user32.dll, CharSet CharSet.Unicode)] public static extern IntPtr PostMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam); [DllImport(user32.dll, CharSet CharSet.Auto, SetLastError true)] private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); [DllImport(user32.dll, CharSet CharSet.Auto, ExactSpelling true)] public static extern int ShowWindow(IntPtr hwnd, int nCmdShow); const uint WM_GETTEXT 0x000D; const uint WM_SETTEXT 0x000C; const int WM_CLICK 0x00F5;第三步写几句试试控制var processes Process.GetProcesses(.); Console.WriteLine(processes.Length); foreach(var process in processes.OrderBy(oo.ProcessName)) { //Console.WriteLine(${process.Id}:{process.ProcessName}); if (process.ProcessName.Equals(fpWin, StringComparison.CurrentCultureIgnoreCase)) { var handler process.MainWindowHandle; Console.WriteLine(${process.Id}:{process.ProcessName}:{handler}); //ShowWindow(handler, 3);最大化 var inputHandle FindWindowEx(handler, IntPtr.Zero, WindowsForms10.EDIT.app.0.141b42a_r8_ad1, null); if (inputHandle ! IntPtr.Zero) { Console.WriteLine($input:{inputHandle}); var sbnew StringBuilder(256); GetWindowText(inputHandle, sb, 256); Console.WriteLine($READ {sb}); Thread.Sleep(5000); sb new StringBuilder(256); sb.Append(admin); SendMessage(inputHandle, WM_SETTEXT, IntPtr.Zero, sb); } var buttonHandleFindWindowEx(handler, IntPtr.Zero, null, login); if (buttonHandle ! IntPtr.Zero) { Console.WriteLine($button:{buttonHandle}); Message msg Message.Create( buttonHandle, WM_CLICK, new IntPtr(0), new IntPtr(0)); PostMessage(msg.HWnd, msg.Msg, msg.WParam, msg.LParam); } else { Console.WriteLine(NONE); } } }winform的名字是fpWinFindWindow也能拿到句柄上面就是找到窗体找到输入框获取输入框文本写入文本admin找到按钮点一下

更多文章