Created
November 7, 2016 06:16
-
-
Save qwerty12/2b7b9876081f72c65fc290f806550e79 to your computer and use it in GitHub Desktop.
Stop VS from keeping the US layout loaded and only intercept Alt+`
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "avrf.h" | |
typedef HKL(WINAPI *P_LOADKEYBOARDLAYOUTW)(LPCWSTR, UINT); | |
HKL WINAPI LoadKeyboardLayoutWHook(LPCWSTR, UINT); | |
//typedef BOOL(WINAPI *P_REGISTERHOTKEY)(HWND, INT, UINT, UINT); | |
BOOL WINAPI RegisterHotKeyHook(HWND, INT, UINT, UINT); | |
typedef UINT(WINAPI *P_MAPVIRTUALKEYEXW)(UINT, UINT, HKL); | |
UINT WINAPI MapVirtualKeyExWHook(UINT, UINT, HKL); | |
static RTL_VERIFIER_THUNK_DESCRIPTOR aThunks[] = { { "LoadKeyboardLayoutW", NULL, (PVOID)(ULONG_PTR)LoadKeyboardLayoutWHook }, { "RegisterHotKey", NULL, (PVOID)(ULONG_PTR)RegisterHotKeyHook }, { "MapVirtualKeyExW", NULL, (PVOID)(ULONG_PTR)MapVirtualKeyExWHook }, { NULL, NULL, NULL } }; | |
static RTL_VERIFIER_DLL_DESCRIPTOR aDlls[] = { { L"user32.dll", 0, NULL, aThunks }, { NULL, 0, NULL, NULL } }; | |
static RTL_VERIFIER_PROVIDER_DESCRIPTOR avrfDescriptor = { sizeof(RTL_VERIFIER_PROVIDER_DESCRIPTOR), aDlls }; | |
HKL WINAPI LoadKeyboardLayoutWHook(LPCWSTR pwszKLID, UINT Flags) | |
{ | |
return ((P_LOADKEYBOARDLAYOUTW)(ULONG_PTR)(aThunks[0].ThunkOldAddress))(pwszKLID, Flags | KLF_NOTELLSHELL | KLF_SETFORPROCESS); | |
//return GetKeyboardLayout(0); | |
} | |
BOOL | |
WINAPI | |
RegisterHotKeyHook( | |
HWND hWnd, | |
INT id, | |
UINT fsModifiers, | |
UINT vk) | |
{ | |
return TRUE; // ((P_REGISTERHOTKEY)(ULONG_PTR)(aThunks[1].ThunkOldAddress))(hWnd, id, fsModifiers, vk); | |
} | |
UINT | |
WINAPI | |
MapVirtualKeyExWHook( | |
UINT uCode, | |
UINT uMapType, | |
HKL dwhkl) | |
{ | |
if (uCode != VK_OEM_3) | |
return 0; | |
UINT ret = ((P_MAPVIRTUALKEYEXW)(ULONG_PTR)(aThunks[2].ThunkOldAddress))(uCode, uMapType, dwhkl); | |
UnloadKeyboardLayout(dwhkl); | |
return ret; | |
} | |
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, PRTL_VERIFIER_PROVIDER_DESCRIPTOR *pAvrfDescriptor) | |
{ | |
switch (fdwReason) | |
{ | |
case DLL_PROCESS_ATTACH: | |
__security_init_cookie(); | |
DisableThreadLibraryCalls(hinstDLL); | |
break; | |
case DLL_PROCESS_DETACH: | |
break; | |
case DLL_PROCESS_VERIFIER: | |
*pAvrfDescriptor = &avrfDescriptor; | |
break; | |
default: | |
break; | |
} | |
return TRUE; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment