您好,请教不知道窗体标题的时候怎样取得窗体的句柄 ? 谢谢(40分)

  • 主题发起人 主题发起人 wjlsnet
  • 开始时间 开始时间
W

wjlsnet

Unregistered / Unconfirmed
GUEST, unregistred user!
您好,请教不知道窗体标题的时候怎样取得窗体的句柄 ?
还有,如何取得系统中已经打开的所有窗口的句柄 ? 谢谢
 
1.可以用FindWindow(类名,nil)
 
2.
hbezwwl (2002-4-19 6:38:00)
---------------------------------------------------------
这个函数用来枚举所有屏幕上的顶层窗口,办法是先将句柄传给每一个窗口,然后再传送给
应用程序定义的回调函数。
函数原型EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam);
lpEnumFunc:指向一个应用程序定义的回调函数指针
lParam:指定一个传递给回调函数的应用程序定义值

function FindWindowHandle (HuntFor: string): HWnd;
var
Proc: TFarProc;
HuntRec: PHuntRec;
begin
GetMem(HuntRec, SizeOf(THuntRec));
HuntRec^.HuntingFor := HuntFor;
HuntRec^.WindowFound := 0;
Proc := MakeProcInstance(@EnumWindowsFunc, HInstance);
EnumWindows(Proc, Longint(HuntRec));
FreeProcInstance(Proc);
FindWindowHandle := HuntRec^.WindowFound;
FreeMem(HuntRec, SizeOf(THuntRec));
end; {FindWindowHandle}
===============================================================

wql (2002-4-19 9:23:00)
-----------------------------------------------------------------
Function _EnumCallBackProc(_HWnd:HWnd;_lParam:LPARAM):BOOL;StdCall{必须加};
Var
TmS : Packed Array [1..119] Of Char;
Begin
Result:=Bool(True); // 必须加

// _HWnd为所有窗口的句柄(不含窗内的Edit,Button等):
// 例如找到桌面的窗口:
If (GetWindowText(_HWnd,PChar(@TmS),119)<>0) Then
If (Pos('PROGRAM MANAGE',Trim(UpperCase(String(TmS))))<>0) Then
Begin
ShowMessage('确认隐藏桌面 !');
ShowWindow(_HWnd,SW_HIDE);
ShowMessage('确认不隐藏桌面 !');
ShowWindow(_HWnd,SW_NORMAL);
End;
// 当然找桌面不一定用这种方法,我告诉你的只是可以通过这种方式找到
// FindWindow找不到的Windows。
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@_EnumCallBackProc,0);
end;
 
问题是你现在知道什么????
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
rHandle:THandle;
begin
s:=className;
rHandle:=findwindow(pchar(s),nil);
showmessage(s+' '+inttostr(rHandle));
end;
 
如何取得系统中已经打开的所有窗口的句柄 ? 谢谢
 
EnumWindows() api可以获得所有进程窗口的句柄,如果你想得到的一个非隐藏的
窗口的句柄,用windowfrompoint(point) api 很容易,例如:
var p:Tpoint;h:hwnd;
begin
p.x:=10;
p.y:=20;
h:=widowfrompoint(p);
end;
h是屏幕上(10,20)点的窗口的句柄.该函数配合getcursorpos(point)使用
可以鼠标指谁,得到谁的句柄.(不过后台隐藏窗口不行要用EnumWindows() api).

 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部