2012-06-01 1066 views
4

這不是一個複雜的問題。我無法找到屬於iTunes的句柄。但是,儘管iTunes在後臺運行,但它一直告訴我它找不到窗口。於是我繼續檢查是否錯過鍵入窗口名稱,但是Spy ++向我指出我正在使用正確的窗口名稱和類名(請參見下文)。我確信這是一個小錯誤,但我似乎無法找到它。有沒有人有洞察力?提前致謝。FindWindow()找不到我的窗口[C++]

 HWND hwnd; 
     hwnd = FindWindow((LPCWSTR)"iTunes",(LPCWSTR)"iTunes"); 
    if (hwnd != 0){ 
     cout << "WINDOW FOUND" << endl; 
    } else { 
     cout << "WINDOW NOT FOUND" << endl; 
     cout << hwnd << endl; 
    } 

回答

5

您正在使用ANSI字符串用什麼似乎是FindWindow Unicode版本。

許多Win32函數實際上是一對函數和一個宏。例如,FindWindow大約是這樣定義的:

HWND WINAPI FindWindowA(LPCSTR lpClassName, LPCSTR lpWindowName); 
HWND WINAPI FindWindowW(LPCWSTR lpClassName, LPCWSTR lpWindowName); 

#if (UNICODE) 
# define FindWindow FindWindowW 
#else 
# define FindWindow FindWindowA 
#endif 

儘量明確地調用FindWindowA或使用寬字符串是這樣的:

HWND hwnd = FindWindow(L"iTunes", L"iTunes"); 
+0

這是一點問題都沒有。請記住,使用Win32時幾乎不需要投射。如果你是,你可能會傳遞錯誤的參數;我就是這麼想出你正在調用哪個版本的FindWindow。 – 3Doubloons