2011-12-10 18 views
3

USER32 API定製PostMessage的我要自動執行從C#叫Spotify的計劃,要做到這一點的最佳方式(我認爲)是通過觸發按鍵假貨。我想編程暫停播放,並且我不知道這些東西是否可以找到比按鍵更多的方式。因此,我使用Visual Studio的Spy ++查看按鍵盤上的播放按鈕時Spotify獲得的消息,我將該消息中的數據複製到我的控制檯應用程序中並運行,當我運行時,我可以在Spy ++的消息記錄中看到PostMessage,所以這是工作,但它不會暫停/播放我的音樂。我想這是因爲我還必須發送另一個PostMessage與另一個目的地,但我怎麼知道還有什麼要發送?爲automatisation

發帖子呼籲:

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

我希望有人熟悉這一點,並能幫助我。

+0

你PostMessage的()的聲明是錯誤的,第1,第3和第4參數是IntPtr,而不是int。它在64位版本的Windows上無法正常工作。訪問pinvoke.net獲取正確的聲明。 –

+0

我已經將它設置爲:MessageHelper.PostMessage(hwndWinamp,0x100的(IntPtr的)0x000000B3,(IntPtr的)0x01000001); 同樣的問題。 – user1091566

+0

您可能想要了解Spotify是否支持UI自動化 - 這可能會使其更加可靠(SendMessage在運行跨進程時遇到嚴重挑戰)。 –

回答

2

要自動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)); 
+0

通過在十六進制中寫入它們的值來使這種自我記錄的清單常量。 –

+0

哇,太棒了!謝謝!工作得很好。我能再問你一個問題嗎?你是怎麼找到這些神奇的數字的?我能找到更多自己嗎?我如何自己找到它們? (那些有3個問題的人) – user1091566

+0

我最終想做的是給C#一個字符串,如「Time is out out」,C#將開始使用Spotify播放歌曲。所以在後臺它必須用字符串執行一個搜索命令並播放已找到的第一首歌曲。 – user1091566

0

按下虛擬鍵碼「播放buttion」的結果 - 一個正式名單見http://msdn.microsoft.com/en-us/library/dd375731%28v=VS.85%29.aspx

在那裏找到例如VK_VOLUME_UPVK_MEDIA_PLAY_PAUSEVK_ZOOM

還有一些遙控轉換爲這些代碼儘可能與現有軟件兼容的。

這些介紹,早在天當Windows ME走了出來,仍然在使用(!) - 至少,當我檢查我的Windows 2008 R2的註冊表!

基本的Windows轉換某些VK *與該應用程序監聽特定代碼WM_APPCOMMAND消息...
如果密鑰有事情做與啓動應用程序做(即郵件,瀏覽器等),那麼魔術通過Windows資源管理器發生,它從註冊表Software\ Microsoft\ Windows\ CurrentVersion\ Explorer\ AppKey--無論是HKLM還是HKCU讀取映射(通過關聯或直接執行)。

與老一些的聯繫,但它似乎仍然有效的信息: