Untitled
unknown
c_cpp
7 months ago
2.6 kB
20
Indexable
#include <windows.h>
#include <mmsystem.h> // Для mciSendString
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "winmm.lib")
// Поток для проигрывания MP3
DWORD WINAPI PlaySoundThread(LPVOID param) {
const wchar_t* filename = (const wchar_t*)param;
// Получаем путь к исполняемому файлу и подставляем имя MP3
wchar_t path[MAX_PATH];
GetModuleFileNameW(NULL, path, MAX_PATH);
wchar_t* slash = wcsrchr(path, L'\\');
if (slash) *(slash + 1) = L'\0'; // Обрезаем до папки
wcscat_s(path, MAX_PATH, filename);
// Команда MCI: открыть файл
wchar_t cmd[256];
swprintf_s(cmd, 256, L"open \"%s\" type mpegvideo alias mysound", path);
mciSendStringW(cmd, NULL, 0, NULL);
// Проиграть файл (асинхронно) и дождаться окончания
mciSendStringW(L"play mysound wait", NULL, 0, NULL);
// Закрыть дескриптор в MCI
mciSendStringW(L"close mysound", NULL, 0, NULL);
return 0;
}
// Хук-процедура (низкоуровневая клавиатура)
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode == HC_ACTION && wParam == WM_KEYDOWN) {
KBDLLHOOKSTRUCT *kbd = (KBDLLHOOKSTRUCT*)lParam;
if (kbd->vkCode == 'Q') {
// Запустить поток для проигрывания q.mp3
CreateThread(NULL, 0, PlaySoundThread, (LPVOID)L"q.mp3", 0, NULL);
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR, int) {
// Скрыть консольное окно (если есть)
HWND hwndConsole = GetConsoleWindow();
if (hwndConsole) ShowWindow(hwndConsole, SW_HIDE);
// Устанавливаем глобальный хук клавиатуры
HHOOK hook = SetWindowsHookExW(WH_KEYBOARD_LL, LowLevelKeyboardProc,
GetModuleHandle(NULL), 0);
if (!hook) {
MessageBoxW(NULL, L"Не удалось установить хук.", L"Ошибка", MB_OK);
return 1;
}
// Цикл обработки сообщений (нужен, чтобы хук работал)
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
// Без окон мы всё равно должны вызвать DispatchMessage
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnhookWindowsHookEx(hook);
return 0;
}Editor is loading...
Leave a Comment