首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

为什么小弟我用EnumWindows列出的窗口句柄都是1

2012-02-09 
为什么我用EnumWindows列出的窗口句柄都是1 - C++ Builder / Windows SDK/API为什么我用EnumWindows列出的

为什么我用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或正则表达式
//找到...

热点排行