如何自动点击IE页面上弹出的Modal对话框? IE页面上弹出的Modal对话框上有两个按钮“OK” 和 “Cancel”,我现在通过API方法FindWindowEX可以找到这个Modal对话框的句柄。请问我如何找到 “Cancel”两个按钮,并自动点击它。请给出切实好用的代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SendKeys.Send()和keybd_event模拟回车 if(g_hWnd <= 0 ) return; HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定")); SetForegroundWindow(g_hWnd); if(hWnd > 0) { SendMessage(hWnd,WM_KEYDOWN,VK_SPACE,NULL); SendMessage(hWnd,WM_KEYUP,VK_SPACE,NULL); } g_hWnd = FindWindow(NULL,_T("来自网页的消息")); if(g_hWnd <= 0 ) return; HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定")); SetForegroundWindow(g_hWnd); if(hWnd > 0) { SendMessage(hWnd,WM_KEYDOWN,VK_SPACE,NULL); SendMessage(hWnd,WM_KEYUP,VK_SPACE,NULL); }不好意思少贴了一句。 自动点掉webbrowser的对话框 SendKeys.Send()我已经尝试过了,第一次好用。但是第二次使用的时候,不好用。很不稳当的 [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("User32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage( int hWnd, // handle to destination window int Msg, // message int wParam, // first message parameter int lParam // second message parameter ); int WM_CLOSE = 0x010;string lpszParentWindow = "弹出窗体标题"; int ParenthWnd = (int)FindWindow(null, lpszParentWindow); if (ParenthWnd != null) { //向系统发送关闭窗体指令 int WndPr = SendMessage(ParenthWnd, WM_CLOSE, 0, 0); } 你的这种方法我已经试过了,的确是好用的。但是你的这种方法是把弹出的Modal对话框关闭(相当于点右上角的X)。我现在想实现的是找到Modal对话框上的“确定”或者“取消”按钮,再模拟鼠标点击它。我在网上搜索还有另外一种思路,就是通过得到的Modal对话框句柄,得到这个Modal对话框的HtmlDocument,再调用相应的方法去完成鼠标操作。得到这个Modal对话框的HtmlDocument好像很复杂。 在容器里面实现IDocHostShowUI::ShowMessage 参考http://www.codeproject.com/KB/miscctrl/csEXWB.aspx g_hWnd = FindWindow(NULL,_T("来自网页的消息")); if(g_hWnd <= 0 ) return; HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定")); SetForegroundWindow(g_hWnd); if(hWnd > 0) { SendMessage(hWnd,WM_KEYDOWN,VK_SPACE,NULL); SendMessage(hWnd,WM_KEYUP,VK_SPACE,NULL); }LZ,我在四楼恢复的这个代码实现不了吗?我在我本机已经测试通过,但是一定要SetForegroundWindow(g_hWnd);先把要点击的对话框置前激活,然后模拟键盘发送空格键(相当于点回车了。。)。 g_hWnd = FindWindow(NULL,_T("来自网页的消息")); if(g_hWnd <= 0 ) return; HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定")); SetForegroundWindow(g_hWnd); if(hWnd > 0) { SendMessage(hWnd,WM_KEYDOWN,VK_SPACE,NULL); SendMessage(hWnd,WM_KEYUP,VK_SPACE,NULL); }LZ,我在四楼恢复的这个代码实现不了吗?我在我本机已经测试通过,但是一定要SetForegroundWindow(g_hWnd);先把要点击的对话框置前激活,然后模拟键盘发送空格键(相当于点回车了。。)。 我在四楼写的代码,已经测试通过了。但是你需要把要Modal窗口置前激活。 HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定"));你弹出的Modal对话框中的按钮是“确定”吗? DATASET 数据提交问题 如何实现勾选复选框后单选框就不能用了 有没有办法用程序从外部触犯一个form的某个事件 求一好的排列组合算法,一百分相送! 如何实现按下空格键就执行窗体中的Button_Click事件? 求个真则关于img的 WINFORM下的DATAGRID如何自定義日期顯示格式??? 如何指定sl runtime从本地下载??? datagridview控件显示模糊 datagridview删除行的问题 C#中如何从PC端获取到新版本然后下载到PDA端 求助 c#检索access数据库时,提示错误SELECT 子句中包含一个保留字、拼写错误或丢失的参数,或标点符号不正确
模拟回车
if(g_hWnd <= 0 ) return;
HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定"));
SetForegroundWindow(g_hWnd);
if(hWnd > 0)
{
SendMessage(hWnd,WM_KEYDOWN,VK_SPACE,NULL);
SendMessage(hWnd,WM_KEYUP,VK_SPACE,NULL);
}
g_hWnd = FindWindow(NULL,_T("来自网页的消息"));
if(g_hWnd <= 0 ) return;
HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定"));
SetForegroundWindow(g_hWnd);
if(hWnd > 0)
{
SendMessage(hWnd,WM_KEYDOWN,VK_SPACE,NULL);
SendMessage(hWnd,WM_KEYUP,VK_SPACE,NULL);
}
不好意思少贴了一句。
自动点掉webbrowser的对话框
SendKeys.Send()我已经尝试过了,第一次好用。但是第二次使用的时候,不好用。很不稳当的
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage( int hWnd, // handle to destination window int Msg, // message int wParam, // first message parameter int lParam // second message parameter );
int WM_CLOSE = 0x010;
string lpszParentWindow = "弹出窗体标题";
int ParenthWnd = (int)FindWindow(null, lpszParentWindow);
if (ParenthWnd != null)
{
//向系统发送关闭窗体指令
int WndPr = SendMessage(ParenthWnd, WM_CLOSE, 0, 0);
} 你的这种方法我已经试过了,的确是好用的。但是你的这种方法是把弹出的Modal对话框关闭(相当于点右上角的X)。
我现在想实现的是找到Modal对话框上的“确定”或者“取消”按钮,再模拟鼠标点击它。
我在网上搜索还有另外一种思路,就是通过得到的Modal对话框句柄,得到这个Modal对话框的HtmlDocument,再调用相应的方法去完成鼠标操作。得到这个Modal对话框的HtmlDocument好像很复杂。
参考
http://www.codeproject.com/KB/miscctrl/csEXWB.aspx
g_hWnd = FindWindow(NULL,_T("来自网页的消息"));
if(g_hWnd <= 0 ) return;
HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定"));
SetForegroundWindow(g_hWnd);
if(hWnd > 0)
{
SendMessage(hWnd,WM_KEYDOWN,VK_SPACE,NULL);
SendMessage(hWnd,WM_KEYUP,VK_SPACE,NULL);
}LZ,我在四楼恢复的这个代码实现不了吗?我在我本机已经测试通过,但是一定要SetForegroundWindow(g_hWnd);先把要点击的对话框置前激活,然后模拟键盘发送空格键(相当于点回车了。。)。
g_hWnd = FindWindow(NULL,_T("来自网页的消息"));
if(g_hWnd <= 0 ) return;
HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定"));
SetForegroundWindow(g_hWnd);
if(hWnd > 0)
{
SendMessage(hWnd,WM_KEYDOWN,VK_SPACE,NULL);
SendMessage(hWnd,WM_KEYUP,VK_SPACE,NULL);
}LZ,我在四楼恢复的这个代码实现不了吗?我在我本机已经测试通过,但是一定要SetForegroundWindow(g_hWnd);先把要点击的对话框置前激活,然后模拟键盘发送空格键(相当于点回车了。。)。
HWND hWnd = FindWindowEx(g_hWnd,0,NULL,_T("确定"));你弹出的Modal对话框中的按钮是“确定”吗?