上下文
我有一个对我很有帮助的应用程序,但开发它的人并没有想到一切.在应用程序中的某个时刻,会打开一个对话框,要求确认用已上载的数据替换现有数据.我需要单击“确定”才能同意,但问题是我将大量数据上传到此应用程序,并且没有“全部应用”复选框.所以我必须反复点击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);总结
以上是内存溢出为你收集整理的c# – 按下循环中另一个应用程序中的按钮全部内容,希望文章能够帮你解决c# – 按下循环中另一个应用程序中的按钮所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)