Как узнать состояние 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы