summaryrefslogtreecommitdiff
path: root/winaccessibility/inc/act.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'winaccessibility/inc/act.hxx')
-rw-r--r--winaccessibility/inc/act.hxx90
1 files changed, 90 insertions, 0 deletions
diff --git a/winaccessibility/inc/act.hxx b/winaccessibility/inc/act.hxx
new file mode 100644
index 000000000000..09fb1e3ac767
--- /dev/null
+++ b/winaccessibility/inc/act.hxx
@@ -0,0 +1,90 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+#ifndef __ACCACT_HXX
+#define __ACCACT_HXX
+
+#include <windows.h>
+#include <tchar.h>
+
+
+static bool IsXPOrLater()
+{
+ OSVERSIONINFO osvi;
+
+ ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
+
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+
+ GetVersionEx(&osvi);
+ return ((osvi.dwMajorVersion > 5) ||
+ ((osvi.dwMajorVersion == 5) && (osvi.dwMinorVersion >= 1)));
+}
+
+static HANDLE pActCtx = INVALID_HANDLE_VALUE;
+static ULONG_PTR lpCookie;
+
+static bool ActivateActContext()
+{
+ if(!IsXPOrLater())
+ return false;
+
+ ACTCTX actctx;
+
+ ZeroMemory(&actctx, sizeof(actctx));
+
+ actctx.cbSize = sizeof(actctx);
+
+ TCHAR szDllDirPath[1024];
+ ::GetCurrentDirectory(1024,szDllDirPath);
+ LPTSTR szDllPath = szDllDirPath;
+ lstrcat(szDllPath, _T("\\UAccCOM.dll"));
+
+ actctx.lpSource = szDllPath;
+ actctx.lpResourceName = MAKEINTRESOURCE(97);
+ actctx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID;
+
+ HANDLE pActCtx = CreateActCtx(&actctx);
+
+ if(pActCtx != INVALID_HANDLE_VALUE)
+ {
+ if(ActivateActCtx(pActCtx, &lpCookie))
+ {
+ return true;
+ }
+ }
+ pActCtx = INVALID_HANDLE_VALUE;
+ lpCookie = 0;
+ return false;
+}
+
+static void DeactivateActContext()
+{
+ if(!IsXPOrLater())
+ return;
+
+ if(lpCookie)
+ DeactivateActCtx(0, lpCookie);
+
+ if(pActCtx!=INVALID_HANDLE_VALUE)
+ ReleaseActCtx(pActCtx);
+}
+#endif \ No newline at end of file