【发布时间】:2013-07-30 05:11:01
【问题描述】:
在 C++ 方面,我仍然是一个极端的菜鸟。我目前讨厌的一件事(截至目前)是 winAPI 中的 1,000,000,000 种不同类型的变量。我为检查窗口是否存在而制作的这个小程序非常快。但最难的部分是什么?只需将“字符串”比较在一起,看看它是否匹配。最简单的部分是最难的!
无论如何,我的问题是:我如何比较 a 和 toFind,看看它们是否匹配?
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam){
TCHAR a[260];
string toFind = "Google Chrome";
hwnd = GetParent(hwnd);
GetWindowText(hwnd, a, sizeof(a));
if(strcmp(a,toFind) == 0){ //doesn't work
cout << "found the window";
}
return TRUE;
}
【问题讨论】:
-
你编译时是否定义了
UNICODE?答案取决于TCHAR是wchar_t还是char。 -
@JesseGood "字符集:使用 Unicode 字符集"
-
@Jesse:没必要。
t系列的全部意义在于抽象出是否定义了UNICODE。 -
@JesseGood 我不得不将 TCHAR 用于 GetWindowText 函数。
-
您的代码中存在缓冲区溢出。
GetWindowText想要以字符为单位的大小,而您正在给它以字节为单位的大小。如果TCHAR是wchar_t,那么两者就不一样了。