xref: /aoo41x/main/winaccessibility/inc/act.hxx (revision b0a7a3cf)
1*b0a7a3cfSSteve Yin /**************************************************************
2*b0a7a3cfSSteve Yin  *
3*b0a7a3cfSSteve Yin  * Licensed to the Apache Software Foundation (ASF) under one
4*b0a7a3cfSSteve Yin  * or more contributor license agreements.  See the NOTICE file
5*b0a7a3cfSSteve Yin  * distributed with this work for additional information
6*b0a7a3cfSSteve Yin  * regarding copyright ownership.  The ASF licenses this file
7*b0a7a3cfSSteve Yin  * to you under the Apache License, Version 2.0 (the
8*b0a7a3cfSSteve Yin  * "License"); you may not use this file except in compliance
9*b0a7a3cfSSteve Yin  * with the License.  You may obtain a copy of the License at
10*b0a7a3cfSSteve Yin  *
11*b0a7a3cfSSteve Yin  *   http://www.apache.org/licenses/LICENSE-2.0
12*b0a7a3cfSSteve Yin  *
13*b0a7a3cfSSteve Yin  * Unless required by applicable law or agreed to in writing,
14*b0a7a3cfSSteve Yin  * software distributed under the License is distributed on an
15*b0a7a3cfSSteve Yin  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b0a7a3cfSSteve Yin  * KIND, either express or implied.  See the License for the
17*b0a7a3cfSSteve Yin  * specific language governing permissions and limitations
18*b0a7a3cfSSteve Yin  * under the License.
19*b0a7a3cfSSteve Yin  *
20*b0a7a3cfSSteve Yin  *************************************************************/
21*b0a7a3cfSSteve Yin 
22*b0a7a3cfSSteve Yin #ifndef __ACCACT_HXX
23*b0a7a3cfSSteve Yin #define __ACCACT_HXX
24*b0a7a3cfSSteve Yin 
25*b0a7a3cfSSteve Yin #include <windows.h>
26*b0a7a3cfSSteve Yin #include <tchar.h>
27*b0a7a3cfSSteve Yin 
28*b0a7a3cfSSteve Yin 
IsXPOrLater()29*b0a7a3cfSSteve Yin static bool IsXPOrLater()
30*b0a7a3cfSSteve Yin {
31*b0a7a3cfSSteve Yin 	OSVERSIONINFO osvi;
32*b0a7a3cfSSteve Yin 
33*b0a7a3cfSSteve Yin 	ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
34*b0a7a3cfSSteve Yin 
35*b0a7a3cfSSteve Yin 	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
36*b0a7a3cfSSteve Yin 
37*b0a7a3cfSSteve Yin 	GetVersionEx(&osvi);
38*b0a7a3cfSSteve Yin 	return ((osvi.dwMajorVersion > 5) ||
39*b0a7a3cfSSteve Yin 		((osvi.dwMajorVersion == 5) && (osvi.dwMinorVersion >= 1)));
40*b0a7a3cfSSteve Yin }
41*b0a7a3cfSSteve Yin 
42*b0a7a3cfSSteve Yin static HANDLE pActCtx = INVALID_HANDLE_VALUE;
43*b0a7a3cfSSteve Yin static ULONG_PTR lpCookie;
44*b0a7a3cfSSteve Yin 
ActivateActContext()45*b0a7a3cfSSteve Yin static bool ActivateActContext()
46*b0a7a3cfSSteve Yin {
47*b0a7a3cfSSteve Yin 	if(!IsXPOrLater())
48*b0a7a3cfSSteve Yin 		return false;
49*b0a7a3cfSSteve Yin 
50*b0a7a3cfSSteve Yin 	ACTCTX actctx;
51*b0a7a3cfSSteve Yin 
52*b0a7a3cfSSteve Yin 	ZeroMemory(&actctx, sizeof(actctx));
53*b0a7a3cfSSteve Yin 
54*b0a7a3cfSSteve Yin 	actctx.cbSize = sizeof(actctx);
55*b0a7a3cfSSteve Yin 
56*b0a7a3cfSSteve Yin 	TCHAR szDllDirPath[1024];
57*b0a7a3cfSSteve Yin 	::GetCurrentDirectory(1024,szDllDirPath);
58*b0a7a3cfSSteve Yin 	LPTSTR szDllPath = szDllDirPath;
59*b0a7a3cfSSteve Yin 	lstrcat(szDllPath, _T("\\UAccCOM.dll"));
60*b0a7a3cfSSteve Yin 
61*b0a7a3cfSSteve Yin 	actctx.lpSource = szDllPath;
62*b0a7a3cfSSteve Yin 	actctx.lpResourceName = MAKEINTRESOURCE(97);
63*b0a7a3cfSSteve Yin 	actctx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID;
64*b0a7a3cfSSteve Yin 
65*b0a7a3cfSSteve Yin 	HANDLE pActCtx = CreateActCtx(&actctx);
66*b0a7a3cfSSteve Yin 
67*b0a7a3cfSSteve Yin 	if(pActCtx != INVALID_HANDLE_VALUE)
68*b0a7a3cfSSteve Yin 	{
69*b0a7a3cfSSteve Yin 		if(ActivateActCtx(pActCtx, &lpCookie))
70*b0a7a3cfSSteve Yin 		{
71*b0a7a3cfSSteve Yin 			return true;
72*b0a7a3cfSSteve Yin 		}
73*b0a7a3cfSSteve Yin 	}
74*b0a7a3cfSSteve Yin 	pActCtx = INVALID_HANDLE_VALUE;
75*b0a7a3cfSSteve Yin 	lpCookie = 0;
76*b0a7a3cfSSteve Yin 	return false;
77*b0a7a3cfSSteve Yin }
78*b0a7a3cfSSteve Yin 
DeactivateActContext()79*b0a7a3cfSSteve Yin static void DeactivateActContext()
80*b0a7a3cfSSteve Yin {
81*b0a7a3cfSSteve Yin 	if(!IsXPOrLater())
82*b0a7a3cfSSteve Yin 		return;
83*b0a7a3cfSSteve Yin 
84*b0a7a3cfSSteve Yin 	if(lpCookie)
85*b0a7a3cfSSteve Yin 		DeactivateActCtx(0, lpCookie);
86*b0a7a3cfSSteve Yin 
87*b0a7a3cfSSteve Yin 	if(pActCtx!=INVALID_HANDLE_VALUE)
88*b0a7a3cfSSteve Yin 		ReleaseActCtx(pActCtx);
89*b0a7a3cfSSteve Yin }
90*b0a7a3cfSSteve Yin #endif