Android Service如何获得控件的句柄

Android Service如何获得控件的句柄,第1张

Android自动化测试中AccessibilityService获取控件信息(1)

已经做到了获得控件信息,但是AccessibilityEventgetSource()得到的是被点击的单体对象。我们需要获得是整个窗口的对象,在API16中AccessibilityService新引入的方法getRootInActiveWindow()可以满足我们的要求,所以我们用这个方法得到整个窗口,然后遍历得到所有子节点。

AccessibilityNodeInfo rowNode = getRootInActiveWindow();

if (rowNode == null) {

Logi(TAG, "noteInfo is null");

return;

} else {

recycle(rowNode);

}

Logi(TAG, "==============================================");

其中循环的方法recycle():public void recycle(AccessibilityNodeInfo info) {

if (infogetChildCount() == 0) {

Logi(TAG, "child widget----------------------------" + infogetClassName());

Logi(TAG, "showDialog:" + infocanOpenPopup());

Logi(TAG, "Text:" + infogetText());

Logi(TAG, "windowId:" + infogetWindowId());

} else {

for (int i = 0; i < infogetChildCount(); i++) {

if(infogetChild(i)!=null){

recycle(infogetChild(i));

}

}

}

}

首先你要在在要输出的字符串前面加上_T()测试宏,或者TEXT()宏,如:pDC->TextOut(10,10,_T("这是一个MFC程序!"));然后就是重建工程,在开始的地方不选择Unicode,具体如下图所示,将前面的勾去掉:

WTL有CDC和CDCHandle,分别等价于CDCT<true> 和 CDCT<false> ,区别在CDC析构时会删除HDC句柄。WTL中有CMemoryDC,我们都用它来做双缓冲,其析构时自动将缓冲DC绘制到目的DC

MFC中对应的是CMemDC;错在使用wtl时不要加入mfc头文件。

先找到窗口的句柄,再来查找按钮的句柄,如果按钮有文本内容,那就好办,如果没有,那建议你利用SPY++先来察看一下按钮的类型,以此类型为查找参数多次调用FindWindowEx来查找,直到找到的的句柄和Spy++相同,那么这个按钮就找到了。

按钮类名同样,但是你去遍历的时候它的次序始终是固定的。通过id不可靠,有些有id但是有些id是0。

clswindow类,里面有个函数etElementHwndByClassName,可以得到指定的次序按钮。加入你要处理的按钮是在第二个次序,类名为Button,那么就用:GetElementHwndByClassName("Button",2),即可,

具体代码:

Private Sub Command6_Click()

Dim w As New clsWindow

Dim i%

If wGetWindowHwndByTitleEx("自动化 *** 作框架") > 0 Then

i = i + 1

Do While wGetElementHwndByClassName("ThunderCommandButton", i) > 0'按次序遍历

MsgBox wGetElementHwndByClassName("ThunderCommandButton", i)'得到当前次序按钮的句柄

wSetElementTextByClassName "ThunderCommandButton", "次序" & i, i'设置按钮文本

i = i + 1

Loop

End If

End Sub

用网页按键精灵录制脚本,录制的脚本直接就支持后台 。

录制前先点击设置(模拟模式),把记录鼠标模式去掉

录制后把脚本保存好点进脚本把无谓的命令删除和把运行次数改改就可以了

注意网页按键精灵浏览器右下直接就是点坐标 框大少 和滚动条位置坐标等数值显示,不用自己抓点那么麻烦。

下面这个是我用网页按键精灵录制的脚本,你可以参考一下把一些录制后无用的命令删除,就能用了(因为录制脚本里包含了一些无用的命令,比如把当前框调整成XXXXXX 或把滚动条拉到00 )

ProcessID=PluginWebBind("wqmexe")

Delay 1000//<>=======延时1000毫秒

Call PluginWebTips("脚本开始运行")

Call PluginWebScrollTo(0, 336))//<>=======滚动条拉到0336

Rem a //<>=======标记a

Call PluginWebLeftClick(717,288)//<>=======点击箱子

Delay 1000//<>=======延时1000毫秒

Call PluginWebLeftClick(462,427)//<>=======点击开箱子

Delay 1500//<>=======延时1500毫秒

Call PluginWebLeftClick(479, 356)//<>=======点击确定

Delay 1500//<>=======延时1500毫秒

Goto a //<>=======跳转到标记a

Sub OnScriptExit()

Call PluginWebTips("脚本停止运行")

End Sub

上面这个是我用网页按键精灵

汇川人机是一种高效的工业自动化设备,它的使用非常广泛。在使用汇川人机时,我们需要时刻了解当前的画面号,以便我们能够对设备做出正确的 *** 作。下面是详细的获取当前画面号的方法:

1 在汇川人机的主界面上,单击“系统设置”按钮,进入系统设置页面。

2 在系统设置页面中,找到“当前画面号”选项,单击该选项。

3 在当前画面号页面中,可以看到当前显示的画面号。如果需要修改画面号,可以在该页面中进行设置。

4 如果当前画面号页面没有显示画面号,那么可能是因为当前界面没有设置画面号。此时,可以通过单击“界面设置”按钮进行设置。

5 在界面设置页面中,可以对当前界面进行设置,包括设置画面号、背景颜色、字体等。

6 在完成画面号设置后,单击“保存”按钮保存设置。

通过以上步骤,就可以轻松获取当前画面号,同时还可以进行画面号的修改和设置。总之,汇川人机是一种非常重要的自动化设备,对于工业自动化生产具有非常重要的作用。因此,在使用汇川人机时,我们需要了解其相关 *** 作方法,以便更好地使用设备。

打开按键精灵 新建 抓抓 句柄 返回游戏界面 按f8获取游戏句柄 复制句柄 点抓抓里面的图像 勾上指定窗口句柄 粘贴句柄 按键盘上的prt sc键 看能否截取游戏图像 如果截取的是黑色的话 游戏就不支持后台 如果能截取到游戏图像就开始在按键精灵里做脚本 具体方法是 打开刚才新建的脚本 点左边的全部命令 点插件命令 点后台插件 点模拟按键 把刚才复制的句柄 填写进来 按键码那里按一下1 然后加个延迟50ms就可以了 这样就能后台运行 你可以最小化窗口 做别的事

While 1

Call PluginBkgndKeyPress(Hwnd, 49)

Delay 50

Endwhile

你直接复制这段脚本把Hwnd改成你截取的游戏窗口句柄就行了

这里面的49就是按键1,因为后台需要的是按键码 1的按键码就是49所以别怀疑

1、getmaths并非MATLAB自带函数,能查到的只有百度贴吧上的一个帖子,其内容是:

function g =getmaths(y)

g = matlabFunction(sym (y));

end

问的问题也和你差不多,看ID,应该就是你吧?

2、首先明确一下术语:

句柄函数:你所说的“句柄函数”应该是指使用getmaths生成的函数,那个不叫“句柄函数”,应该叫“匿名函数”(anonymous function)。我的印象中也并被没有“句柄函数”的说法,常用的概念倒是有函数句柄(function handle)。

函数、自变量:你在标题里面说的函数和自变量都是数学上的概念,在MATLAB里对应的应该分别是符号表达式(symbolic expression)和符号变量(symbolic variable)。尤其要注意:编程语言中函数的概念与数学上是不一样的,而变量的概念和自变量也不是一回事。

3、明确了上面的术语之后,现在可以说:上面代码里getmaths调用的matlabFunction作用是把符号表达式转换为匿名函数(当然,需要的话,也可以转换为m文件)。

你第2代码的作用是,由字符串s转换得到一个匿名函数y,MATLAB工作区中此时有两个变量s和y,然后第3代码试图用 diff(y,a) 求偏导数,而这时候,从编程语言的角度说,并不存在a这个变量(注意,不是数学意义上的自变量),所以当然会出错。

4、使用syms a进行声明,其本质上是创建了一个sym类型的变量a,变量有了定义,后面当然就可以使用了。另外还值得一提的是,MATLAB系统中有多个diff函数(可以用which diff -all查看),MATLAB会根据输入参数的类型、这些函数的类型及其在路径中的顺序来决定调用哪一个。

5、如果想获取函数y的自变量,可以使用symvar或findsym函数,但需要对输入参数y做一下转换,例如

symvar(char(y))

symvar(sym(y))

findsym(sym(x))

之所以调用 diff(y,a) 不需要做这样的转换,是因为在diff函数内部首先就对输入参数进行了强制转换,而symvar或findsym函数却没有(可能具体版本有差别)。顺便说明一下,用diff可以对匿名函数求偏导数,但并非对所有函数句柄都可以那么做——尽管从语法上是可行的。

以上就是关于Android Service如何获得控件的句柄全部的内容,包括:Android Service如何获得控件的句柄、出现“error C2872: CDC: ”该怎么处理、vb怎么获取控件句柄和内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9796960.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存