3

我想从 C# 自动化一个名为 Spotify 的程序,最好的方法(我认为)是通过触发假按键。我想编程暂停播放,但我对这些东西知之甚少,无法找到除按键之外的另一种方式。因此,我使用 Visual Studio 的 Spy++ 来查看按下键盘上的播放按钮时 Spotify 收到的消息,我将该消息中的数据复制到我的控制台应用程序中并运行它,当我运行时,我可以在 Spy++ 的消息日志中看到 PostMessage,所以这是有效的,但它不会暂停/播放我的音乐。我想这是因为我还必须发送另一个带有另一个目的地的 PostMessage,但是我怎么知道还要发送什么?

留言电话:

MessageHelper.PostMessage((int)hwndSpotify, 0x100, 0x000000B3, 0x01000001);

我希望有人熟悉这个并且可以帮助我。

4

2 回答 2

4

要使 Spotify 自动化,首先您必须获得具有以下类名的窗口句柄:SpotifyMainWindow(使用 FindWindow())。

然后,您可以使用 SendMessage() 方法将 WM_APPCOMMAND 消息发送到 Spotify 的窗口。

按照一个简单的代码来做到这一点:

internal class Win32
{
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
    internal static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

    internal class Constants
    {
        internal const uint WM_APPCOMMAND = 0x0319;
    }
}

public enum SpotifyAction : long
{ 
    PlayPause = 917504,
    Mute = 524288,
    VolumeDown = 589824,
    VolumeUp = 655360,
    Stop = 851968,
    PreviousTrack = 786432,
    NextTrack = 720896
}

例如,播放或暂停当前曲目:

Win32.SendMessage(hwndSpotify, Win32.Constants.WM_APPCOMMAND, IntPtr.Zero, new IntPtr((long)SpotifyAction.PlayPause));
于 2011-12-11T01:05:56.493 回答
0

按下“播放按钮”会产生一个虚拟键码 - 有关官方列表,请参见http://msdn.microsoft.com/en-us/library/dd375731%28v=VS.85%29.aspx

例如,您可以在那里找到VK_VOLUME_UP VK_MEDIA_PLAY_PAUSE VK_ZOOM

甚至一些遥控器也会将这些代码转换为尽可能与现有软件兼容。

这些是在 Windows ME (!) 出现并且仍在使用的那一天引入的 - 至少在我检查我的 Windows 2008 R2 的注册表时!

基本上,Windows 将某些 VK* 转换为具有应用程序侦听的某些代码的 WM_APPCOMMAND 消息......
如果密钥与启动应用程序有关(即邮件、浏览器等),那么魔法就会通过 Windows 资源管理器发生,它读取来自Software\ Microsoft\ Windows\ CurrentVersion\ Explorer\ AppKeyHKLM 或 HKCU的注册表的映射(通过关联或直接执行) 。

一些旧的链接,但似乎仍然有效的信息:

于 2011-12-10T19:24:36.203 回答