Пример #1
0
LRESULT CALLBACK keyboard_hook_event_proc(int nCode, WPARAM wParam, LPARAM lParam) {
	// Calculate Unix epoch from native time source.
	uint64_t timestamp = get_event_timestamp();

	KBDLLHOOKSTRUCT *kbhook = (KBDLLHOOKSTRUCT *) lParam;
	switch (wParam) {
		case WM_KEYDOWN:
		case WM_SYSKEYDOWN:
			process_key_pressed(timestamp, kbhook);
			break;

		case WM_KEYUP:
		case WM_SYSKEYUP:
			process_key_released(timestamp, kbhook);
			break;
	}

	LRESULT hook_result = -1;
	if (nCode < 0 || event.reserved ^ 0x01) {
		hook_result = CallNextHookEx(keyboard_event_hhook, nCode, wParam, lParam);
	}
	else {
		logger(LOG_LEVEL_DEBUG,	"%s [%u]: Consuming the current event. (%li)\n",
				__FUNCTION__, __LINE__, (long) hook_result);
	}

	return hook_result;
}
Пример #2
0
LRESULT CALLBACK keyboard_hook_event_proc(int nCode, WPARAM wParam, LPARAM lParam) {
	KBDLLHOOKSTRUCT *kbhook = (KBDLLHOOKSTRUCT *) lParam;
	switch (wParam) {
		case WM_KEYDOWN:
		case WM_SYSKEYDOWN:
			process_key_pressed(kbhook);
			break;

		case WM_KEYUP:
		case WM_SYSKEYUP:
			process_key_released(kbhook);
			break;

		default:
			// In theory this *should* never execute.
			logger(LOG_LEVEL_INFO,	"%s [%u]: Unhandled Windows keyboard event: %#X.\n",
					__FUNCTION__, __LINE__, (unsigned int) wParam);
			break;
	}

	LRESULT hook_result = -1;
	if (nCode < 0 || event.reserved ^ 0x01) {
		hook_result = CallNextHookEx(keyboard_event_hhook, nCode, wParam, lParam);
	}
	else {
		logger(LOG_LEVEL_DEBUG,	"%s [%u]: Consuming the current event. (%li)\n",
				__FUNCTION__, __LINE__, (long) hook_result);
	}

	return hook_result;
}