ReactOS 0.4.16-dev-1214-gd663eb4
kbsdll.c File Reference
#include "../kbswitch.h"
Include dependency graph for kbsdll.c:

Go to the source code of this file.

Functions

static VOID PostMessageToMainWnd (UINT Msg, WPARAM wParam, LPARAM lParam)
 
static LRESULT CALLBACK WinHookProc (INT code, WPARAM wParam, LPARAM lParam)
 
static LRESULT CALLBACK ShellHookProc (INT code, WPARAM wParam, LPARAM lParam)
 
static LRESULT CALLBACK KeyboardLLHook (INT code, WPARAM wParam, LPARAM lParam)
 
BOOL APIENTRY KbSwitchSetHooks (_In_ BOOL bDoHook)
 
BOOL WINAPI DllMain (IN HINSTANCE hinstDLL, IN DWORD dwReason, IN LPVOID lpvReserved)
 

Variables

HHOOK hWinHook = NULL
 
HHOOK hShellHook = NULL
 
HHOOK hKeyboardLLHook = NULL
 
HINSTANCE hInstance = NULL
 
HWND hKbSwitchWnd = NULL
 

Function Documentation

◆ DllMain()

BOOL WINAPI DllMain ( IN HINSTANCE  hinstDLL,
IN DWORD  dwReason,
IN LPVOID  lpvReserved 
)

Definition at line 129 of file kbsdll.c.

132{
133 switch (dwReason)
134 {
136 {
137 hInstance = hinstDLL;
139 if (!hKbSwitchWnd)
140 return FALSE;
141 }
142 break;
143 }
144
145 return TRUE;
146}
DWORD dwReason
Definition: misc.cpp:135
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
HINSTANCE hInstance
Definition: kbsdll.c:15
HWND hKbSwitchWnd
Definition: kbsdll.c:16
const TCHAR szKbSwitcherName[]
Definition: kbswitch.h:25
#define FindWindow
Definition: winuser.h:5862

◆ KbSwitchSetHooks()

BOOL APIENTRY KbSwitchSetHooks ( _In_ BOOL  bDoHook)

Definition at line 97 of file kbsdll.c.

98{
99 if (bDoHook)
100 {
104
106 return TRUE;
107 }
108
109 /* Unhook */
110 if (hKeyboardLLHook)
111 {
114 }
115 if (hShellHook)
116 {
119 }
120 if (hWinHook)
121 {
123 hWinHook = NULL;
124 }
125 return !bDoHook;
126}
static LRESULT CALLBACK KeyboardLLHook(INT code, WPARAM wParam, LPARAM lParam)
Definition: kbsdll.c:69
HHOOK hShellHook
Definition: kbsdll.c:13
HHOOK hKeyboardLLHook
Definition: kbsdll.c:14
static LRESULT CALLBACK ShellHookProc(INT code, WPARAM wParam, LPARAM lParam)
Definition: kbsdll.c:46
static LRESULT CALLBACK WinHookProc(INT code, WPARAM wParam, LPARAM lParam)
Definition: kbsdll.c:25
HHOOK hWinHook
Definition: kbsdll.c:12
#define WH_SHELL
Definition: winuser.h:40
#define WH_CBT
Definition: winuser.h:35
#define SetWindowsHookEx
Definition: winuser.h:5941
BOOL WINAPI UnhookWindowsHookEx(_In_ HHOOK)
#define WH_KEYBOARD_LL
Definition: winuser.h:43

◆ KeyboardLLHook()

static LRESULT CALLBACK KeyboardLLHook ( INT  code,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 69 of file kbsdll.c.

70{
71 if (code < 0)
73
74 if (code == HC_ACTION)
75 {
78 {
79 BOOL bShiftPressed = GetAsyncKeyState(VK_SHIFT) < 0;
80 BOOL bAltPressed = GetAsyncKeyState(VK_MENU) < 0;
81 BOOL bCtrlPressed = GetAsyncKeyState(VK_CONTROL) < 0;
82 // Detect Alt+Shift and Ctrl+Shift
83 if ((pKbStruct->vkCode == VK_SHIFT && bAltPressed) ||
84 (pKbStruct->vkCode == VK_MENU && bShiftPressed) ||
85 (pKbStruct->vkCode == VK_SHIFT && bCtrlPressed) ||
86 (pKbStruct->vkCode == VK_CONTROL && bShiftPressed))
87 {
89 }
90 }
91 }
92
94}
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
unsigned int BOOL
Definition: ntddk_ex.h:94
static VOID PostMessageToMainWnd(UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: kbsdll.c:19
#define WM_LANG_CHANGED
Definition: kbswitch.h:20
Definition: inflate.c:139
#define VK_CONTROL
Definition: winuser.h:2222
#define HC_ACTION
Definition: winuser.h:48
LRESULT WINAPI CallNextHookEx(_In_opt_ HHOOK, _In_ int, _In_ WPARAM, _In_ LPARAM)
#define VK_SHIFT
Definition: winuser.h:2221
SHORT WINAPI GetAsyncKeyState(_In_ int)
#define WM_KEYDOWN
Definition: winuser.h:1734
#define WM_SYSKEYDOWN
Definition: winuser.h:1738
#define VK_MENU
Definition: winuser.h:2223

Referenced by KbSwitchSetHooks().

◆ PostMessageToMainWnd()

static VOID PostMessageToMainWnd ( UINT  Msg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 19 of file kbsdll.c.

20{
22}
struct @1690 Msg[]
#define PostMessage
Definition: winuser.h:5917

Referenced by KeyboardLLHook(), ShellHookProc(), and WinHookProc().

◆ ShellHookProc()

static LRESULT CALLBACK ShellHookProc ( INT  code,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 46 of file kbsdll.c.

47{
48 if (code < 0)
50
51 switch (code)
52 {
53 case HSHELL_WINDOWACTIVATED:
54 {
56 break;
57 }
58 case HSHELL_LANGUAGE:
59 {
61 break;
62 }
63 }
64
66}
#define WM_WINDOW_ACTIVATE
Definition: kbswitch.h:21

Referenced by KbSwitchSetHooks().

◆ WinHookProc()

static LRESULT CALLBACK WinHookProc ( INT  code,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 25 of file kbsdll.c.

26{
27 if (code < 0)
29
30 switch (code)
31 {
32 case HCBT_ACTIVATE:
33 case HCBT_SETFOCUS:
34 {
35 HWND hwndFocus = (HWND)wParam;
36 if (hwndFocus && hwndFocus != hKbSwitchWnd)
38 break;
39 }
40 }
41
43}
HANDLE HWND
Definition: compat.h:19
UINT_PTR WPARAM
Definition: windef.h:207
#define HCBT_ACTIVATE
Definition: winuser.h:60
#define HCBT_SETFOCUS
Definition: winuser.h:64

Referenced by KbSwitchSetHooks().

Variable Documentation

◆ hInstance

HINSTANCE hInstance = NULL

Definition at line 15 of file kbsdll.c.

Referenced by DllMain(), and KbSwitchSetHooks().

◆ hKbSwitchWnd

HWND hKbSwitchWnd = NULL

Definition at line 16 of file kbsdll.c.

Referenced by DllMain(), PostMessageToMainWnd(), and WinHookProc().

◆ hKeyboardLLHook

HHOOK hKeyboardLLHook = NULL

Definition at line 14 of file kbsdll.c.

Referenced by KbSwitchSetHooks(), and KeyboardLLHook().

◆ hShellHook

HHOOK hShellHook = NULL

Definition at line 13 of file kbsdll.c.

Referenced by KbSwitchSetHooks(), and ShellHookProc().

◆ hWinHook

HHOOK hWinHook = NULL

Definition at line 12 of file kbsdll.c.

Referenced by KbSwitchSetHooks(), and WinHookProc().