Sup*_*der 6 c# autohotkey sendkeys spotify
我有一个 AHK 脚本(如下),它在后台向 Spotify 桌面应用程序全局发送各种命令以执行各种操作,但是我玩了一个 MMO,它具有始终运行的反作弊功能,当它检测到 AHK 时会关闭游戏,因为人们可以将它用于宏等。
; "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
Run Code Online (Sandbox Code Playgroud)
反作弊不会检测/关心 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);
Run Code Online (Sandbox Code Playgroud)
此命令将播放/暂停当前歌曲,因为这是最终编号 (917504) 所对应的。Spotify 还提供了音量增大/减小的命令代码,但是它们会影响我 PC 的整个音量,而不仅仅是 Spotify,这显然不是我想要的。
我已经尝试了数百种PostMessage和SendMessage的组合,但我根本无法弄清楚如何发送键 'Ctrl' + 'Up' 来增加音量(反之亦然减少)。而在后台。我不希望窗口被带到前台等。
任何帮助是极大的赞赏。
我还提到了 AHK 脚本,因为从我的挖掘中,我认为ControlSend 函数是从源代码中的这一点开始运行的https://github.com/Lexikos/AutoHotkey_L/blob/90b5c2ac3208c38b9488a72fc3e6e4f9cf20b276/source/keyboard_mouse , Ipp#L135cfc对 C/C++ 不够了解,无法弄清楚如何覆盖需要窗口焦点等的函数。