概述
1、背景
自动化测试时,需要处理“另存为”“打印”等windows窗口,java本身并不适合处理这类窗口。
这类窗口的操作可以通过win32api来处理会非常方便。
java对于win32api的调用可以使用jna.jar。
2、代码如下:
1、traversalWindows():遍历windows所有窗口(不包含子窗口), 根据窗口标题匹配定位窗口
2、chooseFileByDlg():处理上传文件的对话框
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.0Common7Tools目录下有spy++工具。
最后
以上就是要减肥抽屉为你收集整理的java调用win32_java调用win32api操作windows窗口的全部内容,希望文章能够帮你解决java调用win32_java调用win32api操作windows窗口所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复