java调用win32_java调用win32api操作windows窗口

1、背景

自动化测试时,需要处理“另存为”“打印”等windows窗口,java本身并不适合处理这类窗口。

这类窗口的操作可以通过win32api来处理会非常方便。

java对于win32api的调用可以使用jna.jar。

2、代码如下:

1、traversalWindows():遍历windows所有窗口(不包含子窗口), 根据窗口标题匹配定位窗口

2、chooseFileByDlg():处理上传文件的对话框

1.png?version=2&modificationDate=1464437565000&api=v2

2.png?version=2&modificationDate=1464437592000&api=v2

3.png?version=1&modificationDate=1464437665000&api=v2

3、代码说明3.1、win32api说明

FindWindow 函数:这个函数根据窗口标题和CLASS查找窗口

FindWindowEx函数:根据窗口标题、CLASS、父窗口定位窗口

SetForegroundWindow:键盘输入转向该窗口

GetWindowText:获取窗口标题

EnumWindows:枚举所有窗口

win32api,参数包含字符串的,有A和W结尾的,A结尾表示多字节编码,W结尾表示UNICODE编码。

具体可以百度,比如FindWindow的官方api说明,可以百度"FindWindow  msdn",msdn是微软官方。

3.2、跨语言调用相关技术

跨语言调用需要注意一下几个地方:

1、函数调用约定相同(参数入栈顺序、由调用方还是被调用方清理堆栈等)

2、字符串编码(调用跨语言api时,按照对方使用的字符编码传递字符串;接受到字符串时,需要转换为本项目使用的编码)

3、数据类型(java中的byte对应c++中的那种类型?)

4、class内存结构(c++中的class和java中的class,内存内结构相同吗?)

5、指针(c++中的指针,java如何表示)

6、回调函数怎么写

7 、虚拟机和windows的大端小端是否一致

以上几个地方,jni和jna库应该都有处理,我们使用时需要考虑到这些地方,以便调试定位并解决问题。

3.3、windows窗口的窗口标题和class怎么获取

使用spy++工具,安装了Visual Studio之后,D:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools目录下有spy++工具。

4.png?version=2&modificationDate=1464439839000&api=v2

5.png?version=1&modificationDate=1464439733000&api=v2

6.png?version=2&modificationDate=1464439811000&api=v2

  • 1
    点赞
  • 7
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

weixin_39521068

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值