Отправка ввода с клавиатуры в Spotify, когда он не в фокусе - PullRequest
5 голосов
/ 14 июля 2020
• 1000 обнаруживает AHK, потому что люди могут использовать его для макросов и т. д. c.
; "CTRL + Alt + UP"  Increase the volume.
^!Up::
DetectHiddenWindows, On
WinGet, winInfo, List, ahk_exe Spotify.exe
Loop, %winInfo%
{
    thisID := winInfo%A_Index%
    ControlFocus , , ahk_id %thisID%
    ControlSend, , ^{up}, ahk_id %thisID%
}
return

Античит не обнаруживает и не заботится о C# программах / приложениях, поэтому я переношу код на C# и нашли способ отправлять команды в приложение Spotify для выполнения большинства вещей, которые я хотел, через SendMessage :

private const int WM_KEYDOWN = 0x0100;
private const int WM_KEYUP = 0x0101; //Tried using these to no avail
private const int WM_KEYSYS = 0x0104;
private const int WM_ACTIVATEAPP = 0x001C;

var proc = Process.GetProcessesByName("Spotify").FirstOrDefault(p => !string.IsNullOrWhiteSpace(p.MainWindowTitle));
IntPtr hwnd = proc.MainWindowHandle;
SendMessage(hwnd, 0x0319, (IntPtr)0, (IntPtr)917504);

Эта команда будет воспроизводить / приостанавливать текущую песню так как это то, чему соответствует окончательный номер (917504). Spotify также предоставляет коды команд для увеличения / уменьшения громкости, однако они влияют на всю громкость моего P C, а не только на spotify, что, очевидно, не то, что я хочу.

Я пробовал буквально сотни комбинаций PostMessage и SendMessage , и я просто не могу понять, как отправить клавиши «Ctrl» + «Вверх», чтобы увеличить громкость (и наоборот, для уменьшения). в фоновом режиме . Я не хочу, чтобы окно выводилось на передний план, et c.

Любая помощь приветствуется.

Я также упомянул сценарий AHK, потому что из моих копаний я думаю, функция ControlSend запускается с этой точки в исходном коде https://github.com/Lexikos/AutoHotkey_L/blob/90b5c2ac3208c38b9488a72fc3e6e4f9cf20b276/source/keyboard_mouse.cpp#L135, однако я недостаточно понимаю C / C ++, чтобы понять, как переопределить функции, требующие фокус окна, et c.

...