C# PostMessage 到 Spotify
Posted
技术标签:
【中文标题】C# PostMessage 到 Spotify【英文标题】:C# PostMessage to 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);
感谢您提供的任何帮助
/摩根
【问题讨论】:
尝试比“它不起作用”更具体一点。什么行不通?发生什么了?有错误信息吗?你试过调试吗? 【参考方案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
。
【讨论】:
以上是关于C# PostMessage 到 Spotify的主要内容,如果未能解决你的问题,请参考以下文章