go-tg-screenshot-bot
98 строк · 3.5 Кб
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,arm64
6
7package win8
9import (10"syscall"11"unsafe"12)
13
14func (idProp *MSAAPROPID) split() (uintptr, uintptr) {15if idProp == nil {16return 0, 017}18x := (*struct { a, b uintptr })(unsafe.Pointer(idProp))19return x.a, x.b20}
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 := idProp.split()31ret, _, _ := syscall.Syscall6(obj.LpVtbl.SetPropValue, 6,32uintptr(unsafe.Pointer(obj)),33uintptr(idStringPtr),34uintptr(idStringLen),35propA, propB,36uintptr(unsafe.Pointer(v)))37return HRESULT(ret)38}
39
40// 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.
41func (obj *IAccPropServices) SetHwndProp(hwnd HWND, idObject int32, idChild uint32, idProp *MSAAPROPID, v *VARIANT) HRESULT {42propA, propB := idProp.split()43ret, _, _ := syscall.Syscall9(obj.LpVtbl.SetHwndProp, 7,44uintptr(unsafe.Pointer(obj)),45uintptr(hwnd),46uintptr(idObject),47uintptr(idChild),48propA, propB,49uintptr(unsafe.Pointer(v)),500, 0)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 := idProp.split()61ret, _, _ := syscall.Syscall9(obj.LpVtbl.SetHwndPropStr, 7,62uintptr(unsafe.Pointer(obj)),63uintptr(hwnd),64uintptr(idObject),65uintptr(idChild),66propA, propB,67uintptr(unsafe.Pointer(str16)),680, 0)69return HRESULT(ret)70}
71
72// 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.
73func (obj *IAccPropServices) SetHmenuProp(hmenu HMENU, idChild uint32, idProp *MSAAPROPID, v *VARIANT) HRESULT {74propA, propB := idProp.split()75ret, _, _ := syscall.Syscall6(obj.LpVtbl.SetHmenuProp, 6,76uintptr(unsafe.Pointer(obj)),77uintptr(hmenu),78uintptr(idChild),79propA, propB,80uintptr(unsafe.Pointer(v)))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 := idProp.split()91ret, _, _ := syscall.Syscall6(obj.LpVtbl.SetHmenuPropStr, 6,92uintptr(unsafe.Pointer(obj)),93uintptr(hmenu),94uintptr(idChild),95propA, propB,96uintptr(unsafe.Pointer(str16)))97return HRESULT(ret)98}
99