forked from hnakamur/w32uiautomation
-
Notifications
You must be signed in to change notification settings - Fork 1
/
iuiautomation2.go
158 lines (130 loc) · 3.95 KB
/
iuiautomation2.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
package w32uiautomation
import (
"syscall"
"unsafe"
"github.com/go-ole/go-ole"
"github.com/gonutz/w32/v2"
)
// IUIAutomation2
// @Description: 必须在win8以上的系统才能使用此结构体
type IUIAutomation2 struct {
IUIAutomation
}
type IUIAutomation2Vtbl struct {
IUIAutomationVtbl
Get_AutoSetFocus uintptr
Get_ConnectionTimeout uintptr
Get_TransactionTimeout uintptr
Put_AutoSetFocus uintptr
Put_ConnectionTimeout uintptr
Put_TransactionTimeout uintptr
}
// IID为34723aff-0c9d-49d0-9896-7ab52df8cd8a
var IID_IUIAutomation2 = ole.NewGUID("34723aff-0c9d-49d0-9896-7ab52df8cd8a")
// CUIAutomation8为e22ad333-b25f-460c-83d0-0581107395c9
// win8之后的系统版本使用此字段
var CLSID_CUIAutomation8 = ole.NewGUID("e22ad333-b25f-460c-83d0-0581107395c9")
// NewUIAutomation2
//
// @Description: UIAutomation2构造函数
// @return *IUIAutomation2
// @return error
func NewUIAutomation2() (*IUIAutomation2, error) {
result, err := ole.CreateInstance(CLSID_CUIAutomation8, IID_IUIAutomation2)
if err != nil {
return nil, err
}
return (*IUIAutomation2)(unsafe.Pointer(result)), nil
}
func (auto2 *IUIAutomation2) VTable() *IUIAutomation2Vtbl {
return (*IUIAutomation2Vtbl)(unsafe.Pointer(auto2.RawVTable))
}
// GetAutoSetFocus
//
// @Description: Specifies whether calls to UI Automation control pattern methods automatically set focus to the target element.
// @receiver auto2
// @return b
// @return err
func (auto2 *IUIAutomation2) GetAutoSetFocus() (b w32.BOOL, err error) {
return getAutoSetFocus(auto2)
}
// PutAutoSetFocus
//
// @Description: Specifies whether calls to UI Automation control pattern methods automatically set focus to the target element.
// @receiver auto
// @param b
// @return err
func (auto2 *IUIAutomation2) PutAutoSetFocus(b w32.BOOL) (err error) {
return putAutoSetFocus(auto2, b)
}
func (auto2 *IUIAutomation2) GetConnectionTimeout() (t w32.DWORD, err error) {
return getConnectionTimeout(auto2)
}
// PutConnectionTimeout
//
// @Description:
// @receiver auto2
// @param t,milliseconds
// @return err
func (auto2 *IUIAutomation2) PutConnectionTimeout(t w32.DWORD) (err error) {
return putConnectionTimeout(auto2, t)
}
// GetTransactionTimeout
//
// @Description: The default transaction timeout value is 20 seconds
// @receiver auto2
// @return t
// @return err
func (auto2 *IUIAutomation2) GetTransactionTimeout() (t w32.DWORD, err error) {
return getTransactionTimeout(auto2)
}
func (auto2 *IUIAutomation2) PutTransactionTimeout(t w32.DWORD) (err error) {
return putTransactionTimeout(auto2, t)
}
func putTransactionTimeout(auto2 *IUIAutomation2, t w32.DWORD) (err error) {
hr, _, _ := syscall.SyscallN(auto2.VTable().Put_TransactionTimeout, uintptr(unsafe.Pointer(auto2)), uintptr(t))
if hr != 0 {
err = ole.NewError(hr)
}
return
}
func getTransactionTimeout(auto2 *IUIAutomation2) (t w32.DWORD, err error) {
hr, _, _ := syscall.SyscallN(auto2.VTable().Get_TransactionTimeout, uintptr(unsafe.Pointer(auto2)),
uintptr(t))
if hr != 0 {
err = ole.NewError(hr)
}
return
}
func putConnectionTimeout(auto2 *IUIAutomation2, t w32.DWORD) (err error) {
hr, _, _ := syscall.SyscallN(auto2.VTable().Put_ConnectionTimeout, uintptr(unsafe.Pointer(auto2)),
uintptr(t))
if hr != 0 {
err = ole.NewError(hr)
}
return
}
func getConnectionTimeout(auto2 *IUIAutomation2) (t w32.DWORD, err error) {
hr, _, _ := syscall.SyscallN(auto2.VTable().Get_ConnectionTimeout, uintptr(unsafe.Pointer(auto2)),
uintptr(t))
if hr != 0 {
err = ole.NewError(hr)
}
return
}
func putAutoSetFocus(auto2 *IUIAutomation2, b w32.BOOL) (err error) {
hr, _, _ := syscall.SyscallN(auto2.VTable().Put_AutoSetFocus, uintptr(unsafe.Pointer(auto2)),
uintptr(b))
if hr != 0 {
err = ole.NewError(hr)
}
return
}
func getAutoSetFocus(auto2 *IUIAutomation2) (b w32.BOOL, err error) {
hr, _, _ := syscall.SyscallN(auto2.VTable().Get_AutoSetFocus, uintptr(unsafe.Pointer(auto2)),
uintptr(b))
if hr != 0 {
err = ole.NewError(hr)
}
return
}