DISPATCH_PROPERTYPUT C语言实例源码
时间: 2023-07-31 20:05:31 浏览: 165
以下是一个简单的 C++ 示例,展示了如何使用 DISPATCH_PROPERTYPUT 来进行属性设置:
```c++
void SetWindowText(HWND hwnd, LPCWSTR text) {
// 获取 IDispatch 接口
IDispatch* pDispatch;
HRESULT hr = SendMessageTimeout(hwnd, WM_GETOBJECT, 0, OBJID_NATIVEOM, SMTO_ABORTIFHUNG, 1000, (PDWORD_PTR)&pDispatch);
if (FAILED(hr) || !pDispatch) {
return;
}
// 获取 IAccessible 接口
IAccessible* pAccessible;
hr = AccessibleObjectFromWindow(hwnd, OBJID_WINDOW, IID_IAccessible, (void**)&pAccessible);
if (FAILED(hr) || !pAccessible) {
pDispatch->Release();
return;
}
// 获取文本属性
DISPID dispid;
hr = pAccessible->get_accChildCount(&dispid);
if (FAILED(hr)) {
pAccessible->Release();
pDispatch->Release();
return;
}
// 设置文本属性
VARIANTARG varg;
varg.vt = VT_BSTR;
varg.bstrVal = SysAllocString(text);
DISPPARAMS dispParams = { &varg, nullptr, 1, 0 };
hr = pDispatch->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, &dispParams, nullptr, nullptr, nullptr);
VariantClear(&varg);
pAccessible->Release();
pDispatch->Release();
}
```
以上代码演示了如何使用 SendMessageTimeout 函数来获取 IDispatch 接口,然后使用 AccessibleObjectFromWindow 函数获取 IAccessible 接口。接下来,使用 get_accChildCount 获取文本属性的 DISPID,最后使用 DISPATCH_PROPERTYPUT 来进行属性设置。
阅读全文