Как узнать состояние CheckBox в чужом окне - VB
Формулировка задачи:
Привет! Подскажите, плз, как программно определить наличие галочки в чужом CheckBox
Решение задачи: «Как узнать состояние CheckBox в чужом окне»
textual
Листинг программы
Option Explicit
Private Declare Function AccessibleObjectFromWindow Lib "oleacc" (ByVal hwnd As Long, ByVal dwId As Long, riid As Any, ByRef ppvObject As Object) As Long
Private Declare Function IIDFromString Lib "ole32" (ByVal lpsz As Long, lpiid As Any) As Long
Private Declare Function DispCallFunc Lib "oleaut32" (ByVal PPV As IUnknown, ByVal oVft As Long, ByVal cc As Long, ByVal rtTYP As VbVarType, ByVal paCNT As Long, paTypes As Any, paValues As Any, ByRef fuReturn As Variant) As Long
Private Const IID_IAccessible As String = "{618736e0-3c3d-11cf-810c-00aa00389b71}"
Private Const OBJID_CLIENT As Long = -4
Private Const CC_STDCALL As Long = 4
Private Const STATE_SYSTEM_CHECKED As Long = &H10
' Ïîëó÷èòü ñîñòîÿГ*ГЁГҐ ГґГ«Г*æêГ* .NET - ГЄГ®Г*òðîëГ*
Private Function GetCheckState(ByVal hwnd As Long) As Long
Dim iid(15) As Byte
Dim IAccessible As IUnknown
IIDFromString StrPtr(IID_IAccessible), iid(0)
AccessibleObjectFromWindow hwnd, OBJID_CLIENT, iid(0), IAccessible
If IAccessibleGet_accState(IAccessible, 0) And STATE_SYSTEM_CHECKED Then
GetCheckState = vbChecked
Else
GetCheckState = vbUnchecked
End If
End Function
Private Function IAccessibleGet_accState(obj As IUnknown, VarID As Variant) As Variant
Dim types() As Integer, param() As Long
ReDim types(1): ReDim param(1)
types(0) = vbVariant: types(1) = vbLong
param(0) = VarPtr(VarID): param(1) = VarPtr(IAccessibleGet_accState): IAccessibleGet_accState = param(1)
Call DispCallFunc(obj, 56, CC_STDCALL, vbLong, 2, types(0), param(0), 0)
End Function