c# – 按下循环中另一个应用程序中的按钮
发布时间:2020-12-15 21:56:27 所属栏目:百科 来源:网络整理
导读:我已成功编写了一个应用程序来按下另一个应用程序中的按钮.现在我试图在循环中重复按下按钮,我的应用程序挂起,但我不明白为什么. 上下文 我有一个对我很有帮助的应用程序,但开发它的人并没有想到一切.在应用程序中的某个时刻,会打开一个对话框,要求确认用已
我已成功编写了一个应用程序来按下另一个应用程序中的按钮.现在我试图在循环中重复按下按钮,我的应用程序挂起,但我不明白为什么.
上下文 我有一个对我很有帮助的应用程序,但开发它的人并没有想到一切.在应用程序中的某个时刻,会打开一个对话框,要求确认用已上载的数据替换现有数据.我需要单击“确定”才能同意,但问题是我将大量数据上传到此应用程序,并且没有“全部应用”复选框.所以我必须反复点击OK.因此,我正在处理一个应用程序,它将按下OK按钮,直到对话框停止显示. 码 代码单击按钮一次(这可行)… private void btnOKloop_Click(object sender,System.EventArgs e) { int hwnd=0; IntPtr hwndChild = IntPtr.Zero; //Get a handle for the Application main window hwnd = FindWindow(null,"Desired MessageBox"); hwndChild = FindWindowEx((IntPtr)hwnd,IntPtr.Zero,"Button","OK"); //send system message if (hwnd != 0) { SendMessage((int)hwndChild,BN_CLICKED,IntPtr.Zero); } else { MessageBox.Show("Button Could Not Be Found!","Warning",MessageBoxButtons.OK); } } 用于单击循环中的按钮的代码(此挂起)… private void btnOKloop_Click(object sender,System.EventArgs e) { int hwnd=0; IntPtr hwndChild = IntPtr.Zero; hwnd = FindWindow(null,"OK"); do { SendMessage((int)hwndChild,IntPtr.Zero); } while (hwnd != 0); 解决方法
你的循环永远不会退出:
hwnd = FindWindow(null,"Desired MessageBox"); hwndChild = FindWindowEx((IntPtr)hwnd,"OK"); do { SendMessage((int)hwndChild,IntPtr.Zero); } while (hwnd != 0); 你已经将你的hwnd变量设置在循环之外然后循环,直到值变为0.但是因为你没有在循环中设置值,所以它永远不会改变.您可以通过在循环中移动变量赋值语句来解决此问题: do { hwnd = FindWindow(null,"Desired MessageBox"); if (hwnd != 0) { hwndChild = FindWindowEx((IntPtr)hwnd,"OK"); SendMessage((int)hwndChild,IntPtr.Zero); } } while (hwnd != 0); 你可能会遇到一些麻烦….它可能移动得太快,试图在对话框有机会打开之前找到下一个对话框.我建议你添加一个小延迟并将其调整到适当的时间段以允许下一个窗口打开: do { hwnd = FindWindow(null,IntPtr.Zero); } System.Threading.Thread.Sleep(250); // 250 milliseconds: 0.25 seconds between clicks. } while (hwnd != 0); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |