Выяснил, где у меня подтормаживает.

Код:
	if (PeekMessage(&msg, NULL, 0, 0, 0)) {
		if (GetMessage(&msg, NULL, 0, 0)) {		// Получить сообщение
			TranslateMessage(&msg);				// Если сообщение не QUIT,
			DispatchMessage(&msg);				// оттранслировать его окну
		}
		else 	SysExit();						// Иначе выйти закрыв все устройства
	}
При отладке дебаггером, тормозят две строчки PeekMessage и GetMessage. Причем ТОЛЬКО если есть хук, даже пустой, установленный моей программой. Тормозят где-то по 2-3 секунды каждая, потом программа идет далее.

---------- Post added at 14:15 ---------- Previous post was at 14:09 ----------

Думаю, что дело в хуке.

В режиме, когда подвисают PeekMessage и т.д. (а это когда активно консольное окно эмулятора), функция хука, хотя и установлена, ПЕРЕСТАЕТ работать. Это определяется просто - печатаю в специальное окно сообщение 'Hool action', когда хук вызывается. Так вот в этом режиме оно перестает печататься. Это значит, что функция хука пропадает, и возможно на ней все и подвисает.

---------- Post added at 14:17 ---------- Previous post was at 14:15 ----------

Обработчик хука таков:

Код:
LRESULT CALLBACK KeyboardHook(int nCode, WPARAM wParam, LPARAM lParam)
{

	printf("Hook action\n");

	return CallNextHookEx(hhKeyboardHook, nCode, wParam, lParam);
}
Подвисает при активном консольном окне хоть с со строчкой printf, хоть без нее. И прекрасно работает при переключении на окно эмулятора.

Инициализация хука такая:

hhKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHook, hInst, 0); // Установить глобальный хук клавиатуры