2012-09-16 32 views
0

我想用傳送WM_APPCOMMAND Spotify的C++的SendMessage()Spotify的不工作(C++)

我當前的代碼看起來像這樣:

DWORD dwThreadId = GetCurrentThreadId(); 
HDESK hDesktop = GetThreadDesktop(dwThreadId); 
EnumWindows((WNDENUMPROC)&WndEnumProc, 0); 

還有:

BOOL CALLBACK Remote::WndEnumProc(HWND hwnd, LPARAM lParam) 
{ 
    TCHAR className[MAX_PATH]; 
    GetClassName(hwnd, className, sizeof(className)); 
    string name = className; 
    if (name.compare("SpotifyMainWindow") == 0) { 
     cout << SendMessage(hwnd, WM_APPCOMMAND, 0, APPCOMMAND_MEDIA_PLAY_PAUSE) << name << endl; 
    } 
    return TRUE; 
} 

頭文件:

class Remote 
{ 
public: 
    static BOOL CALLBACK WndEnumProc(HWND, LPARAM); 
}; 

問題是它返回0SpotifyMainWindow。 它打印1或0(SendMessage()的返回值)和句柄的類。總而言之,它意味着它試圖將消息發送到SpotifyMainWindow,但無法發送。

如何解決這個問題?

+0

目前尚不清楚如何你的代碼沒有。在面值時,爲什麼不寫'name.compare(「0SpotifyMainWindow」)'?請說清楚失敗的模式是什麼。 –

+0

好吧,我會編輯它 –

+0

請參閱http://stackoverflow.com/questions/2301371/sendmessage-always-returns-zero。 – nneonneo

回答

3

WM_APPCOMMAND消息預計,「命令」中的lParam的高位字將被提供,你需要做的是這樣的:

SendMessage(hwnd, WM_APPCOMMAND, 0, MAKELPARAM(0,APPCOMMAND_MEDIA_PLAY_PAUSE));