请问一下如何利用SendMessage函数发消息

benzite 2006-10-24 01:46:35
有的网页用Javascript中的alert函数弹出窗体,我想通过程序给这样的提示窗体发消息,让程序自动点击确定按钮,不知道怎样构造这样的参数,请高手指点一下:)
...全文
401 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovevsnet 2006-10-25
  • 打赏
  • 举报
回复
不就是要点击铵钮嘛,很简单的,根本不需要用到sendmessage来发消息
用发消息不现实,因为提交铵钮的句柄很难找,它的类名一般就是:Internet Explorer_Server
但你不太可能通过findwindow找到句柄,建议你用我下面的办法(我很早前的代码片段):

. HTMLDocument doc=(HTMLDocument)axWebBrowser1.Document;
//mshtml.IHTMLDocument2 doc1=(mshtml.IHTMLDocument2)axWebBrowser1.Document;
IHTMLInputElement inp=null;
IHTMLElement ihe=null;
inp=(IHTMLInputElement)doc.all.item("CSDNUserLogin:tb_UserName",0);
if(inp==null)
{
MessageBox.Show("无法得到网页元素,登录失败,请重新试试");
return;
}
inp.value=txtUser.Text.Trim();
inp=(IHTMLInputElement)doc.all.item("CSDNUserLogin:tb_Password",0);
if(inp==null)
{
MessageBox.Show("无法得到网页元素,登录失败,请重新试试");
return;
}
inp.value=txtPsw.Text.Trim();
IHTMLElement ihe=(IHTMLElement)doc.all.item("CSDNUserLogin:Image_Login",0);
if(ihe!=null)
ihe.click();
--------------------------------------------------------
以上是很早前登录CSDN的代码,不知道现在的CSDN的JS代码变了没有
以上代码仅供你参考之用,反正对WEB页操作一般就要用到MSHTML中的东东
atls 2006-10-25
  • 打赏
  • 举报
回复
关注
benzite 2006-10-25
  • 打赏
  • 举报
回复
谢谢编程一把手和愚翁老大,你们给了我很大的帮助。此外,我另开了一帖,欢迎参加讨论:

http://community.csdn.net/Expert/topic/5109/5109048.xml?temp=.8270227


lovevsnet 2006-10-25
  • 打赏
  • 举报
回复
千万别发消息WM_CLOSE,否则把对话框的的确定按钮给关了,窗口还没关
lovevsnet 2006-10-25
  • 打赏
  • 举报
回复
不好意思,原来楼主是要关闭这弹出的对话框啊,我按benzite(小禾)的脚本试了一下,用SENDMESSAGE可以的:
IntPtr hok,hm=Win32.FindWindow("#32770","Microsoft Internet Explorer");
if(hm==IntPtr.Zero)return;
hok=Win32.FindWindowEx(hm,IntPtr.Zero,"Button","确定");
if(hok!=IntPtr.Zero)
{
Win32.SendMessage(hok,(int)0x0201,0,0);//WM_LBUTTONDOWN=0x0201,WM_LBUTTONUP=0x0202
Win32.SendMessage(hok,(int)0x0202,0,0);
Win32.SendMessage(hok,(int)0x0201,0,0);//WM_LBUTTONDOWN=0x0201,WM_LBUTTONUP=0x0202
Win32.SendMessage(hok,(int)0x0202,0,0);
}
其中:
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam,int lParam);
以上消息要发两次才能关闭,也不知道为什么?
为了帮你测试我引用了benzite(小禾)的脚本写了个测试页,请允许我10来分钟的侵权
benzite 2006-10-24
  • 打赏
  • 举报
回复
呵呵,我先试试莫名的方法,大家有好方法尽管帮忙想想,我刚才查浏览器控件,也没找到一个能捕获弹出对话框的事件。
Qim 2006-10-24
  • 打赏
  • 举报
回复
每次弹出对话框的位置是否在同一位置?
如果是,可以用钩子函数来实现。捕获ie窗体。在固定位置发出click事件。相当于自动点击确定按钮。
楼主试试。
benzite 2006-10-24
  • 打赏
  • 举报
回复
Knight94老大,你的代码的确对关闭notepad窗口很有效,但是这个方法是关闭整个窗口,但是对这个网站还是没办法,请把下面的代码保存为网页,要是能自动点击该网页弹出的对话框的确定按钮就OK了。

<script language=javascript>
confirm('请点击确认,否则100秒后将吊线');
</script>
benzite 2006-10-24
  • 打赏
  • 举报
回复
好像对myie管用,但是一下子把整个窗口都关闭了。
benzite 2006-10-24
  • 打赏
  • 举报
回复
IntPtr hParent = IntPtr.Zero;
IntPtr hNext = IntPtr.Zero;
String sClassNameFilter = "IEFrame";
hNext = NativeWIN32.FindWindowEx(hParent,hNext,sClassNameFilter,IntPtr.Zero);
Knight94 2006-10-24
  • 打赏
  • 举报
回复
我试了一下,没问题,只要获得hwnd即可
如下是例子
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
static extern bool PostMessage( IntPtr hWnd, uint Msg, IntPtr wParam,
IntPtr lParam);

//call
const int WM_CLOSE = 0x10;
Process proc = Process.Start( "NotePad.exe" );
PostMessage( proc.MainWindowHandle,
WM_CLOSE, IntPtr.Zero, IntPtr.Zero );
Knight94 2006-10-24
  • 打赏
  • 举报
回复
第一个参数,你如何获得的
benzite 2006-10-24
  • 打赏
  • 举报
回复
我试过了,没反应,呵呵。
Knight94 2006-10-24
  • 打赏
  • 举报
回复
Sample code as follows:
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
static extern bool PostMessage(HandleRef hWnd, uint Msg, IntPtr wParam,
IntPtr lParam);

//Call
const int WM_CLOSE = 0x10;
PostMessage( yourWnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero );
jc15271149 2006-10-24
  • 打赏
  • 举报
回复
不会SendMessage,帮顶
Knight94 2006-10-24
  • 打赏
  • 举报
回复
那你用SendMessage发送Wm_close消息即可。
benzite 2006-10-24
  • 打赏
  • 举报
回复
就是有个网站,它挺变态的,让我必须挂在上面看他的网上教程,并会每隔一段事件弹出一个灰色的对话框(就是用javascript中的alert函数创建的),让我点击一下确定按钮,如果我在几分钟内不点击它,就自动让我吊线。

所以,我想写一个程序,自动地捕获这个对话框,然后自动点击上面的确定按钮,呵呵,现在就是不知道怎么给这个对话框发点击确定按钮的消息。
jc15271149 2006-10-24
  • 打赏
  • 举报
回复
没明白你的意思

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧