diff --git a/frmMain.pas b/frmMain.pas index f2bcb7f..24638b5 100644 --- a/frmMain.pas +++ b/frmMain.pas @@ -51,9 +51,6 @@ type procedure GenerateDfmFile(const filename, frmname: string; wnd: HWND; PasList: TStrings); procedure GeneratePasFile(const filename, frmname: string; PasList: TStrings); - procedure GetWinInfo(wnd: HWND; ParentNode: TTreeNode); - procedure GetWinInfoStyle(wnd: HWND; ParentNode: TTreeNode); - procedure GetWinInfoExtendedStyle(wnd: HWND; ParentNode: TTreeNode); procedure EnableSavePas; procedure EnableWndInput; public @@ -65,125 +62,10 @@ var implementation -uses frmResults, Writers, DfmEngine, StyleNames, about1; +uses frmResults, Writers, DfmEngine, about1; {$R *.lfm} -procedure TMainForm.GetWinInfo(wnd: HWND; ParentNode: TTreeNode); -var - len, i, cbcount: integer; - Text: PChar; - class_name: array [0..100] of char; - R1, R2: TRect; - node1, node2: TTreeNode; - childlist: TList; - EnumParams: TEnumParams; - parentWnd: HWND; - itemtext: array [0..300] of char; -begin - if not IsWindow(wnd) then - begin - Results.TreeView1.Items.AddChild(ParentNode, 'Handle = (INVALID HANDLE)'); - Exit; - end; - childlist := TList.Create; - len := GetWindowTextLength(wnd) + 1; - GetMem(Text, len); - GetWindowText(wnd, Text, len); - GetWindowRect(wnd, R1); - Windows.GetClientRect(wnd, R2); - GetClassName(wnd, class_name, 100); - parentWnd := GetParent(wnd); - EnumParams.List := childlist; - EnumParams.ParentWnd := wnd; - EnumChildWindows(wnd, @EnumChildrenProc, integer(@EnumParams)); - - with Results.TreeView1.Items do - begin - AddChild(ParentNode, 'Handle = ' + IntToStr(wnd)); - AddChild(ParentNode, 'Caption = ' + Text); - AddChild(ParentNode, 'Class name = ' + class_name); - AddChild(ParentNode, 'Parent Handle = ' + IntToStr(parentWnd)); - GetWinInfoStyle(wnd, ParentNode); - GetWinInfoExtendedStyle(wnd, ParentNode); - node1 := AddChild(ParentNode, 'Placement'); - AddChild(node1, 'Left = ' + IntToStr(R1.Left)); - AddChild(node1, 'Top = ' + IntToStr(R1.Top)); - AddChild(node1, 'Width = ' + IntToStr(R1.Right - R1.Left)); - AddChild(node1, 'Height = ' + IntToStr(R1.Bottom - R1.Top)); - AddChild(node1, 'ClientWidth = ' + IntToStr(R2.Right)); - AddChild(node1, 'ClientHeight = ' + IntToStr(R2.Bottom)); - if (CompareText(class_name, 'COMBOBOX') = 0) then - begin - node1 := AddChild(ParentNode, '[List Data]'); - cbcount := SendMessage(wnd, CB_GETCOUNT, 0, 0); - for i := 1 to cbcount do - begin - SendMessage(wnd, CB_GETLBTEXT, i - 1, longint(@itemtext)); - node2 := AddChild(node1, 'Item #' + IntToStr(i)); - AddChild(node2, 'Text = ' + itemtext); - AddChild(node2, 'Data = ' + - IntToStr(SendMessage(wnd, CB_GETITEMDATA, i - 1, 0))); - end; - end; - if childlist.Count > 0 then - begin - node1 := AddChild(ParentNode, 'Children information'); - for i := 1 to childlist.Count do - begin - node2 := AddChild(node1, 'Child #' + IntToStr(i)); - GetWinInfo(integer(childlist[i - 1]), node2); - end; - end; - end; - FreeMem(Text); - childlist.Free; -end; - -procedure TMainForm.GetWinInfoStyle(wnd: HWND; ParentNode: TTreeNode); -var - style: Integer; - list: TStringList; - node1: TTreeNode; - i: Integer; -begin - style := GetWindowLong(wnd, GWL_STYLE); - list := GetWindowStyleNames(style); - - with Results.TreeView1.Items do - begin - node1 := AddChild(ParentNode, 'Style'); - AddChild(node1, 'Value = ' + IntToStr(style)); - - for i := 0 to list.Count - 1 do - AddChild(node1, list[i]); - end; - - list.Free(); -end; - -procedure TMainForm.GetWinInfoExtendedStyle(wnd: HWND; ParentNode: TTreeNode); -var - style: Integer; - list: TStringList; - node1: TTreeNode; - i: Integer; -begin - style := GetWindowLong(wnd, GWL_EXSTYLE); - list := GetExtendedWindowStyleNames(style); - - with Results.TreeView1.Items do - begin - node1 := AddChild(ParentNode, 'Extended Style'); - AddChild(node1, 'Value = ' + IntToStr(style)); - - for i := 0 to list.Count - 1 do - AddChild(node1, list[i]); - end; - - list.Free(); -end; - procedure TMainForm.InformationClick(Sender: TObject); var wnd: HWND; @@ -200,7 +82,7 @@ begin Results.Show; Results.TreeView1.Items.Clear; - GetWinInfo(wnd, nil); + Results.GetWinInfo(wnd, nil); end; procedure TMainForm.BrowsePasClick(Sender: TObject); diff --git a/frmResults.pas b/frmResults.pas index 7cd5fe7..52c88bf 100644 --- a/frmResults.pas +++ b/frmResults.pas @@ -16,9 +16,10 @@ type procedure TreeView1Change(Sender: TObject; Node: TTreeNode); procedure Savelistdata1Click(Sender: TObject); private - { Private declarations } + procedure GetWinInfoStyle(wnd: HWND; ParentNode: TTreeNode); + procedure GetWinInfoExtendedStyle(wnd: HWND; ParentNode: TTreeNode); public - { Public declarations } + procedure GetWinInfo(wnd: HWND; ParentNode: TTreeNode); end; var @@ -26,8 +27,9 @@ var implementation -{$R *.lfm} +uses DfmEngine, StyleNames; +{$R *.lfm} procedure TResults.TreeView1Change(Sender: TObject; Node: TTreeNode); begin @@ -63,4 +65,119 @@ begin CloseFile(f); end; +procedure TResults.GetWinInfo(wnd: HWND; ParentNode: TTreeNode); +var + len, i, cbcount: integer; + Text: PChar; + class_name: array [0..100] of char; + R1, R2: TRect; + node1, node2: TTreeNode; + childlist: TList; + EnumParams: TEnumParams; + parentWnd: HWND; + itemtext: array [0..300] of char; +begin + if not IsWindow(wnd) then + begin + TreeView1.Items.AddChild(ParentNode, 'Handle = (INVALID HANDLE)'); + Exit; + end; + childlist := TList.Create; + len := GetWindowTextLength(wnd) + 1; + GetMem(Text, len); + GetWindowText(wnd, Text, len); + GetWindowRect(wnd, R1); + Windows.GetClientRect(wnd, R2); + GetClassName(wnd, class_name, 100); + parentWnd := GetParent(wnd); + EnumParams.List := childlist; + EnumParams.ParentWnd := wnd; + EnumChildWindows(wnd, @EnumChildrenProc, integer(@EnumParams)); + + with TreeView1.Items do + begin + AddChild(ParentNode, 'Handle = ' + IntToStr(wnd)); + AddChild(ParentNode, 'Caption = ' + Text); + AddChild(ParentNode, 'Class name = ' + class_name); + AddChild(ParentNode, 'Parent Handle = ' + IntToStr(parentWnd)); + GetWinInfoStyle(wnd, ParentNode); + GetWinInfoExtendedStyle(wnd, ParentNode); + node1 := AddChild(ParentNode, 'Placement'); + AddChild(node1, 'Left = ' + IntToStr(R1.Left)); + AddChild(node1, 'Top = ' + IntToStr(R1.Top)); + AddChild(node1, 'Width = ' + IntToStr(R1.Right - R1.Left)); + AddChild(node1, 'Height = ' + IntToStr(R1.Bottom - R1.Top)); + AddChild(node1, 'ClientWidth = ' + IntToStr(R2.Right)); + AddChild(node1, 'ClientHeight = ' + IntToStr(R2.Bottom)); + if (CompareText(class_name, 'COMBOBOX') = 0) then + begin + node1 := AddChild(ParentNode, '[List Data]'); + cbcount := SendMessage(wnd, CB_GETCOUNT, 0, 0); + for i := 1 to cbcount do + begin + SendMessage(wnd, CB_GETLBTEXT, i - 1, longint(@itemtext)); + node2 := AddChild(node1, 'Item #' + IntToStr(i)); + AddChild(node2, 'Text = ' + itemtext); + AddChild(node2, 'Data = ' + + IntToStr(SendMessage(wnd, CB_GETITEMDATA, i - 1, 0))); + end; + end; + if childlist.Count > 0 then + begin + node1 := AddChild(ParentNode, 'Children information'); + for i := 1 to childlist.Count do + begin + node2 := AddChild(node1, 'Child #' + IntToStr(i)); + GetWinInfo(integer(childlist[i - 1]), node2); + end; + end; + end; + FreeMem(Text); + childlist.Free; +end; + +procedure TResults.GetWinInfoStyle(wnd: HWND; ParentNode: TTreeNode); +var + style: Integer; + list: TStringList; + node1: TTreeNode; + i: Integer; +begin + style := GetWindowLong(wnd, GWL_STYLE); + list := GetWindowStyleNames(style); + + with TreeView1.Items do + begin + node1 := AddChild(ParentNode, 'Style'); + AddChild(node1, 'Value = ' + IntToStr(style)); + + for i := 0 to list.Count - 1 do + AddChild(node1, list[i]); + end; + + list.Free(); +end; + +procedure TResults.GetWinInfoExtendedStyle(wnd: HWND; ParentNode: TTreeNode); +var + style: Integer; + list: TStringList; + node1: TTreeNode; + i: Integer; +begin + style := GetWindowLong(wnd, GWL_EXSTYLE); + list := GetExtendedWindowStyleNames(style); + + with TreeView1.Items do + begin + node1 := AddChild(ParentNode, 'Extended Style'); + AddChild(node1, 'Value = ' + IntToStr(style)); + + for i := 0 to list.Count - 1 do + AddChild(node1, list[i]); + end; + + list.Free(); +end; + end.