Как узнать состояние CheckBox в чужом окне - VB

Узнай цену своей работы

Формулировка задачи:

Привет! Подскажите, плз, как программно определить наличие галочки в чужом CheckBox

Решение задачи: «Как узнать состояние CheckBox в чужом окне»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Private Declare Function AccessibleObjectFromWindow Lib "oleacc" (ByVal hwnd As Long, ByVal dwId As Long, riid As Any, ByRef ppvObject As Object) As Long
  4. Private Declare Function IIDFromString Lib "ole32" (ByVal lpsz As Long, lpiid As Any) As Long
  5. 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
  6.  
  7. Private Const IID_IAccessible       As String = "{618736e0-3c3d-11cf-810c-00aa00389b71}"
  8. Private Const OBJID_CLIENT          As Long = -4
  9. Private Const CC_STDCALL            As Long = 4
  10. Private Const STATE_SYSTEM_CHECKED  As Long = &H10
  11.  
  12. ' Ïîëó÷èòü ñîñòîÿГ*ГЁГҐ ГґГ«Г*æêГ* .NET - ГЄГ®Г*òðîëГ*
  13. Private Function GetCheckState(ByVal hwnd As Long) As Long
  14.     Dim iid(15)     As Byte
  15.     Dim IAccessible As IUnknown
  16.    
  17.     IIDFromString StrPtr(IID_IAccessible), iid(0)
  18.    
  19.     AccessibleObjectFromWindow hwnd, OBJID_CLIENT, iid(0), IAccessible
  20.      
  21.     If IAccessibleGet_accState(IAccessible, 0) And STATE_SYSTEM_CHECKED Then
  22.         GetCheckState = vbChecked
  23.     Else
  24.         GetCheckState = vbUnchecked
  25.     End If
  26.    
  27. End Function
  28.  
  29. Private Function IAccessibleGet_accState(obj As IUnknown, VarID As Variant) As Variant
  30.     Dim types() As Integer, param() As Long
  31.     ReDim types(1): ReDim param(1)
  32.     types(0) = vbVariant: types(1) = vbLong
  33.     param(0) = VarPtr(VarID): param(1) = VarPtr(IAccessibleGet_accState): IAccessibleGet_accState = param(1)
  34.     Call DispCallFunc(obj, 56, CC_STDCALL, vbLong, 2, types(0), param(0), 0)
  35. End Function

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


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

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

14   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы