社区
C#
帖子详情
请问一下如何利用SendMessage函数发消息
benzite
2006-10-24 01:46:35
有的网页用Javascript中的alert函数弹出窗体,我想通过程序给这样的提示窗体发消息,让程序自动点击确定按钮,不知道怎样构造这样的参数,请高手指点一下:)
...全文
401
18
打赏
收藏
请问一下如何利用SendMessage函数发消息
有的网页用Javascript中的alert函数弹出窗体,我想通过程序给这样的提示窗体发消息,让程序自动点击确定按钮,不知道怎样构造这样的参数,请高手指点一下:)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
没明白你的意思
Delphi通过
SendMessage
函数
发消息
和传值实例
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) btn1: TButton; pr
SendMessage
函数
SendMessage
函数
发送指定消息到一个或多个窗口。它将调用指定窗口的窗口处理过程,并且直到窗口过程处理完该消息才返回。 要发送消息后马上返回,可以使用
SendMessage
Callback
函数
或SendNotifyMessage
函数
。要投递一个消息到线程消息队列并马上返回,可以使用PostMessage
函数
或PostThreadMessage
函数
。
函数
原型: LRESULT Send
java
sendmessage
函数
_功能强大的
SendMessage
函数
功能强大的
SendMessage
函数
分类:计算机等级|更新时间:2016-07-08|来源:转载Windows API(应用程序接口)是Windows系列软件为程序开发人员提供的火力强大的“武器库”,在这个武器库中,有很多极具威力的武器,
SendMessage
就是其中之一,它的功能非常丰富,灵活使用这个
函数
,会给编程工作带来很多便利。本文以Visual Basic为例,结合几个具体的例子介绍该
函数
...
MFC的
SendMessage
函数
详解
SendMessage
函数
功能:该
函数
将指定的消息发送到一个或多个窗口。此
函数
为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而
函数
PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。
函数
原型 : LRESULT
SendMessage
(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM IParam); 参数:
SendMessage
函数
参数大全
Windows是一个消息驱动模式的系统,
SendMessage
是应用程序和应用程序之间进行消息传递的主要手段之一。由于
SendMessage
函数
的参数选项过于繁多,因此很有必要作一个汇总,分门别类地来向大家介绍。
函数
声明 LRESULT
SendMessage
( __in HWND hWnd, __in UINT Msg,
C#
110,533
社区成员
642,574
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章