ReactOS  0.4.12-dev-57-g7050ac4
main.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS On-Screen Keyboard
3  * LICENSE: GPL - See COPYING in the top level directory
4  * FILE: base/applications/osk/main.c
5  * PURPOSE: On-screen keyboard.
6  * PROGRAMMERS: Denis ROBERT
7  */
8 
9 /* INCLUDES *******************************************************************/
10 
11 #include "osk.h"
12 #include "settings.h"
13 
14 /* GLOBALS ********************************************************************/
15 
17 
18 /* Functions */
19 int OSK_SetImage(int IdDlgItem, int IdResource);
20 int OSK_DlgInitDialog(HWND hDlg);
21 int OSK_DlgClose(void);
22 int OSK_DlgTimer(void);
23 BOOL OSK_DlgCommand(WPARAM wCommand, HWND hWndControl);
25 
28 
29 /* FUNCTIONS ******************************************************************/
30 
31 /***********************************************************************
32  *
33  * OSK_SetImage
34  *
35  * Set an image on a button
36  */
37 int OSK_SetImage(int IdDlgItem, int IdResource)
38 {
39  HICON hIcon;
40  HWND hWndItem;
41 
42  hIcon = (HICON)LoadImage(Globals.hInstance, MAKEINTRESOURCE(IdResource),
43  IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
44  if (hIcon == NULL)
45  return FALSE;
46 
47  hWndItem = GetDlgItem(Globals.hMainWnd, IdDlgItem);
48  if (hWndItem == NULL)
49  {
50  DestroyIcon(hIcon);
51  return FALSE;
52  }
53 
54  SendMessage(hWndItem, BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)hIcon);
55 
56  /* The system automatically deletes these resources when the process that created them terminates (MSDN) */
57 
58  return TRUE;
59 }
60 
61 /***********************************************************************
62  *
63  * OSK_WarningProc
64  *
65  * Function handler for the warning dialog box on startup
66  */
68 {
69  UNREFERENCED_PARAMETER(lParam);
70 
71  switch (Msg)
72  {
73  case WM_INITDIALOG:
74  {
75  return TRUE;
76  }
77 
78  case WM_COMMAND:
79  {
80  switch (LOWORD(wParam))
81  {
83  {
85  return TRUE;
86  }
87 
88  case IDOK:
89  case IDCANCEL:
90  {
91  EndDialog(hDlg, LOWORD(wParam));
92  return TRUE;
93  }
94  }
95  break;
96  }
97  }
98 
99  return FALSE;
100 }
101 
102 
103 /***********************************************************************
104  *
105  * OSK_DlgInitDialog
106  *
107  * Handling of WM_INITDIALOG
108  */
110 {
112  HMONITOR monitor;
114  POINT Pt;
115  RECT rcWindow;
116 
117  /* Save handle */
118  Globals.hMainWnd = hDlg;
119 
120  /* Load the settings from the registry hive */
122 
123  /* Set the application's icon */
126  if (hIcon || hIconSm)
127  {
128  /* Set the window icons (they are deleted when the process terminates) */
129  SendMessageW(Globals.hMainWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
130  SendMessageW(Globals.hMainWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIconSm);
131  }
132 
133  /* Get screen info */
134  memset(&Pt, 0, sizeof(Pt));
135  monitor = MonitorFromPoint(Pt, MONITOR_DEFAULTTOPRIMARY);
136  info.cbSize = sizeof(info);
137  GetMonitorInfoW(monitor, &info);
138 
139  /* Move the dialog on the bottom of main screen */
140  GetWindowRect(hDlg, &rcWindow);
141  MoveWindow(hDlg,
142  (info.rcMonitor.left + info.rcMonitor.right) / 2 - // Center of screen
143  (rcWindow.right - rcWindow.left) / 2, // - half size of dialog
144  info.rcMonitor.bottom - // Bottom of screen
145  (rcWindow.bottom - rcWindow.top), // - size of window
146  rcWindow.right - rcWindow.left, // Width
147  rcWindow.bottom - rcWindow.top, // Height
148  TRUE);
149 
150  /* Set icon on visual buttons */
167 
168  /* Create a green brush for leds */
169  Globals.hBrushGreenLed = CreateSolidBrush(RGB(0, 255, 0));
170 
171  /* Set a timer for periodics tasks */
172  Globals.iTimer = SetTimer(hDlg, 0, 200, NULL);
173 
174  /* If the member of the struct (bShowWarning) is set then display the dialog box */
175  if (Globals.bShowWarning)
176  {
178  }
179 
180  return TRUE;
181 }
182 
183 /***********************************************************************
184  *
185  * OSK_DlgClose
186  *
187  * Handling of WM_CLOSE
188  */
189 int OSK_DlgClose(void)
190 {
191  KillTimer(Globals.hMainWnd, Globals.iTimer);
192 
193  /* Release Ctrl, Shift, Alt keys */
194  OSK_ReleaseKey(SCAN_CODE_44); // Left shift
195  OSK_ReleaseKey(SCAN_CODE_57); // Right shift
196  OSK_ReleaseKey(SCAN_CODE_58); // Left ctrl
197  OSK_ReleaseKey(SCAN_CODE_60); // Left alt
198  OSK_ReleaseKey(SCAN_CODE_62); // Right alt
199  OSK_ReleaseKey(SCAN_CODE_64); // Right ctrl
200 
201  /* delete GDI objects */
202  if (Globals.hBrushGreenLed) DeleteObject(Globals.hBrushGreenLed);
203 
204  /* Save the settings to the registry hive */
206 
207  return TRUE;
208 }
209 
210 /***********************************************************************
211  *
212  * OSK_DlgTimer
213  *
214  * Handling of WM_TIMER
215  */
216 int OSK_DlgTimer(void)
217 {
218  /* FIXME: To be deleted when ReactOS will support WS_EX_NOACTIVATE */
219  HWND hWndActiveWindow;
220 
221  hWndActiveWindow = GetForegroundWindow();
222  if (hWndActiveWindow != NULL && hWndActiveWindow != Globals.hMainWnd)
223  {
224  Globals.hActiveWnd = hWndActiveWindow;
225  }
226 
227  /* Always redraw leds because it can be changed by the real keyboard) */
231 
232  return TRUE;
233 }
234 
235 /***********************************************************************
236  *
237  * OSK_DlgCommand
238  *
239  * All handling of dialog command
240  */
241 BOOL OSK_DlgCommand(WPARAM wCommand, HWND hWndControl)
242 {
243  WORD ScanCode;
244  INPUT Input;
245  BOOL bExtendedKey;
246  BOOL bKeyDown;
247  BOOL bKeyUp;
248  LONG WindowStyle;
249 
250  /* FIXME: To be deleted when ReactOS will support WS_EX_NOACTIVATE */
251  if (Globals.hActiveWnd)
252  {
253  MSG msg;
254 
256  while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
257  {
258  TranslateMessage(&msg);
259  DispatchMessage(&msg);
260  }
261  }
262 
263  /* KeyDown and/or KeyUp ? */
264  WindowStyle = GetWindowLong(hWndControl, GWL_STYLE);
265  if ((WindowStyle & BS_AUTOCHECKBOX) == BS_AUTOCHECKBOX)
266  {
267  /* 2-states key like Shift, Alt, Ctrl, ... */
268  if (SendMessage(hWndControl, BM_GETCHECK, 0, 0) == BST_CHECKED)
269  {
270  bKeyDown = TRUE;
271  bKeyUp = FALSE;
272  }
273  else
274  {
275  bKeyDown = FALSE;
276  bKeyUp = TRUE;
277  }
278  }
279  else
280  {
281  /* Other key */
282  bKeyDown = TRUE;
283  bKeyUp = TRUE;
284  }
285 
286  /* Extended key ? */
287  ScanCode = wCommand;
288  if (ScanCode & 0x0200)
289  bExtendedKey = TRUE;
290  else
291  bExtendedKey = FALSE;
292  ScanCode &= 0xFF;
293 
294  /* Press and release the key */
295  if (bKeyDown)
296  {
297  Input.type = INPUT_KEYBOARD;
298  Input.ki.wVk = 0;
299  Input.ki.wScan = ScanCode;
300  Input.ki.time = GetTickCount();
302  Input.ki.dwFlags = KEYEVENTF_SCANCODE;
303  if (bExtendedKey) Input.ki.dwFlags |= KEYEVENTF_EXTENDEDKEY;
304  SendInput(1, &Input, sizeof(Input));
305  }
306 
307  if (bKeyUp)
308  {
309  Input.type = INPUT_KEYBOARD;
310  Input.ki.wVk = 0;
311  Input.ki.wScan = ScanCode;
312  Input.ki.time = GetTickCount();
314  Input.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
315  if (bExtendedKey) Input.ki.dwFlags |= KEYEVENTF_EXTENDEDKEY;
316  SendInput(1, &Input, sizeof(Input));
317  }
318 
319  return TRUE;
320 }
321 
322 /***********************************************************************
323  *
324  * OSK_ReleaseKey
325  *
326  * Release the key of ID wCommand
327  */
329 {
330  INPUT Input;
331  BOOL bExtendedKey;
332  LONG WindowStyle;
333  HWND hWndControl;
334 
335  /* Is it a 2-states key ? */
336  hWndControl = GetDlgItem(Globals.hMainWnd, ScanCode);
337  WindowStyle = GetWindowLong(hWndControl, GWL_STYLE);
338  if ((WindowStyle & BS_AUTOCHECKBOX) != BS_AUTOCHECKBOX) return FALSE;
339 
340  /* Is the key down ? */
341  if (SendMessage(hWndControl, BM_GETCHECK, 0, 0) != BST_CHECKED) return TRUE;
342 
343  /* Extended key ? */
344  if (ScanCode & 0x0200)
345  bExtendedKey = TRUE;
346  else
347  bExtendedKey = FALSE;
348  ScanCode &= 0xFF;
349 
350  /* Release the key */
351  Input.type = INPUT_KEYBOARD;
352  Input.ki.wVk = 0;
353  Input.ki.wScan = ScanCode;
354  Input.ki.time = GetTickCount();
356  Input.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
357  if (bExtendedKey) Input.ki.dwFlags |= KEYEVENTF_EXTENDEDKEY;
358  SendInput(1, &Input, sizeof(Input));
359 
360  return TRUE;
361 }
362 
363 /***********************************************************************
364  *
365  * OSK_DlgProc
366  */
368 {
369  switch (msg)
370  {
371  case WM_INITDIALOG:
372  OSK_DlgInitDialog(hDlg);
373  return TRUE;
374 
375  case WM_TIMER:
376  OSK_DlgTimer();
377  return TRUE;
378 
379  case WM_CTLCOLORSTATIC:
380  if ((HWND)lParam == GetDlgItem(hDlg, IDC_LED_NUM))
381  {
382  if (GetKeyState(VK_NUMLOCK) & 0x0001)
383  return (INT_PTR)Globals.hBrushGreenLed;
384  else
386  }
387  if ((HWND)lParam == GetDlgItem(hDlg, IDC_LED_CAPS))
388  {
389  if (GetKeyState(VK_CAPITAL) & 0x0001)
390  return (INT_PTR)Globals.hBrushGreenLed;
391  else
393  }
394  if ((HWND)lParam == GetDlgItem(hDlg, IDC_LED_SCROLL))
395  {
396  if (GetKeyState(VK_SCROLL) & 0x0001)
397  return (INT_PTR)Globals.hBrushGreenLed;
398  else
400  }
401  break;
402 
403  case WM_COMMAND:
404  if (wParam == IDCANCEL)
405  EndDialog(hDlg, FALSE);
406  else if (wParam != IDC_STATIC)
407  OSK_DlgCommand(wParam, (HWND) lParam);
408  break;
409 
410  case WM_CLOSE:
411  OSK_DlgClose();
412  break;
413  }
414 
415  return 0;
416 }
417 
418 /***********************************************************************
419  *
420  * WinMain
421  */
423  HINSTANCE prev,
424  LPTSTR cmdline,
425  int show)
426 {
427  HANDLE hMutex;
428 
430  UNREFERENCED_PARAMETER(cmdline);
432 
433  ZeroMemory(&Globals, sizeof(Globals));
434  Globals.hInstance = hInstance;
435 
436  /* Rry to open a mutex for a single instance */
437  hMutex = OpenMutexA(MUTEX_ALL_ACCESS, FALSE, "osk");
438 
439  if (!hMutex)
440  {
441  /* Mutex doesn’t exist. This is the first instance so create the mutex. */
442  hMutex = CreateMutexA(NULL, FALSE, "osk");
443 
444  DialogBox(hInstance,
447  OSK_DlgProc);
448 
449  /* Delete the mutex */
450  if (hMutex) CloseHandle(hMutex);
451  }
452  else
453  {
454  /* Programme already launched */
455 
456  /* Delete the mutex */
457  CloseHandle(hMutex);
458 
459  ExitProcess(0);
460  }
461 
462  return 0;
463 }
464 
465 /* EOF */
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define SCAN_CODE_30
Definition: osk_res.h:69
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE prev, LPTSTR cmdline, int show)
Definition: main.c:581
HMONITOR WINAPI MonitorFromPoint(POINT, DWORD)
INT_PTR APIENTRY OSK_DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: main.c:367
int OSK_DlgClose(void)
Definition: main.c:189
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define DispatchMessage
Definition: winuser.h:5631
BOOL WINAPI TranslateMessage(_In_ const MSG *)
static HICON
Definition: imagelist.c:84
#define PeekMessage
Definition: winuser.h:5696
#define TRUE
Definition: types.h:120
#define SCAN_CODE_60
Definition: osk_res.h:97
#define IDOK
Definition: winuser.h:824
#define CloseHandle
Definition: compat.h:398
NOTEPAD_GLOBALS Globals
Definition: main.c:29
#define LR_SHARED
Definition: winuser.h:1090
#define IMAGE_ICON
Definition: winuser.h:212
ULONG ScanCode
Definition: api.c:39
#define SCAN_CODE_128
Definition: osk_res.h:146
#define KEYEVENTF_KEYUP
Definition: winuser.h:1092
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2022
#define IDI_PG_UP
Definition: osk_res.h:25
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:323
#define IDC_STATIC
Definition: calc.h:41
#define WM_CTLCOLORSTATIC
Definition: winuser.h:1748
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
#define CALLBACK
Definition: compat.h:27
#define IDI_OSK
Definition: osk_res.h:16
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:445
Definition: arc.h:84
LONG top
Definition: windef.h:297
DWORD time
Definition: winable.h:50
VOID WINAPI ExitProcess(IN UINT uExitCode)
Definition: proc.c:1517
#define IDI_RIGHT
Definition: osk_res.h:29
#define SCAN_CODE_64
Definition: osk_res.h:100
#define ZeroMemory
Definition: winbase.h:1635
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
#define SM_CYSMICON
Definition: winuser.h:1003
#define IDC_SHOWWARNINGCHECK
Definition: resource.h:25
#define MAIN_DIALOG
Definition: osk_res.h:9
#define SCAN_CODE_62
Definition: osk_res.h:99
#define SCAN_CODE_79
Definition: osk_res.h:103
#define IDI_TOP
Definition: osk_res.h:28
#define IDI_TAB
Definition: osk_res.h:18
TCHAR * cmdline
Definition: stretchblt.cpp:32
LONG left
Definition: windef.h:296
int32_t INT_PTR
Definition: typedefs.h:62
HANDLE WINAPI DECLSPEC_HOTPATCH OpenMutexA(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN LPCSTR lpName)
Definition: synch.c:538
LONG right
Definition: windef.h:298
#define IDI_SHIFT
Definition: osk_res.h:21
RECT rcMonitor
Definition: winuser.h:3727
#define BM_SETIMAGE
Definition: winuser.h:1883
#define MUTEX_ALL_ACCESS
Definition: winbase.h:158
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
WPARAM wParam
Definition: combotst.c:138
CHAR * LPTSTR
Definition: xmlstorage.h:192
HWND hActiveWnd
Definition: main.h:25
struct @1571 Msg[]
UINT_PTR WPARAM
Definition: windef.h:207
#define ICON_SMALL
Definition: tnclass.cpp:48
struct _test_info info[]
Definition: SetCursorPos.c:19
int OSK_DlgInitDialog(HWND hDlg)
Definition: main.c:109
#define SCAN_CODE_80
Definition: osk_res.h:104
#define IDC_LED_CAPS
Definition: osk_res.h:12
#define DialogBox
Definition: winuser.h:5627
#define INPUT_KEYBOARD
Definition: winable.h:10
#define SCAN_CODE_16
Definition: osk_res.h:55
#define IDI_LEFT
Definition: osk_res.h:27
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
Definition: cursoricon.c:2172
long LONG
Definition: pedump.c:60
LONG_PTR LPARAM
Definition: windef.h:208
int OSK_SetImage(int IdDlgItem, int IdResource)
Definition: main.c:37
#define IDI_BACK
Definition: osk_res.h:17
#define SCAN_CODE_57
Definition: osk_res.h:95
HANDLE WINAPI CopyImage(_In_ HANDLE, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
Definition: cursoricon.c:1956
#define IDI_MENU
Definition: osk_res.h:23
#define IDI_HOME
Definition: osk_res.h:24
#define APIENTRY
Definition: nt_native.h:48
#define SCAN_CODE_86
Definition: osk_res.h:109
UINT msg
Definition: msvc.h:92
smooth NULL
Definition: ftsmooth.c:416
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:622
LPARAM WINAPI GetMessageExtraInfo(void)
Definition: message.c:1315
#define BS_AUTOCHECKBOX
Definition: pedump.c:654
#define SCAN_CODE_58
Definition: osk_res.h:96
#define BM_GETCHECK
Definition: winuser.h:1879
HANDLE hMutex
Definition: mutex.c:11
BOOL LoadDataFromRegistry()
Definition: settings.c:15
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
BOOL bShowWarning
Definition: main.h:26
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
#define IDI_CAPS_LOCK
Definition: osk_res.h:19
SHORT WINAPI GetKeyState(_In_ int)
#define BLACK_BRUSH
Definition: wingdi.h:894
DWORD dwFlags
Definition: winable.h:49
BOOL OSK_DlgCommand(WPARAM wCommand, HWND hWndControl)
Definition: main.c:241
unsigned int BOOL
Definition: ntddk_ex.h:94
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define LR_DEFAULTSIZE
Definition: winuser.h:1084
BOOL WINAPI GetMonitorInfoW(_In_ HMONITOR, _Inout_ LPMONITORINFO)
#define WM_TIMER
Definition: winuser.h:1718
UINT_PTR iTimer
Definition: main.h:23
#define WM_CLOSE
Definition: winuser.h:1603
#define RGB(r, g, b)
Definition: wingdi.h:2917
int OSK_DlgTimer(void)
Definition: main.c:216
unsigned int UINT
Definition: ndis.h:50
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
unsigned short WORD
Definition: ntddk_ex.h:93
int WINAPI GetSystemMetrics(_In_ int)
HINSTANCE hInstance
Definition: main.c:36
#define IDC_LED_SCROLL
Definition: osk_res.h:13
#define SM_CXSMICON
Definition: winuser.h:1002
BOOL SaveDataToRegistry()
Definition: settings.c:61
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
#define IDI_REACTOS
Definition: osk_res.h:22
#define GetWindowLong
Definition: winuser.h:5662
#define SCAN_CODE_89
Definition: osk_res.h:110
#define WM_COMMAND
Definition: winuser.h:1716
INT_PTR CALLBACK OSK_WarningProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: main.c:67
#define SCAN_CODE_15
Definition: osk_res.h:54
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
#define WINAPI
Definition: msvc.h:20
#define IDI_RETURN
Definition: osk_res.h:20
#define GWL_STYLE
Definition: winuser.h:846
DWORD type
Definition: winable.h:59
#define LR_COPYFROMRESOURCE
Definition: winuser.h:1089
WORD wScan
Definition: winable.h:48
#define SCAN_CODE_127
Definition: osk_res.h:145
#define VK_SCROLL
Definition: winuser.h:2234
#define VK_NUMLOCK
Definition: winuser.h:2233
HICON hIcon
Definition: msconfig.c:44
#define SCAN_CODE_84
Definition: osk_res.h:107
DWORD cbSize
Definition: winuser.h:3726
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define VK_CAPITAL
Definition: winuser.h:2160
#define IDI_BOTTOM
Definition: osk_res.h:30
#define SCAN_CODE_43
Definition: osk_res.h:82
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
HWND WINAPI GetForegroundWindow(void)
Definition: ntwrapper.h:392
HWND hMainWnd
Definition: main.h:21
#define KEYEVENTF_EXTENDEDKEY
Definition: winuser.h:1091
#define BST_CHECKED
Definition: winuser.h:197
#define msg(x)
Definition: auth_time.c:54
#define IDD_WARNINGDIALOG_OSK
Definition: osk_res.h:32
#define SendMessage
Definition: winuser.h:5709
HICON hIconSm
Definition: msconfig.c:44
BOOL WINAPI SetForegroundWindow(_In_ HWND)
LONG bottom
Definition: windef.h:299
HANDLE WINAPI DECLSPEC_HOTPATCH CreateMutexA(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, IN BOOL bInitialOwner, IN LPCSTR lpName OPTIONAL)
Definition: synch.c:509
ULONG_PTR dwExtraInfo
Definition: winable.h:51
BOOL OSK_ReleaseKey(WORD ScanCode)
Definition: main.c:328
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define LoadImage
Definition: winuser.h:5681
HBRUSH hBrushGreenLed
Definition: main.h:22
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define SCAN_CODE_85
Definition: osk_res.h:108
#define PM_REMOVE
Definition: winuser.h:1182
#define SCAN_CODE_44
Definition: osk_res.h:83
#define IDC_LED_NUM
Definition: osk_res.h:11
#define IDCANCEL
Definition: winuser.h:825
#define SCAN_CODE_83
Definition: osk_res.h:106
#define LR_DEFAULTCOLOR
Definition: winuser.h:1077
#define memset(x, y, z)
Definition: compat.h:39
#define WM_INITDIALOG
Definition: winuser.h:1715
#define IDI_PG_DOWN
Definition: osk_res.h:26
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82
WORD wVk
Definition: winable.h:47
UINT WINAPI SendInput(UINT, LPINPUT, int)
Definition: ntwrapper.h:344
#define ICON_BIG
Definition: tnclass.cpp:51
KEYBDINPUT ki
Definition: winable.h:62
HINSTANCE hInstance
Definition: main.h:20
#define SCAN_CODE_129
Definition: osk_res.h:147