go-tg-screenshot-bot
99 строк · 3.7 Кб
1// Copyright 2010 The win Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// +build windows,386 windows,arm
6
7package win8
9import (10"syscall"11"unsafe"12)
13
14func (idProp *MSAAPROPID) split() (uintptr, uintptr, uintptr, uintptr) {15if idProp == nil {16return 0, 0, 0, 017}18x := (*struct { a, b, c, d uintptr })(unsafe.Pointer(idProp))19return x.a, x.b, x.c, x.d20}
21
22// SetPropValue identifies the accessible element to be annotated, specify the property to be annotated, and provide a new value for that property.
23// If server developers know the HWND of the accessible element they want to annotate, they can use one of the following methods: SetHwndPropStr, SetHwndProp, or SetHwndPropServer
24func (obj *IAccPropServices) SetPropValue(idString []byte, idProp *MSAAPROPID, v *VARIANT) HRESULT {25var idStringPtr unsafe.Pointer26idStringLen := len(idString)27if idStringLen != 0 {28idStringPtr = unsafe.Pointer(&idString[0])29}30propA, propB, propC, propD := idProp.split()31ret, _, _ := syscall.Syscall9(obj.LpVtbl.SetPropValue, 8,32uintptr(unsafe.Pointer(obj)),33uintptr(idStringPtr),34uintptr(idStringLen),35propA, propB, propC, propD,36uintptr(unsafe.Pointer(v)),370)38return HRESULT(ret)39}
40
41// SetHwndProp wraps SetPropValue, providing a convenient entry point for callers who are annotating HWND-based accessible elements. If the new value is a string, you can use SetHwndPropStr instead.
42func (obj *IAccPropServices) SetHwndProp(hwnd HWND, idObject int32, idChild uint32, idProp *MSAAPROPID, v *VARIANT) HRESULT {43propA, propB, propC, propD := idProp.split()44ret, _, _ := syscall.Syscall9(obj.LpVtbl.SetHwndProp, 9,45uintptr(unsafe.Pointer(obj)),46uintptr(hwnd),47uintptr(idObject),48uintptr(idChild),49propA, propB, propC, propD,50uintptr(unsafe.Pointer(v)))51return HRESULT(ret)52}
53
54// SetHwndPropStr wraps SetPropValue, providing a more convenient entry point for callers who are annotating HWND-based accessible elements.
55func (obj *IAccPropServices) SetHwndPropStr(hwnd HWND, idObject int32, idChild uint32, idProp *MSAAPROPID, str string) HRESULT {56str16, err := syscall.UTF16PtrFromString(str)57if err != nil {58return -((E_INVALIDARG ^ 0xFFFFFFFF) + 1)59}60propA, propB, propC, propD := idProp.split()61ret, _, _ := syscall.Syscall9(obj.LpVtbl.SetHwndPropStr, 9,62uintptr(unsafe.Pointer(obj)),63uintptr(hwnd),64uintptr(idObject),65uintptr(idChild),66propA, propB, propC, propD,67uintptr(unsafe.Pointer(str16)))68return HRESULT(ret)69}
70
71// SetHmenuProp wraps SetPropValue, providing a convenient entry point for callers who are annotating HMENU-based accessible elements. If the new value is a string, you can use IAccPropServices::SetHmenuPropStr instead.
72func (obj *IAccPropServices) SetHmenuProp(hmenu HMENU, idChild uint32, idProp *MSAAPROPID, v *VARIANT) HRESULT {73propA, propB, propC, propD := idProp.split()74ret, _, _ := syscall.Syscall9(obj.LpVtbl.SetHmenuProp, 8,75uintptr(unsafe.Pointer(obj)),76uintptr(hmenu),77uintptr(idChild),78propA, propB, propC, propD,79uintptr(unsafe.Pointer(v)),800)81return HRESULT(ret)82}
83
84// SetHmenuPropStr wraps SetPropValue, providing a more convenient entry point for callers who are annotating HMENU-based accessible elements.
85func (obj *IAccPropServices) SetHmenuPropStr(hmenu HMENU, idChild uint32, idProp *MSAAPROPID, str string) HRESULT {86str16, err := syscall.UTF16PtrFromString(str)87if err != nil {88return -((E_INVALIDARG ^ 0xFFFFFFFF) + 1)89}90propA, propB, propC, propD := idProp.split()91ret, _, _ := syscall.Syscall9(obj.LpVtbl.SetHmenuPropStr, 8,92uintptr(unsafe.Pointer(obj)),93uintptr(hmenu),94uintptr(idChild),95propA, propB, propC, propD,96uintptr(unsafe.Pointer(str16)),970)98return HRESULT(ret)99}
100