LMMS
Loading...
Searching...
No Matches
juce_win32_WindowsUIAWrapper.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26namespace juce
27{
28
30{
31public:
33 {
34 return uiaReturnRawElementProvider != nullptr
35 && uiaHostProviderFromHwnd != nullptr
37 && uiaRaiseAutomationEvent != nullptr
38 && uiaClientsAreListening != nullptr
39 && uiaDisconnectProvider != nullptr
40 && uiaDisconnectAllProviders != nullptr;
41 }
42
43 //==============================================================================
44 LRESULT returnRawElementProvider (HWND hwnd, WPARAM wParam, LPARAM lParam, IRawElementProviderSimple* provider)
45 {
46 return uiaReturnRawElementProvider != nullptr ? uiaReturnRawElementProvider (hwnd, wParam, lParam, provider)
47 : (LRESULT) nullptr;
48 }
49
50 JUCE_COMRESULT hostProviderFromHwnd (HWND hwnd, IRawElementProviderSimple** provider)
51 {
52 return uiaHostProviderFromHwnd != nullptr ? uiaHostProviderFromHwnd (hwnd, provider)
53 : (HRESULT) UIA_E_NOTSUPPORTED;
54 }
55
56 JUCE_COMRESULT raiseAutomationPropertyChangedEvent (IRawElementProviderSimple* provider, PROPERTYID propID, VARIANT oldValue, VARIANT newValue)
57 {
58 return uiaRaiseAutomationPropertyChangedEvent != nullptr ? uiaRaiseAutomationPropertyChangedEvent (provider, propID, oldValue, newValue)
59 : (HRESULT) UIA_E_NOTSUPPORTED;
60 }
61
62 JUCE_COMRESULT raiseAutomationEvent (IRawElementProviderSimple* provider, EVENTID eventID)
63 {
64 return uiaRaiseAutomationEvent != nullptr ? uiaRaiseAutomationEvent (provider, eventID)
65 : (HRESULT) UIA_E_NOTSUPPORTED;
66 }
67
69 {
71 : false;
72 }
73
74 JUCE_COMRESULT disconnectProvider (IRawElementProviderSimple* provider)
75 {
76 if (uiaDisconnectProvider != nullptr)
77 {
78 const ScopedValueSetter<IRawElementProviderSimple*> disconnectingProviderSetter (disconnectingProvider, provider);
79 return uiaDisconnectProvider (provider);
80 }
81
82 return (HRESULT) UIA_E_NOTSUPPORTED;
83 }
84
86 {
87 if (uiaDisconnectAllProviders != nullptr)
88 {
89 const ScopedValueSetter<bool> disconnectingAllProvidersSetter (disconnectingAllProviders, true);
91 }
92
93 return (HRESULT) UIA_E_NOTSUPPORTED;
94 }
95
96 //==============================================================================
97 bool isProviderDisconnecting (IRawElementProviderSimple* provider)
98 {
100 }
101
102 //==============================================================================
104
105private:
106 //==============================================================================
108 {
109 // force UIA COM library initialisation here to prevent an exception when calling methods from SendMessage()
110 if (isLoaded())
111 returnRawElementProvider (nullptr, 0, 0, nullptr);
112 else
113 jassertfalse; // UIAutomationCore could not be loaded!
114 }
115
117 {
119
120 if (uiaHandle != nullptr)
122
123 clearSingletonInstance();
124 }
125
126 //==============================================================================
127 template <typename FuncType>
128 static FuncType getUiaFunction (HMODULE module, LPCSTR funcName)
129 {
130 JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wcast-function-type")
131 return (FuncType) GetProcAddress (module, funcName);
133 }
134
135 //==============================================================================
136 using UiaReturnRawElementProviderFunc = LRESULT (WINAPI*) (HWND, WPARAM, LPARAM, IRawElementProviderSimple*);
137 using UiaHostProviderFromHwndFunc = HRESULT (WINAPI*) (HWND, IRawElementProviderSimple**);
138 using UiaRaiseAutomationPropertyChangedEventFunc = HRESULT (WINAPI*) (IRawElementProviderSimple*, PROPERTYID, VARIANT, VARIANT);
139 using UiaRaiseAutomationEventFunc = HRESULT (WINAPI*) (IRawElementProviderSimple*, EVENTID);
141 using UiaDisconnectProviderFunc = HRESULT (WINAPI*) (IRawElementProviderSimple*);
143
144 HMODULE uiaHandle = ::LoadLibraryA ("UIAutomationCore.dll");
152
153 IRawElementProviderSimple* disconnectingProvider = nullptr;
155
156 //==============================================================================
158};
159
160} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
DeletedAtShutdown()
Definition juce_DeletedAtShutdown.cpp:34
Definition juce_ScopedValueSetter.h:55
Definition juce_win32_WindowsUIAWrapper.h:30
HRESULT(WINAPI *)(HWND, IRawElementProviderSimple **) UiaHostProviderFromHwndFunc
Definition juce_win32_WindowsUIAWrapper.h:137
JUCE_COMRESULT disconnectAllProviders()
Definition juce_win32_WindowsUIAWrapper.h:85
bool disconnectingAllProviders
Definition juce_win32_WindowsUIAWrapper.h:154
IRawElementProviderSimple * disconnectingProvider
Definition juce_win32_WindowsUIAWrapper.h:153
JUCE_COMRESULT raiseAutomationPropertyChangedEvent(IRawElementProviderSimple *provider, PROPERTYID propID, VARIANT oldValue, VARIANT newValue)
Definition juce_win32_WindowsUIAWrapper.h:56
JUCE_COMRESULT raiseAutomationEvent(IRawElementProviderSimple *provider, EVENTID eventID)
Definition juce_win32_WindowsUIAWrapper.h:62
HRESULT(WINAPI *)(IRawElementProviderSimple *, EVENTID) UiaRaiseAutomationEventFunc
Definition juce_win32_WindowsUIAWrapper.h:139
UiaDisconnectAllProvidersFunc uiaDisconnectAllProviders
Definition juce_win32_WindowsUIAWrapper.h:151
BOOL clientsAreListening()
Definition juce_win32_WindowsUIAWrapper.h:68
UiaRaiseAutomationPropertyChangedEventFunc uiaRaiseAutomationPropertyChangedEvent
Definition juce_win32_WindowsUIAWrapper.h:147
HRESULT(WINAPI *)() UiaDisconnectAllProvidersFunc
Definition juce_win32_WindowsUIAWrapper.h:142
LRESULT(WINAPI *)(HWND, WPARAM, LPARAM, IRawElementProviderSimple *) UiaReturnRawElementProviderFunc
Definition juce_win32_WindowsUIAWrapper.h:136
UiaReturnRawElementProviderFunc uiaReturnRawElementProvider
Definition juce_win32_WindowsUIAWrapper.h:145
HRESULT(WINAPI *)(IRawElementProviderSimple *) UiaDisconnectProviderFunc
Definition juce_win32_WindowsUIAWrapper.h:141
UiaClientsAreListeningFunc uiaClientsAreListening
Definition juce_win32_WindowsUIAWrapper.h:149
LRESULT returnRawElementProvider(HWND hwnd, WPARAM wParam, LPARAM lParam, IRawElementProviderSimple *provider)
Definition juce_win32_WindowsUIAWrapper.h:44
WindowsUIAWrapper()
Definition juce_win32_WindowsUIAWrapper.h:107
HRESULT(WINAPI *)(IRawElementProviderSimple *, PROPERTYID, VARIANT, VARIANT) UiaRaiseAutomationPropertyChangedEventFunc
Definition juce_win32_WindowsUIAWrapper.h:138
UiaRaiseAutomationEventFunc uiaRaiseAutomationEvent
Definition juce_win32_WindowsUIAWrapper.h:148
~WindowsUIAWrapper()
Definition juce_win32_WindowsUIAWrapper.h:116
UiaDisconnectProviderFunc uiaDisconnectProvider
Definition juce_win32_WindowsUIAWrapper.h:150
UiaHostProviderFromHwndFunc uiaHostProviderFromHwnd
Definition juce_win32_WindowsUIAWrapper.h:146
static FuncType getUiaFunction(HMODULE module, LPCSTR funcName)
Definition juce_win32_WindowsUIAWrapper.h:128
bool isLoaded() const noexcept
Definition juce_win32_WindowsUIAWrapper.h:32
bool isProviderDisconnecting(IRawElementProviderSimple *provider)
Definition juce_win32_WindowsUIAWrapper.h:97
HMODULE uiaHandle
Definition juce_win32_WindowsUIAWrapper.h:144
JUCE_COMRESULT disconnectProvider(IRawElementProviderSimple *provider)
Definition juce_win32_WindowsUIAWrapper.h:74
BOOL(WINAPI *)() UiaClientsAreListeningFunc
Definition juce_win32_WindowsUIAWrapper.h:140
JUCE_COMRESULT hostProviderFromHwnd(HWND hwnd, IRawElementProviderSimple **provider)
Definition juce_win32_WindowsUIAWrapper.h:50
#define JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE(...)
Definition juce_CompilerWarnings.h:181
#define JUCE_END_IGNORE_WARNINGS_GCC_LIKE
Definition juce_CompilerWarnings.h:182
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
#define jassertfalse
#define JUCE_DECLARE_SINGLETON_SINGLETHREADED_MINIMAL(Classname)
Definition juce_Singleton.h:252
#define JUCE_COMRESULT
Definition juce_win32_ComSmartPtr.h:54
Definition carla_juce.cpp:31
HWND__ * HWND
Definition juce_win32_Direct2DGraphicsContext.h:31
RECT const char void HWND hwnd
Definition swell-functions.h:1066
signed int HRESULT
Definition swell-types.h:181
LONG_PTR LRESULT
Definition swell-types.h:171
LONG_PTR LPARAM
Definition swell-types.h:170
signed char BOOL
Definition swell-types.h:160
ULONG_PTR WPARAM
Definition swell-types.h:169
#define WINAPI
Definition swell-types.h:631
const char * LPCSTR
Definition swell-types.h:190
BOOL FreeLibrary(HINSTANCE hInst)
Definition swell.cpp:924
void * GetProcAddress(HINSTANCE hInst, const char *procName)
Definition swell.cpp:902
#define const
Definition zconf.h:137