为什么我用EnumWindows列出的窗口句柄都是1 - C++ Builder / Windows SDK/API
为什么我用EnumWindows列出的窗口句柄都是1
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam )
{
TMemo *p=(TMemo *)lParam;
p->Lines->Add(IntToStr(hwnd)) ;
Char buffer[255];
SendMessage(hwnd,WM_GETTEXT,255,(long)buffer) ;
p->Lines->Add(buffer) ;
GetClassName(hwnd,buffer,255);
p->Lines->Add(buffer) ;
return true;
}
运行结果
1
YzDockEdgeClass
1
p - Unit1.cpp (19)
THintWindow
1
C++Builder 6
tooltips_class32
1
tooltips_class32
1
tooltips_class32
1
CiceroUIWndFrame
CiceroUIWndFrame
1
tooltips_class32
1
「开始」菜单
DV2ControlHost
1
tooltips_class32
1
tooltips_class32
1
Shell_TrayWnd
1
Auto-Suggest Dropdown
1
SysFader
SysFader
1
Auto-Suggest Dropdown
1
SysFader
SysFader
1
Auto-Suggest Dropdown
1
SysFader
SysFader
1
Auto-Suggest Dropdown
1
SysFader
SysFader
1
Auto-Suggest Dropdown
1
SysFader
SysFader
1
Auto-Suggest Dropdown
1
SysFader
SysFader
1
YzDockDragClass
1
TXFloatingWnd
TXGuiFoundation
1
TXFloatingWnd
TXGuiFoundation
1
TXFloatingWnd
TXGuiFoundation
1
TXFloatingWnd
TXGuiFoundation
1
TXFloatingWnd
TXGuiFoundation
1
TXFloatingWnd
TXGuiFoundation
1
TXFloatingWnd
TXGuiFoundation
1
TXFloatingWnd
TXGuiFoundation
1
TXFloatingWnd
TXGuiFoundation
1
TXFloatingWnd
TXGuiFoundation
1
QQ2009
TXGuiFoundation
1
TXFloatingWnd
TXGuiFoundation
1
TXFloatingWnd
TXGuiFoundation
1
QQ2009
TXGuiFoundation
1
CodeParamWindow
TTokenWindow
1
TXFloatingWnd
TXGuiFoundation
1
tooltips_class32
1
tooltips_class32
1
tooltips_class32
1
tooltips_class32
1
Auto-Suggest Dropdown
1
SysFader
SysFader
1
CiceroUIWndFrame
CiceroUIWndFrame
1
TF_FloatingLangBar_WndTitle
CiceroUIWndFrame
1
Form1
TForm1
1
Project2
TApplication
1
tooltips_class32
1
Debug
TXToolDockForm
1
Database Engine Error
TDbEngineErrorDlg
1
Unit1.cpp
TEditWindow
1
Object Inspector
TPropertyInspector
[解决办法]
我不知道,为什么编译没错,但运行的确不对.因为hwnd是void *型,所以直接用IntToStr不能得到正确结果,这样就可以了:
p->Lines->Add(IntToStr((int)hwnd)) ;
[解决办法]
看了一下IntToStr定义,它的参数是重载的,支持多类型,如果是void *,它把它转成bool的了,因为你的hwnd不为0,所以结果为1
[解决办法]
如果窗口标题已知,要找它的HANDLE,可直接用FindWindow/FindWindowEx(精确查找),如果要以窗口标题进行模糊搜索,就用你上面的程序好了.
SendMessage(hwnd,WM_GETTEXT,255,(long)buffer) ; //得到窗口标题
if (strstr(buffer,"你要找的部分标题")!=NULL) //这里,你可用String,std:string或正则表达式
//找到...