如何向另一个程序中的按钮发送单击消息?

如何向另一个程序中的按钮发送单击消息?,第1张

先用FindWindow函数找到程序句柄,再用findWindowEx扭句柄,然后调用sendmessage函数发送消息即可\x0d\x0a\x0d\x0aDeclareFunctionSendMessageLib“user32"Alias“SendMessageA"(ByValhwnd\x0d\x0aAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong\x0d\x0aSendMessage函数的hwnd参数为接收消息的窗口或控件的hwnd句柄。wMsg参数指定具体的消息值。要发送鼠标左键按下和释放的消息,wMsg的取值分别为WM_LBUTTONDOWN和WM_LBUTTONUP,这两个常量定义如下:\x0d\x0a\x0d\x0aConstWM_LBUTTONDOWN=&H201\x0d\x0aConstWM_LBUTTONUP=&H202\x0d\x0a把这两个消息发送给一个按钮,按钮就会像真的被鼠标左键单击了一样。SendMessage函数中的后两个参数在本例中可以不理,简单置0即可。\x0d\x0a还有一点细节需注意。如果连续给按钮发送一对WM_LBUTTONDOWN和WM_LBUTTONUP消息,Windows会来不及进行一些必要的系统 *** 作,这样在视觉上就看不出按钮被按下后又放开的效果,好像按钮没有按动。但按钮的Click事件处理过程被激活执行表明按钮确实被按过。为了达到视觉上的完美效果,我们不妨在WM_LBUTTONDOWN和WM_LBUTTONUP两个消息之间插入一段短短的延时,比如说200毫秒,在这段延时期间,把处理权交给Windows,这样Windows就有时间显示按钮被按下的效果了。插入延时的办法有很多,可以加入一段空循环或利用计时器控件,这里再介绍一个API函数GetTickCount,该函数获取自Windows启动至被调用时所经过的毫秒数。利用这个函数控制延时,不仅精确,而且节省资源。\x0d\x0aGetTickCount函数的接口声明如下:\x0d\x0aDeclareFunctionGetTickCountLib“kernel32"()AsLong\x0d\x0a\x0d\x0a====================CODE:\x0d\x0aPrivateeclareFunctionGetTickCountLib“kernel32"()AsLong\x0d\x0a\x0d\x0aPrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsInteger,ByVallParamAsAny)AsLong\x0d\x0aPrivateDeclareFunctionFindWindowExLib"user32"Alias"FindWindowExA"(ByValhWnd1AsLong,ByValhWnd2AsLong,ByVallpsz1AsString,ByVallpsz2AsString)AsLong\x0d\x0aPrivateDeclareFunctionFindWindowLib"user32"Alias"FindWindowA"(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLong\x0d\x0aDimtWndAsLong,bWndAsLong,ncWndAsLong\x0d\x0a\x0d\x0aConstWM_LBUTTONDOWN=&H201\x0d\x0aConstWM_LBUTTONUP=&H202\x0d\x0a\x0d\x0aPrivateSubCommand1_Click()\x0d\x0atWnd=FindWindow("Shell_TrayWnd",vbNullString)\x0d\x0abWnd=FindWindowEx(tWnd,ByVal0&,"BUTTON",vbNullString)\x0d\x0aSendMessagebWnd,WM_LBUTTONDOWN,0,ByValO&\x0d\x0aGetTickCount\x0d\x0aSendMessagebWnd,WM_LBUTTONUP,0,ByValO&\x0d\x0aEndSub这个例子展示点“开始”按扭

1、小程序订阅消息是需要用户点击触发,所以在需要订阅消息业务前,每一次都需要使用询问方法(所以最好是放在要触发消息的前一步询问);

2、用户每次选择允许都会有一次消息推送的机会;

3、如果用户选择了 总是保持以上选择,不再询问 ,这样也需要调用以下代码方法,只是不会出现询问d框;

4、如果有业务做到定时推送,需要采用公众号模板消息,推送小程序页面。

goCheckInfo: function (e) {

var that = this

var tmplIds = 'tmplId'//模板id

wx.getSetting({

withSubscriptions: true,

success: function (res) {

if (res.subscriptionsSetting.mainSwitch) { // 用户打开了订阅消息总开关

if (res.subscriptionsSetting.itemSettings != null) { // 用户同意总是保持是否推送消息的选择, 这里表示以后不会再拉起推送消息的授权

let moIdState = res.subscriptionsSetting.itemSettings[tmplIds] // 用户同意的消息模板id

wx.requestSubscribeMessage({

tmplIds: [tmplIds],

success(res) {

//成功之后处理业务

},

})

} else {

wx.requestSubscribeMessage({

tmplIds: [tmplIds],

success(res) {

//成功之后处理业务

},

})

}

} else {

console.log('订阅消息未开启')

}

},

fail: function (error) {

console.log(error)

},

})

},


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11444515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存