-
Notifications
You must be signed in to change notification settings - Fork 38
/
example_1.ahk
176 lines (161 loc) · 6.75 KB
/
example_1.ahk
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/*! TheGood
AHKHID - An AHK implementation of the HID functions.
AHKHID Example 1
Last updated: August 22nd, 2010
List all the HID devices connected to the computer.
This example shows how to use all the AHKHID_GetDev functions (like AHKHID_GetDevInfo()).
_________________________________________________
1. Simply run the script.
2. Press Ctrl+c on a selected item to copy its name.
*/
;Check if the OS is Windows Vista or higher
bVista := (DllCall("GetVersion") & 0xFF >= 6)
;Create GUI
Gui +Resize -MaximizeBox -MinimizeBox
Gui, Add, Tab2, x6 y10 w460 h190 vMyTabs, Keyboards|Mice|Other
Gui, Tab, 1
Gui, Add, ListView, x16 y40 w440 h150 vlvwKeyb gLV_Event AltSubmit, Name|Type|SubType|Keyboard Mode|Number of Function Keys|Number of Indicators|Number of Keys Total
Gui, Tab, 2
Gui, Add, ListView, x16 y40 w440 h150 vlvwMouse gLV_Event AltSubmit, Name|Mouse ID|Number of Buttons|Sample Rate
If bVista
LV_InsertCol(5, "", "Has Horizontal Wheel")
Gui, Tab, 3
Gui, Add, ListView, x16 y40 w440 h150 vlvwOther gLV_Event, Name|Vendor ID|Product ID|Version Number|Usage Page|Usage
;Set up the constants
AHKHID_UseConstants()
;Get count
iCount := AHKHID_GetDevCount()
;Retrieve info for each device
Loop %iCount% {
HID0 += 1
;Get device handle, type and name
HID%HID0%_Handle := AHKHID_GetDevHandle(HID0)
HID%HID0%_Type := AHKHID_GetDevType(HID0)
HID%HID0%_Name := AHKHID_GetDevName(HID0)
;Get device info
If (HID%HID0%_Type = RIM_TYPEMOUSE) {
HID%HID0%_ID := AHKHID_GetDevInfo(HID0, DI_MSE_ID)
HID%HID0%_Buttons := AHKHID_GetDevInfo(HID0, DI_MSE_NUMBEROFBUTTONS)
HID%HID0%_SampleRate := AHKHID_GetDevInfo(HID0, DI_MSE_SAMPLERATE)
If bVista ;Only supported in Windows Vista and higher
HID%HID0%_HWheel := AHKHID_GetDevInfo(HID0, DI_MSE_HASHORIZONTALWHEEL)
} Else If (HID%HID0%_Type = RIM_TYPEKEYBOARD) {
HID%HID0%_KBType := AHKHID_GetDevInfo(HID0, DI_KBD_TYPE)
HID%HID0%_KBSubType := AHKHID_GetDevInfo(HID0, DI_KBD_SUBTYPE)
HID%HID0%_KeyboardMode := AHKHID_GetDevInfo(HID0, DI_KBD_KEYBOARDMODE)
HID%HID0%_FunctionKeys := AHKHID_GetDevInfo(HID0, DI_KBD_NUMBEROFFUNCTIONKEYS)
HID%HID0%_Indicators := AHKHID_GetDevInfo(HID0, DI_KBD_NUMBEROFINDICATORS)
HID%HID0%_KeysTotal := AHKHID_GetDevInfo(HID0, DI_KBD_NUMBEROFKEYSTOTAL)
} Else If (HID%HID0%_Type = RIM_TYPEHID) {
HID%HID0%_VendorID := AHKHID_GetDevInfo(HID0, DI_HID_VENDORID)
HID%HID0%_ProductID := AHKHID_GetDevInfo(HID0, DI_HID_PRODUCTID)
HID%HID0%_VersionNumber := AHKHID_GetDevInfo(HID0, DI_HID_VERSIONNUMBER)
HID%HID0%_UsagePage := AHKHID_GetDevInfo(HID0, DI_HID_USAGEPAGE)
HID%HID0%_Usage := AHKHID_GetDevInfo(HID0, DI_HID_USAGE)
}
}
;Add to listviews according to type
Loop %HID0% {
If (HID%A_Index%_Type = RIM_TYPEMOUSE) {
Gui, ListView, lvwMouse
If bVista ;Only supported in Windows Vista and higher
LV_Add("",HID%A_Index%_Name, HID%A_Index%_ID, HID%A_Index%_Buttons, HID%A_Index%_SampleRate, HID%A_Index%_HWheel)
Else LV_Add("",HID%A_Index%_Name, HID%A_Index%_ID, HID%A_Index%_Buttons, HID%A_Index%_SampleRate)
} Else If (HID%A_Index%_Type = RIM_TYPEKEYBOARD) {
Gui, ListView, lvwKeyb
LV_Add("", HID%A_Index%_Name, HID%A_Index%_KBType, HID%A_Index%_KBSubType, HID%A_Index%_KeyboardMode
, HID%A_Index%_FunctionKeys, HID%A_Index%_Indicators, HID%A_Index%_KeysTotal)
} Else If (HID%A_Index%_Type = RIM_TYPEHID) {
Gui, ListView, lvwOther
LV_Add("", HID%A_Index%_Name, HID%A_Index%_VendorID, HID%A_Index%_ProductID, HID%A_Index%_VersionNumber
, HID%A_Index%_UsagePage, HID%A_Index%_Usage)
}
}
;Adjust column width
Gui, ListView, lvwMouse
Loop 5
LV_ModifyCol(A_Index, "AutoHdr")
Gui, ListView, lvwKeyb
Loop 7
LV_ModifyCol(A_Index, "AutoHdr")
Gui, ListView, lvwOther
Loop 6
LV_ModifyCol(A_Index, "AutoHdr")
Gui, Show
Return
GuiSize:
Anchor("MyTabs", "wh")
Anchor("lvwKeyb", "wh")
Anchor("lvwMouse", "wh")
Anchor("lvwOther", "wh")
Return
GuiEscape:
GuiClose:
ExitApp
;Catch Ctrl+c presses to copy selected device name to clipboard
LV_Event:
If (A_GuiEvent = "K") {
If GetKeyState("c", "P") And GetKeyState("Ctrl", "P") {
Gui, ListView, %A_GuiControl%
LV_GetText(s, LV_GetNext())
ClipBoard := s
}
} Else If (A_GuiEvent = "DoubleClick") {
Gui, ListView, %A_GuiControl%
LV_GetText(s, LV_GetNext())
ClipBoard := s
}
Return
;Anchor by Titan, adapted by TheGood
;http://www.autohotkey.com/forum/viewtopic.php?p=377395#377395
Anchor(i, a = "", r = false) {
static c, cs = 12, cx = 255, cl = 0, g, gs = 8, gl = 0, gpi, gw, gh, z = 0, k = 0xffff, ptr
If z = 0
VarSetCapacity(g, gs * 99, 0), VarSetCapacity(c, cs * cx, 0), ptr := A_PtrSize ? "Ptr" : "UInt", z := true
If (!WinExist("ahk_id" . i)) {
GuiControlGet, t, Hwnd, %i%
If ErrorLevel = 0
i := t
Else ControlGet, i, Hwnd, , %i%
}
VarSetCapacity(gi, 68, 0), DllCall("GetWindowInfo", "UInt", gp := DllCall("GetParent", "UInt", i), ptr, &gi)
, giw := NumGet(gi, 28, "Int") - NumGet(gi, 20, "Int"), gih := NumGet(gi, 32, "Int") - NumGet(gi, 24, "Int")
If (gp != gpi) {
gpi := gp
Loop, %gl%
If (NumGet(g, cb := gs * (A_Index - 1)) == gp, "UInt") {
gw := NumGet(g, cb + 4, "Short"), gh := NumGet(g, cb + 6, "Short"), gf := 1
Break
}
If (!gf)
NumPut(gp, g, gl, "UInt"), NumPut(gw := giw, g, gl + 4, "Short"), NumPut(gh := gih, g, gl + 6, "Short"), gl += gs
}
ControlGetPos, dx, dy, dw, dh, , ahk_id %i%
Loop, %cl%
If (NumGet(c, cb := cs * (A_Index - 1), "UInt") == i) {
If a =
{
cf = 1
Break
}
giw -= gw, gih -= gh, as := 1, dx := NumGet(c, cb + 4, "Short"), dy := NumGet(c, cb + 6, "Short")
, cw := dw, dw := NumGet(c, cb + 8, "Short"), ch := dh, dh := NumGet(c, cb + 10, "Short")
Loop, Parse, a, xywh
If A_Index > 1
av := SubStr(a, as, 1), as += 1 + StrLen(A_LoopField)
, d%av% += (InStr("yh", av) ? gih : giw) * (A_LoopField + 0 ? A_LoopField : 1)
DllCall("SetWindowPos", "UInt", i, "UInt", 0, "Int", dx, "Int", dy
, "Int", InStr(a, "w") ? dw : cw, "Int", InStr(a, "h") ? dh : ch, "Int", 4)
If r != 0
DllCall("RedrawWindow", "UInt", i, "UInt", 0, "UInt", 0, "UInt", 0x0101) ; RDW_UPDATENOW | RDW_INVALIDATE
Return
}
If cf != 1
cb := cl, cl += cs
bx := NumGet(gi, 48, "UInt"), by := NumGet(gi, 16, "Int") - NumGet(gi, 8, "Int") - gih - NumGet(gi, 52, "UInt")
If cf = 1
dw -= giw - gw, dh -= gih - gh
NumPut(i, c, cb, "UInt"), NumPut(dx - bx, c, cb + 4, "Short"), NumPut(dy - by, c, cb + 6, "Short")
, NumPut(dw, c, cb + 8, "Short"), NumPut(dh, c, cb + 10, "Short")
Return, true
}