获取一个窗口的所有子窗口(包括嵌套) - 回复 asian 的问题
生活随笔
收集整理的這篇文章主要介紹了
获取一个窗口的所有子窗口(包括嵌套) - 回复 asian 的问题
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
問題來源: http://www.cnblogs.com/del/archive/2008/12/10/1345752.html#1397451
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls;typeTForm1 = class(TForm)Panel1: TPanel;Panel2: TPanel;Edit1: TEdit;Edit2: TEdit;Edit3: TEdit;Edit4: TEdit;Edit5: TEdit;Button1: TButton;procedure Button1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}{這應(yīng)該使用遞歸函數(shù)} procedure GetChildWindows(h: HWND); varbuf: array[0..255] of Char; {這個(gè)緩沖區(qū)是獲取類名用的, 如果不需要可以刪除} beginh := GetWindow(h, GW_CHILD); {第一個(gè)子窗口}while h <> 0 dobegin{下面兩行是要執(zhí)行的操作, 并假定只處理 TEdit}GetClassName(h, buf, Length(buf));if buf = 'TEdit' then ShowMessageFmt('%s:%d', [buf, h]);h := GetWindow(h, GW_HWNDNEXT); {下一個(gè)子窗口}GetChildWindows(h); {遞歸}end; end;{測試} procedure TForm1.Button1Click(Sender: TObject); beginGetChildWindows(Handle); end;end.
窗體文件:
object Form1: TForm1Left = 0Top = 0Caption = 'Form1'ClientHeight = 206ClientWidth = 318Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'Tahoma'Font.Style = []OldCreateOrder = FalsePixelsPerInch = 96TextHeight = 13object Panel1: TPanelLeft = 8Top = 8Width = 177Height = 190Caption = 'Panel1'TabOrder = 0object Panel2: TPanelLeft = 8Top = 112Width = 161Height = 75Caption = 'Panel2'TabOrder = 0object Edit5: TEditLeft = 24Top = 8Width = 121Height = 21TabOrder = 0Text = 'Edit5'endendobject Edit3: TEditLeft = 32Top = 16Width = 121Height = 21TabOrder = 1Text = 'Edit3'endobject Edit4: TEditLeft = 32Top = 43Width = 121Height = 21TabOrder = 2Text = 'Edit4'endendobject Edit1: TEditLeft = 191Top = 24Width = 121Height = 21TabOrder = 1Text = 'Edit1'endobject Edit2: TEditLeft = 191Top = 51Width = 121Height = 21TabOrder = 2Text = 'Edit2'endobject Button1: TButtonLeft = 216Top = 152Width = 75Height = 25Caption = 'Button1'TabOrder = 3OnClick = Button1Clickend end
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls;typeTForm1 = class(TForm)Panel1: TPanel;Panel2: TPanel;Edit1: TEdit;Edit2: TEdit;Edit3: TEdit;Edit4: TEdit;Edit5: TEdit;Button1: TButton;procedure Button1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}{這應(yīng)該使用遞歸函數(shù)} procedure GetChildWindows(h: HWND); varbuf: array[0..255] of Char; {這個(gè)緩沖區(qū)是獲取類名用的, 如果不需要可以刪除} beginh := GetWindow(h, GW_CHILD); {第一個(gè)子窗口}while h <> 0 dobegin{下面兩行是要執(zhí)行的操作, 并假定只處理 TEdit}GetClassName(h, buf, Length(buf));if buf = 'TEdit' then ShowMessageFmt('%s:%d', [buf, h]);h := GetWindow(h, GW_HWNDNEXT); {下一個(gè)子窗口}GetChildWindows(h); {遞歸}end; end;{測試} procedure TForm1.Button1Click(Sender: TObject); beginGetChildWindows(Handle); end;end.
窗體文件:
object Form1: TForm1Left = 0Top = 0Caption = 'Form1'ClientHeight = 206ClientWidth = 318Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'Tahoma'Font.Style = []OldCreateOrder = FalsePixelsPerInch = 96TextHeight = 13object Panel1: TPanelLeft = 8Top = 8Width = 177Height = 190Caption = 'Panel1'TabOrder = 0object Panel2: TPanelLeft = 8Top = 112Width = 161Height = 75Caption = 'Panel2'TabOrder = 0object Edit5: TEditLeft = 24Top = 8Width = 121Height = 21TabOrder = 0Text = 'Edit5'endendobject Edit3: TEditLeft = 32Top = 16Width = 121Height = 21TabOrder = 1Text = 'Edit3'endobject Edit4: TEditLeft = 32Top = 43Width = 121Height = 21TabOrder = 2Text = 'Edit4'endendobject Edit1: TEditLeft = 191Top = 24Width = 121Height = 21TabOrder = 1Text = 'Edit1'endobject Edit2: TEditLeft = 191Top = 51Width = 121Height = 21TabOrder = 2Text = 'Edit2'endobject Button1: TButtonLeft = 216Top = 152Width = 75Height = 25Caption = 'Button1'TabOrder = 3OnClick = Button1Clickend end
轉(zhuǎn)載于:https://www.cnblogs.com/del/archive/2008/12/11/1352465.html
總結(jié)
以上是生活随笔為你收集整理的获取一个窗口的所有子窗口(包括嵌套) - 回复 asian 的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server Managemen
- 下一篇: 寒冬悟道者马云:阿里巴巴逢单出击(4)