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;
}
}
查看全文
相关阅读:
TOEFL资料 280多个
Eclipse搭建J2ME开发环境
Session.Abandon和Session.Clear有何不同
进程之同步、互斥PV操作笔记
Windows Mobile 6.5 实现联系人分组显示
关于数据库的版本控制
xhtml的布局,满屏,高度自适应
MOSS 项目模板
DNN中与模块相关的信息
J2EE学习笔记
原文地址:https://www.cnblogs.com/crabo/p/591131.html
最新文章
Linux 中常用的一些文件以及常用命令
面向对象
2012/7/9Intel面试题目
创建二叉树
不借助第三方变量,将x,y两个变量的值互换。
Scott Mitchell 的ASP.NET 2.0数据教程之五:: 声明参数
Scott Mitchell 的ASP.NET 2.0数据操作教程之八:使用两个DropDownList过滤的主/从报表
Scott Mitchell 的ASP.NET 2.0数据教程之四:: 使用ObjectDataSource展现数据
Scott Mitchell 的ASP.NET 2.0数据教程之十一: 基于数据的自定义格式化
Scott Mitchell 的ASP.NET 2.0数据操作教程之九:跨页面的主/从报表
热门文章
Scott Mitchell 的ASP.NET 2.0数据教程之三:在Asp.net 2.0中操作数据,母板页和站点导航
Scott Mitchell 的ASP.NET 2.0数据操作教程之十:使用 GridView 和DetailView实现的主/从报
Scott Mitchell 的ASP.NET 2.0数据操作教程之七:使用DropDownList过滤的主/从报表
Scott Mitchell 的ASP.NET 2.0数据教程之二:创建一个业务逻辑层
Scott Mitchell 的ASP.NET 2.0数据教程之六:: 编程设置ObjectDataSource的参数值
从FCKeditor生成HTML字段里获取文章内容和图片
64位下IIS配置调用Microsoft.Jet.OLEDB.4.0的asp.net网络应用
[2012百度之星资格赛]D:共同狂欢
浅析Node.js:一个“编码就绪”服务器
配置NHibernate有三种常见的配置方法
Copyright © 2011-2022 走看看