zoukankan
html css js c++ java
通过Win API 模拟鼠标点击,使C# Java交互 (PART.2 Java部分)
Java部分:
调用:
ArrayList
<
QueueItem
>
li
=
new
ArrayList
<
QueueItem
>
();
li.add(
new
QueueItem(
"
WindowsForms10.Window.8.app3
"
,
"
采集系统
"
));
li.add(
new
QueueItem(
"
WindowsForms10.BUTTON.app3
"
,
"
选项
"
));
int
result
=
NativeWin32.ClickOnWindow(li);
System.
out
.print(result);
PINVOKE封装采用 NativeCall [
http://johannburkard.de/software/nativecall/
]
QueueItem,窗体查找时的节点定义.
public
class
QueueItem
{
public
String ClassName;
public
String WindowCaption;
public
boolean IsParent
=
true
;
public
QueueItem(String className,String windowCaption)
{
ClassName
=
className;
WindowCaption
=
windowCaption;
}
public
QueueItem(String className,String windowCaption,boolean isParent)
{
ClassName
=
className;
WindowCaption
=
windowCaption;
IsParent
=
isParent;
}
}
API
import com.eaio.nativecall.IntCall;
public
class
NativeWin32
{
public
static
Integer FindWindow(String sClassName,String sWindowName)
{
IntCall iCall
=
new
IntCall(
"
user32
"
,
"
FindWindowW
"
);
int
iRet
=
iCall.executeCall(
new
Object[]
{
sClassName,
sWindowName}
);
iCall.destroy();
return
new
Integer(iRet);
}
public
static
Integer FindWindowEx(Integer hwndParent,Integer hwndChildAfter,String sClassName,String sWindowName)
{
IntCall iCall
=
new
IntCall(
"
user32
"
,
"
FindWindowExW
"
);
int
iRet
=
iCall.executeCall(
new
Object[]
{
hwndParent,
hwndChildAfter,
sClassName,
sWindowName}
);
iCall.destroy();
return
new
Integer(iRet);
}
private
static
final
int
WM_GETTEXT
=
0x000D
;
private
static
final
int
WM_SETTEXT
=
0x000C
;
private
static
final
int
WM_CLICK
=
0x00F5
;
private
static
final
int
SW_MAXIMIZE
=
3
;
private
static
final
int
SW_SHOWNORMAL
=
1
;
private
static
Integer SendMessage(Integer hwnd,
int
msg,Integer wParam,String lParam)
{
IntCall iCall
=
new
IntCall(
"
user32
"
,
"
SendMessageW
"
);
int
iRet
=
iCall.executeCall(
new
Object[]
{
hwnd,
msg,
wParam,
lParam}
);
iCall.destroy();
return
new
Integer(iRet);
}
public
static
void
SetForegroundWindow(Integer hwnd)
{
IntCall iCall
=
new
IntCall(
"
user32
"
,
"
SetForegroundWindow
"
);
iCall.executeCall(
new
Object[]
{
hwnd}
);
iCall.destroy();
}
public
static
void
ShowWindow(Integer hwnd,
int
size)
{
IntCall iCall
=
new
IntCall(
"
user32
"
,
"
ShowWindow
"
);
iCall.executeCall(
new
Object[]
{
hwnd,
size}
);
iCall.destroy();
}
public
static
int
ClickOnWindow(java.util.ArrayList
<
QueueItem
>
queue)
{
int
result
=
-
1
;
Integer ParenthWnd
=
new
Integer(
0
);
Integer ChildhWnd
=
new
Integer(
0
);
QueueItem q
=
queue.
get
(result
+
1
);
//
查到窗体,得到整个窗体
ParenthWnd
=
FindWindow(q.ClassName,q.WindowCaption);
//
判断这个窗体是否有效
if
(ParenthWnd
!=
0
)
{
ShowWindow(ParenthWnd,SW_SHOWNORMAL);
SetForegroundWindow(ParenthWnd);
//
激活窗体
result
++
;
while
(result
+
1
<
queue.size())
{
q
=
queue.
get
(result
+
1
);
ChildhWnd
=
FindWindowEx(ParenthWnd,
0
,q.ClassName,q.WindowCaption);
if
(ChildhWnd
!=
0
)
{
if
(q.IsParent)
ParenthWnd
=
ChildhWnd;
result
++
;
}
else
break
;
}
//
得到了Button ? 触发它的Click事件
if
(ChildhWnd
!=
0
&&
queue.size()
==
result
+
1
)
{
SendMessage(ChildhWnd,WM_CLICK,
0
,
"
0
"
);
}
}
return
result;
}
}
查看全文
相关阅读:
python入门(3)净化雷锋网网页内容
Ecos3.0 Spi Driver for Leon3
梦断代码1了解你的编译器和IDE
诚聘高级测试工程师(北京职位)
高级PHP开发工程师、高级前端开发工程师(北京职位)
MySQL DBA (北京职位)
赴百度 Web前端工程师 三个职位
new与malloc的区别
Google C++编程风格指南
MFC的picture控件 静态加载与动态加载
原文地址:https://www.cnblogs.com/crabo/p/591131.html
最新文章
各大IT公司面试题总结
各大IT公司面试题(1)
粽子的笑话
Lucene探悉
温格准备激活欧文条款
十八、platform模型
中文字符转化ASCII码代码(C实现)
二十、I2C总线仲裁机制
CRC16modbus计算(C实现)
十九、IIC驱动框架介绍及驱动代码解析
热门文章
LRF020 DRIVER FOR LINUX(BASED ON TQ2440/ARM9)
android文件管理器(1)
fedora 16 > fedora17 升级过程
近况小记
python入门(2)目录文件列举和Beautiful Soup简单解析
谁在未来等你
一个类24点问题算法实现
夜半盏
Arduino+VS1003播放音频
Openfire + Smack linux下基本环境搭建和测试
Copyright © 2011-2022 走看看