📄 main.pas
字号:
with BeepOnChange1 do
Checked := not Checked;
end;
procedure TMainForm.HotTrack1Execute(Sender: TObject);
begin
with HotTrack1 do
begin
Checked := not Checked;
UpdateListViewsOptions;
end;
end;
procedure TMainForm.InfoTip1Execute(Sender: TObject);
begin
with InfoTip1 do
begin
Checked := not Checked;
UpdateListViewsOptions;
end;
end;
procedure TMainForm.CheckImageBase1Execute(Sender: TObject);
begin
with CheckImageBase1 do
begin
Checked := not Checked;
ProcessListViewSelectItem(nil, ProcessListView.Selected, Assigned(ProcessListView.Selected));
end;
end;
procedure TMainForm.Terminate1Execute(Sender: TObject);
begin
with ProcessListView do if (ItemFocused <> nil) and
(MessBoxFmt(sKill, [ItemFocused.Caption], MB_ICONEXCLAMATION or MB_YESNO or MB_DEFBUTTON2) = ID_YES) then
KillProcess(DWORD(ItemFocused.Data));
end;
procedure TMainForm.Refresh1Execute(Sender: TObject);
begin
BuildProcessList(True);
end;
procedure TMainForm.About1Execute(Sender: TObject);
begin
ShowToolsAboutBox;
end;
procedure TMainForm.ChangePriority1Execute(Sender: TObject);
begin
with TChangePriorityDlg.Create(Application) do
try
ProcessID := DWORD(ProcessListView.ItemFocused.Data);
ShowModal;
finally
Free;
end;
end;
procedure TMainForm.Terminate1Update(Sender: TObject);
begin
TAction(Sender).Enabled := (ActiveControl = ProcessListView) and
(ProcessListView.ItemFocused <> nil);
end;
procedure TMainForm.SaveToFile1Update(Sender: TObject);
begin
TAction(Sender).Enabled := ActiveControl is TListView;
end;
procedure TMainForm.SaveToFile1Execute(Sender: TObject);
var
FileName: string;
begin
if ActiveControl = ProcessListView then
FileName := sSaveProcessesList else
if ActiveControl = ThreadsListView then
FileName := Format(sSaveThreadsList, [ProcessListView.ItemFocused.Caption]) else
if ActiveControl = ModulesListView then
FileName := Format(sSaveModulesList, [ProcessListView.ItemFocused.Caption]);
GlobalModule.ListViewToFile(ActiveControl as TListView, FileName);
end;
procedure TMainForm.FileProperties1Update(Sender: TObject);
begin
FileProperties1.Enabled :=
(ActiveControl = ProcessListView) or (ActiveControl = ModulesListView);
end;
procedure TMainForm.FileProperties1Execute(Sender: TObject);
begin
DisplayPropDialog(Application.Handle, FocusedFileName);
end;
procedure TMainForm.AddToViewsMenu(AForm: TForm; const ACaption: string);
var
Item: TMenuItem;
begin
Item := TMenuItem.Create(Views1);
Item.Caption := ACaption;
Item.Tag := Integer(AForm);
Item.OnClick := ViewsMenuClick;
Views1.Add(Item);
RebuildViewsMenuHotKeys;
end;
procedure TMainForm.DeleteFromViewsMenu(AForm: TForm);
var
I: Integer;
begin
with Views1 do
for I := 0 to Count - 1 do
if Pointer(Items[I].Tag) = AForm then
begin
Items[I].Free;
System.Break;
end;
RebuildViewsMenuHotKeys;
end;
procedure TMainForm.ViewsMenuClick(Sender: TObject);
begin
TForm(TMenuItem(Sender).Tag).BringToFront;
end;
procedure TMainForm.RebuildViewsMenuHotKeys;
var
I: Integer;
begin
for I := 0 to Views1.Count - 1 do
if I < 9 then
Views1.Items[I].ShortCut := ShortCut(I + 49, [ssAlt])
else
Views1.Items[I].ShortCut := 0;
Views1.Visible := Views1.Count > 0;
end;
procedure TMainForm.Copy1Execute(Sender: TObject);
begin
GlobalModule.ListViewToClipboard(ActiveControl as TListView);
end;
procedure TMainForm.WMTimer(var Msg: TWMTimer);
begin
if Msg.TimerID = 1 then
begin
TimerRefresh;
Msg.Result := 0;
end else inherited;
end;
procedure TMainForm.WMMenuChar(var Msg: TWMMenuChar);
begin
inherited;
if Msg.Result = MNC_IGNORE then
PostMessage(Handle, UM_ACTIVATEMAINFORM, 0, 0);
end;
procedure TMainForm.UMActivateMainForm(var Msg: TMessage);
begin
BringToFront;
end;
procedure TMainForm.StatusBarResize(Sender: TObject);
begin
with StatusBar do
Panels[1].Width := Width - Panels[0].Width - Panels[2].Width;
end;
procedure TMainForm.DumpHeap1Execute(Sender: TObject);
begin
FDisableUpdate := True;
try
with THeapDumpForm.Create(Application) do
begin
with ProcessListView.ItemFocused do SetParams(DWORD(Data), Caption);
Show;
end;
finally
FDisableUpdate := False;
end;
end;
procedure TMainForm.DumpMemory1Execute(Sender: TObject);
begin
FDisableUpdate := True;
try
with TMemoryDumpForm.Create(Application) do
try
with ProcessListView.ItemFocused do SetParams(DWORD(Data), Caption);
Show;
except
Free;
raise
end;
finally
FDisableUpdate := False;
end;
end;
procedure TMainForm.ProcessListViewSelectItem(Sender: TObject;
Item: TListItem; Selected: Boolean);
begin
if Selected then
begin
BuildThreadsList(DWORD(Item.Data));
BuildModulesList(DWORD(Item.Data));
UpdateStatusLine;
end;
end;
procedure TMainForm.ModulesListViewSelectItem(Sender: TObject;
Item: TListItem; Selected: Boolean);
begin
if Selected and TWinControl(Sender).Focused then UpdateStatusLine;
end;
procedure TMainForm.ProcessListViewInfoTip(Sender: TObject;
Item: TListItem; var InfoTip: string);
begin
InfoTip := InfoTipVersionString(Item.SubItems[4]);
end;
procedure TMainForm.ModulesListViewInfoTip(Sender: TObject;
Item: TListItem; var InfoTip: string);
begin
InfoTip := InfoTipVersionString(Item.SubItems[7]);
end;
procedure TMainForm.LoadSettings;
begin
with FIniFile do
begin
Left := ReadInteger(Name, 'Left', Left);
Top := ReadInteger(Name, 'Top', Top);
Width := ReadInteger(Name, 'Width', Width);
Height := ReadInteger(Name, 'Height', Height);
HotTrack1.Checked := ReadBool('Options', HotTrack1.Name, HotTrack1.Checked);
InfoTip1.Checked := ReadBool('Options', InfoTip1.Name, InfoTip1.Checked);
BeepOnChange1.Checked := ReadBool('Options', BeepOnChange1.Name, BeepOnChange1.Checked);
CheckImageBase1.Checked := ReadBool('Options', CheckImageBase1.Name, CheckImageBase1.Checked);
end;
UpdateListViewsOptions;
end;
procedure TMainForm.SaveSettings;
begin
with FIniFile do
begin
WriteInteger(Name, 'Left', Left);
WriteInteger(Name, 'Top', Top);
WriteInteger(Name, 'Width', Width);
WriteInteger(Name, 'Height', Height);
WriteBool('Options', HotTrack1.Name, HotTrack1.Checked);
WriteBool('Options', InfoTip1.Name, InfoTip1.Checked);
WriteBool('Options', BeepOnChange1.Name, BeepOnChange1.Checked);
WriteBool('Options', CheckImageBase1.Name, CheckImageBase1.Checked);
end;
end;
procedure TMainForm.UpdateListViewsOptions;
begin
ProcessListView.HotTrack := HotTrack1.Checked;
ThreadsListView.HotTrack := HotTrack1.Checked;
ModulesListView.HotTrack := HotTrack1.Checked;
ProcessListView.ShowHint := InfoTip1.Checked;
ThreadsListView.ShowHint := InfoTip1.Checked;
ModulesListView.ShowHint := InfoTip1.Checked;
end;
procedure TMainForm.ModulesListViewCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Item.SubItems.Objects[1] <> nil then
Sender.Canvas.Font.Style := [fsunderline];
end;
procedure TMainForm.DumpModules1Execute(Sender: TObject);
begin
if not Assigned(ModulesDumpForm) then
ModulesDumpForm := TModulesDumpForm.Create(Application);
ModulesDumpForm.Show;
end;
procedure TMainForm.DumpPE1Update(Sender: TObject);
begin
DumpPE1.Enabled := GlobalModule.PeViewerRegistred and (Length(FocusedFileName) > 0);
end;
procedure TMainForm.ProcessListViewDblClick(Sender: TObject);
begin
DumpPE1.Execute;
end;
procedure TMainForm.DumpPE1Execute(Sender: TObject);
begin
GlobalModule.ViewPE(FocusedFileName);
end;
procedure TMainForm.SendMail1Execute(Sender: TObject);
begin
SendEmail;
end;
procedure TMainForm.CoolBar1Resize(Sender: TObject);
begin
D4FixCoolBarResizePaint(Sender);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -