if (LPCSTR(取程序類名(hwnd)) == LPCSTR("CalcFrame")) // ❌ 比較指標位址,非字串內容
取程序類名 回傳區域陣列 TCHAR 類名[255] 退化為指標,每次呼叫位址不同。LPCSTR("CalcFrame") 是字面值常數區位址。== 比較的是**兩個指標的記憶體位址**,永遠為 false。#include <tchar.h> // _tcscmp 自動對應 ANSI/Unicode
if (_tcscmp(取程序類名(hwnd), _T("CalcFrame")) == 0) {
// 相等
}
std::wstring className = 取程序類名(hwnd); // 需修改回傳型別為 std::wstring
if (className == L"CalcFrame") { ... }
CString className = 取程序類名(hwnd);
if (className == _T("CalcFrame")) { ... } // CString 多載 == 比較內容
int _tmain(int argc, _TCHAR* argv[]) {
HWND hwnd;
while (true) {
hwnd = GetForegroundWindow();
CString className = GetWindowClassName(hwnd); // 回傳 CString
_tprintf(_T("類名: %s\n"), className.GetString());
if (className == _T("CalcFrame")) {
MessageBox(NULL, _T("真"), _T("真"), MB_OK);
} else {
MessageBox(NULL, _T("假"), _T("假"), MB_OK);
}
Sleep(500); // 避免佔滿 CPU
}
return 0;
}
CString GetWindowClassName(HWND hwnd) {
TCHAR buf[256];
GetClassName(hwnd, buf, 256);
return CString(buf);
}
== 內容比較。== 期望比較字串內容。LPCSTR(...) == LPCSTR("...") 比較的是指標位址,非字串內容。請用 _tcscmp (TCHAR 通用) 或改用 CString/std::wstring 直接用 == 比較。