python中sendmessage的使用_SendMessage用法实例

转: http://blog.csdn.net/coolszy/article/details/5523700

SendMessage用法

windowsbuttonmenucommandlistc#

函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。该函数是应用程序和应用程序之间进行消息传递的主要手段之一。

函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);

参数:

hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。

Msg:指定被发送的消息。

wParam:指定附加的消息指定信息。

IParam:指定附加的消息指定信息。

返回值:返回值指定消息处理的结果,依赖于所发送的消息。

备注:需要用HWND_BROADCAST通信的应用程序应当使用函数RegisterWindowMessage来为应用程序间的通信取得一个唯一的消息。

如果指定的窗口是由调用线程创建的,则窗口程序立即作为子程序调用。如果指定的窗口是由不同线程创建的,则系统切换到该线程并调用恰当的窗口程序。线程间的消息只有在线程执行消息检索代码时才被处理。发送线程被阻塞直到接收线程处理完消息为止。

C#中使用该函数首先导入命名空间:

[c-sharp] view plaincopy

using System.Runtime.InteropServices;

然后写API引用部分的代码,放入 class 内部

[c-sharp] view plaincopy

[DllImport("user32.dll", EntryPoint = "SendMessage")]

private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

这个函数有四个参数,第一个是窗口句柄,窗口可以是任何类型的屏幕对象;第二个是用于区别其他消息的常量值;第三个通常是一个与消息有关的常量值,也可能是窗口或控件的句柄,第三个参数是可选参数,有的消息要,有的不需要,比如单击就不需要这个参数,

别的消息,比如鼠标移动的可能需要在这里加上一些鼠标的参数;第四个通常是一个指向内存中数据的指针。在C#中消息需要定义成windows系统中的原始的16进制数字,比如 const int WM_Lbutton = 0x201; //定义了鼠标的左键点击消息。详细值在最后。

例如:

[c-sharp] view plaincopy

const int BM_CLICK = 0xF5;

IntPtr maindHwnd = FindWindow(null, "QQ用户登录"); //获得QQ登陆框的句柄

if (maindHwnd != IntPtr.Zero)

{

IntPtr childHwnd = FindWindowEx(maindHwnd, IntPtr.Zero, null, "登录"); //获得按钮的句柄

if (childHwnd != IntPtr.Zero)

{

SendMessage(childHwnd, BM_CLICK, 0, 0); //发送点击按钮的消息

}

else

{

MessageBox.Show("没有找到子窗口");

}

}

else

{

MessageBox.Show("没有找到窗口");

}

[DllImport("user32.dll", EntryPoint = "FindWindowEx")]

private static extern IntPtr FindWindowEx( IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow );

[DllImport("user32.dll", EntryPoint = "FindWindow")]

private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);

不过貌似现在FindWindowEx获取不到登录句柄了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值