【问题标题】:C# PostMessage to SpotifyC# PostMessage 到 Spotify
【发布时间】:2015-09-18 12:38:18
【问题描述】:

我正在使用 C# 查找 Space 的按键(Pause/Play link 的键盘快捷键)并将其发布到 Spotify 应用程序。 我可以成功找到正确的窗口并使用第一部分代码复制它的名称。 但是当我尝试使用几乎完全相同的代码来发布消息时,它就不起作用了。我怀疑 PostMessage 部分有问题,但我不知道是什么。

代码:

private void button1_Click(object sender, EventArgs e)
{
    foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses())
    {
        if (p.ProcessName == "Spotify")
        {
            if (!p.MainWindowTitle.StartsWith("Spotify") && p.MainWindowTitle.Length > 0)
            {
                label1.Text = p.MainWindowTitle;
                Console.WriteLine(label1.Text);
                break;
            }
            else
            {
                label1.Text = "No Music";
            }
        }
    }
}

[DllImport("user32.dll", SetLastError = true)]
static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);

private static Int32 WM_KEYDOWN = 0x0100;
private static Int32 WM_KEYUP = 0x0101;

private void button2_Click(object sender, EventArgs e)
{
    foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses())
    {
        if (p.ProcessName == "Spotify")
        {
            Console.WriteLine(p.MainWindowTitle);
            if (p.MainWindowTitle.Length > 0)
            {
                PostMessage(p.MainWindowHandle, (uint)WM_KEYDOWN, (IntPtr)Keys.Space, IntPtr.Zero);
            }
        }
    }
}

感谢您提供的任何帮助

/摩根

【问题讨论】:

  • 尝试比“它不起作用”更具体一点。什么行不通?发生什么了?有错误信息吗?你试过调试吗?

标签: c# spotify postmessage


【解决方案1】:

改为发送多媒体播放/暂停键的键码。 Spotify 客户端会对此进行侦听。

详情请见this SO answer

【讨论】:

  • 是的,这比我的方式更安全,更合理:)
【解决方案2】:

很遗憾,Spotify 不是本机 Windows 应用程序。就 UI 而言,它主要只是 Chrome 的一个包装器。这在使用 Spy++ 时很容易看到 - 在 Spotify 窗口中按空格键不会触发任何WM_KEYDOWN 消息或任何类似的消息。

也许可以找到一些其他的方法来伪造它(例如,WM_LBUTTONDOWN 似乎被正确发送),但避免 Windows 消息传递的应用程序通常更难以自动化。

幸运的是,应用程序确实响应了WM_COMMAND。以下对我有用:

PostMessage(hwnd, WM_COMMAND, 0x18007D07, 0x000E0880);

不过,我不能告诉你这有多安全。 wParam 可能会保持不变,因为这只是通知代码和控制 ID。不过,我不确定lParam

【讨论】:

    猜你喜欢
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多