📄 unit1.~pas
字号:
unit unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ToolWin, ComCtrls, ImgList, Grids, StdCtrls, ExtCtrls,
shellapi, DB, ADODB;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N5: TMenuItem;
ImageList1: TImageList;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
TreeView1: TTreeView;
StatusBar1: TStatusBar;
OpenDialog1: TOpenDialog;
N9: TMenuItem;
ImageList2: TImageList;
TreeView2: TTreeView;
N4: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
Splitter1: TSplitter;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
procedure N8Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure TreeView2DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure TreeView2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;State: TDragState; var Accept: Boolean);
procedure N4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TreeView2DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
parentnode:Ttreenode;
function EnumWindowsProc(AhWnd:LongInt;AForm:TForm1):boolean;stdcall;//enumerate the top window
implementation
uses
unit2;
{$R *.dfm}
function EnumchildWindowsProc(Bhwnd:LongInt;AForm:TForm1):boolean;stdcall;
var
lpszClassName,lpszWindowText:array[0..254] of char;
nodename:string;
begin
GetWindowText(BhWnd,lpszWindowText,254);//get window's caption
GetClassName(BhWnd,lpszClassName,254); //get window's type
nodename:=inttostr(Bhwnd)+'|'+StrPas(lpszWindowText)+'|'+StrPas(lpszClassName);//the node's text
form1.TreeView1.items.addchild(parentnode,nodename); //add childnode under the parentnode
Result:=true;
end;
procedure GenerateWindowsTree(Chwnd:longint; pnode:Ttreenode);//generate the tree of the top window
var
hChild:longint;// the handle of the child window
pSubNode:TTreeNode; //the treenode of the new childnode
szClassName:array[0..254] of char;//the type of the child window
szCaptionname:array[0..254] of char; //the caption of the window
nodename:string;
begin
hChild := GetWindow(chwnd,GW_CHILD);
while hchild>0 do
begin
GetClassName(hChild, szClassName, 256);
Getwindowtext(hChild, szCaptionName, 256);
nodename:=ansistring(inttohex(hChild,8))+' | '+StrPas(szCaptionname)+' | '+StrPas(szClassName);
pSubNode:= form1.TreeView1.Items.AddChild(pnode,nodename);
GenerateWindowsTree(hChild, pSubNode);
hChild:=GetWindow(hChild, GW_HWNDNEXT);//recursion of the function
end;
end;
function EnumWindowsProc(AhWnd:LongInt;AForm:TForm1):boolean;
var
lpszClassName,lpszWindowText:array[0..254] of char;
mynode:TTreenode;
nodename:string;
begin
GetWindowText(AhWnd,lpszWindowText,254);
GetClassName(AhWnd,lpszClassName,254);
mynode:=Form1.TreeView1.Items.GetFirstNode;
nodename:=ansistring(inttohex(Ahwnd,8))+' | '+StrPas(lpszWindowText)+' | '+StrPas(lpszClassName);
parentnode:=Form1.TreeView1.items.addchild(mynode,nodename);
//enumchildwindows(Ahwnd,@Enumchildwindowsproc,0);
GenerateWindowsTree(Ahwnd,parentnode);
Result:=True;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
close;
end;
procedure TForm1.N7Click(Sender: TObject);
begin
if opendialog1.Execute then
winexec(pchar(opendialog1.FileName),sw_normal);
treeview1.Items.Clear;
treeview1.Items.AddChild(nil,'桌面');
EnumWindows(@EnumWindowsProc,LongInt(self));//@EnumWindowsProc as the address of the callback function
end;
procedure TForm1.N6Click(Sender: TObject);
begin
treeview1.Items.Clear;
treeview1.Items.AddChild(nil,'桌面');
EnumWindows(@EnumWindowsProc,LongInt(self));
end;
procedure TForm1.TreeView2DragDrop(Sender, Source: TObject; X, Y: Integer);
var
copytree:Ttreenode;
begin
if (source=Treeview1) then
begin
copytree:=treeview1.Selected;
//treeview2.items.addnode(copytree,treeview2.Selected,copytree.Text,copytree.Data,naaddchild);
//treeview2.GetNodeAt(x,y).Create(copytree);
if treeview2.GetNodeAt(x,y)<>nil then
treeview2.Items.AddChildObject(treeview2.GetNodeAt(x,y),copytree.Text,copytree);
end;
end;
procedure TForm1.TreeView2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := Source is TTreeview;
end;
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
copytree:Ttreenode;
begin
if (source=treeview2) and (sender=treeview1) then
begin
copytree:=treeview2.Selected ;
if copytree.Parent <>nil then
treeview2.Items.Delete(copytree);
end;
end;
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := Source is TTreeview;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
form2.show;
form2.TreeView1.items.Assign(form1.TreeView2.items);
//movnode:=form2.TreeView1.Items.GetFirstNode;
//form2.TreeView1.
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.TreeView2.Items.Add(nil,'新动作');
end;
procedure TForm1.TreeView2DblClick(Sender: TObject);
begin
form1.N4.Click;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -