var h : THandle; fileName : string; iLen : integer; hMod : HMODULE; cbNeeded,p : DWORD; begin p :=DWORD(ListBox1.Items.Objects[ListBox1.itemindex]); h := OpenProcess(PROCESS_ALL_ACCESS, false, p); //p 为 进程ID if h > 0 then begin if EnumProcessModules( h, @hMod, sizeof(hMod), cbNeeded) then begin SetLength(fileName, MAX_PATH); iLen := GetModuleFileNameEx(h, hMod, PCHAR(fileName), MAX_PATH); if iLen <> 0 then begin SetLength(fileName, StrLen(PCHAR(fileName))); ShowMessage(fileName); end; end; CloseHandle(h); end; end;
uses TLHelp32,PsAPI;进程列表: var lppe: TProcessEntry32; found : boolean; Hand : THandle; P:DWORD; s:string; begin ListBox1.Items.Clear ; Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); found := Process32First(Hand,lppe); while found do begin s := StrPas(lppe.szExeFile); if lppe.th32ProcessID>0 then p := lppe.th32ProcessID else p := 0; ListBox1.Items.AddObject(s,pointer(p));//列出所有进程。 found := Process32Next(Hand,lppe); end;
杀死进程: procedure TForm1.Button3Click(Sender: TObject); var lppe: TProcessEntry32; found : boolean; Hand : THandle; P:DWORD; sExeFile,sSelect:string; killed:boolean; begin p :=DWORD(ListBox1.Items.Objects[ListBox1.itemindex]); if P<>0 then begin killed := TerminateProcess(OpenProcess(PROCESS_TERMINATE,False,P),$FFFFFFFF); if not killed then messagebox(self.handle,pchar(sExeFile+'无法杀死!'),'提示',MB_OK or MB_ICONWARNING) else ListBox1.Items.Delete(ListBox1.ItemIndex); end;end;
取得窗口进程: procedure TForm1.Button7Click(Sender: TObject); begin ListBox1.Items.Clear ; EnumWindows(@EnumWindowsProc, 0); end;杀死窗口: procedure TForm1.Button6Click(Sender: TObject); var H:THandle; P:DWORD; s:string; killed:boolean; begin s := ListBox1.Items[ListBox1.ItemIndex];//string(ListBox1.Items.Objects[ListBox1.ItemIndex] ) ; H:=FindWindow(nil,pchar(s)); if H<>0 then begin GetWindowThreadProcessId(H,@P); if P<>0 then killed:=TerminateProcess(OpenProcess(PROCESS_TERMINATE,False,P),$FFFFFFFF); if not killed then messagebox(self.handle,pchar(s+'无法杀死!'),'提示',MB_OK or MB_ICONWARNING) else ListBox1.Items.Delete(ListBox1.ItemIndex); end; end;窗口路径: procedure TForm1.Button9Click(Sender: TObject); var H:THandle; P:DWORD; s:string; fileName : string; iLen : integer; hMod : HMODULE; cbNeeded : DWORD; begin s := ListBox1.Items[ListBox1.ItemIndex]; H:=FindWindow(nil,pchar(s)); if H<>0 then begin GetWindowThreadProcessId(H,@P); if P<>0 then begin h := OpenProcess(PROCESS_ALL_ACCESS, false, p); //p 为 进程ID if h > 0 then begin if EnumProcessModules( h, @hMod, sizeof(hMod), cbNeeded) then begin SetLength(fileName, MAX_PATH); iLen := GetModuleFileNameEx(h, hMod, PCHAR(fileName), MAX_PATH); if iLen <> 0 then begin SetLength(fileName, StrLen(PCHAR(fileName))); ShowMessage(fileName); end; end; CloseHandle(h); end; end; end; end;
判断程序是否在运行: procedure TForm1.Button5Click(Sender: TObject); var PrevInstHandle:Thandle; AppTitle:pchar; begin AppTitle := pchar('test'); PrevInstHandle := FindWindow(nil, AppTitle); if PrevInstHandle <> 0 then begin if IsIconic(PrevInstHandle) then ShowWindow(PrevInstHandle, SW_RESTORE) else BringWindowToTop(PrevInstHandle); SetForegroundWindow(PrevInstHandle); end; end;文件属性: procedure TForm1.Button1Click(Sender: TObject); var SR: TSearchRec; V1, V2, V3, V4: integer ; const dtFmt:string = 'YYYY-MM-DD HH:NN:SS'; begin // ============== 方法一 ==================== // if FindFirst(sFileName, faAnyFile, SR) = 0 then begin Edit1.Text := intToStr(SR.Attr); //文件属性 Edit2.Text := intToStr(SR.Size); //文件大小 Edit3.Text := FormatDateTime(dtFmt,CovFileDate(SR.FindData.ftCreationTime)); //创建时间 Edit4.Text := FormatDateTime(dtFmt,CovFileDate(SR.FindData.ftLastWriteTime)); //最后修改时间 Edit5.Text := FormatDateTime(dtFmt,CovFileDate(SR.FindData.ftLastAccessTime)); //最后访问时间 if SR.Attr and faHidden <> 0 then FileSetAttr(sFileName, SR.Attr-faHidden); FindClose(SR); end; if GetFileVersion(sFileName,V1, V2, V3, V4) then Edit7.Text := intToStr(v1)+'.'+intToStr(v2)+'.'+intToStr(v3)+'.'+intToStr(v4); // ============== 方法二 ==================== // { var Attrs: Word; f: file of Byte; // 文件大小 必须要 定义为" file of byte" ,这样才能取出 bytes size: Longint; //文件属性 Attrs := FileGetAttr(sFileName); Edit1.Text := intToStr(Attrs); //文件大小 AssignFile(f, OpenDialog1.FileName); Reset(f); try AssignFile(f, sFileName); Reset(f); size := FileSize(f); Edit2.Text := intToStr(size); finally CloseFile(f); end; } end;
h : THandle;
fileName : string;
iLen : integer;
hMod : HMODULE;
cbNeeded,p : DWORD;
begin
p :=DWORD(ListBox1.Items.Objects[ListBox1.itemindex]);
h := OpenProcess(PROCESS_ALL_ACCESS, false, p); //p 为 进程ID
if h > 0 then
begin
if EnumProcessModules( h, @hMod, sizeof(hMod), cbNeeded) then
begin
SetLength(fileName, MAX_PATH);
iLen := GetModuleFileNameEx(h, hMod, PCHAR(fileName), MAX_PATH);
if iLen <> 0 then
begin
SetLength(fileName, StrLen(PCHAR(fileName)));
ShowMessage(fileName);
end;
end;
CloseHandle(h);
end;
end;
var lppe: TProcessEntry32;
found : boolean;
Hand : THandle;
P:DWORD;
s:string;
begin
ListBox1.Items.Clear ;
Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
found := Process32First(Hand,lppe);
while found do
begin s := StrPas(lppe.szExeFile);
if lppe.th32ProcessID>0 then
p := lppe.th32ProcessID
else
p := 0;
ListBox1.Items.AddObject(s,pointer(p));//列出所有进程。 found := Process32Next(Hand,lppe);
end;
procedure TForm1.Button3Click(Sender: TObject);
var lppe: TProcessEntry32;
found : boolean;
Hand : THandle;
P:DWORD;
sExeFile,sSelect:string;
killed:boolean;
begin
p :=DWORD(ListBox1.Items.Objects[ListBox1.itemindex]);
if P<>0 then
begin
killed := TerminateProcess(OpenProcess(PROCESS_TERMINATE,False,P),$FFFFFFFF);
if not killed then
messagebox(self.handle,pchar(sExeFile+'无法杀死!'),'提示',MB_OK or MB_ICONWARNING)
else
ListBox1.Items.Delete(ListBox1.ItemIndex);
end;end;
procedure TForm1.Button7Click(Sender: TObject);
begin
ListBox1.Items.Clear ;
EnumWindows(@EnumWindowsProc, 0);
end;杀死窗口:
procedure TForm1.Button6Click(Sender: TObject);
var
H:THandle;
P:DWORD;
s:string;
killed:boolean;
begin
s := ListBox1.Items[ListBox1.ItemIndex];//string(ListBox1.Items.Objects[ListBox1.ItemIndex] ) ;
H:=FindWindow(nil,pchar(s)); if H<>0 then
begin
GetWindowThreadProcessId(H,@P);
if P<>0 then
killed:=TerminateProcess(OpenProcess(PROCESS_TERMINATE,False,P),$FFFFFFFF);
if not killed then
messagebox(self.handle,pchar(s+'无法杀死!'),'提示',MB_OK or MB_ICONWARNING)
else
ListBox1.Items.Delete(ListBox1.ItemIndex);
end;
end;窗口路径:
procedure TForm1.Button9Click(Sender: TObject);
var
H:THandle; P:DWORD; s:string;
fileName : string;
iLen : integer;
hMod : HMODULE;
cbNeeded : DWORD;
begin
s := ListBox1.Items[ListBox1.ItemIndex];
H:=FindWindow(nil,pchar(s)); if H<>0 then
begin
GetWindowThreadProcessId(H,@P);
if P<>0 then
begin
h := OpenProcess(PROCESS_ALL_ACCESS, false, p); //p 为 进程ID
if h > 0 then
begin
if EnumProcessModules( h, @hMod, sizeof(hMod), cbNeeded) then
begin
SetLength(fileName, MAX_PATH);
iLen := GetModuleFileNameEx(h, hMod, PCHAR(fileName), MAX_PATH);
if iLen <> 0 then
begin
SetLength(fileName, StrLen(PCHAR(fileName)));
ShowMessage(fileName);
end;
end;
CloseHandle(h);
end;
end;
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
var PrevInstHandle:Thandle;
AppTitle:pchar;
begin
AppTitle := pchar('test');
PrevInstHandle := FindWindow(nil, AppTitle);
if PrevInstHandle <> 0 then begin
if IsIconic(PrevInstHandle) then
ShowWindow(PrevInstHandle, SW_RESTORE)
else
BringWindowToTop(PrevInstHandle);
SetForegroundWindow(PrevInstHandle);
end;
end;文件属性:
procedure TForm1.Button1Click(Sender: TObject);
var
SR: TSearchRec;
V1, V2, V3, V4: integer ;
const
dtFmt:string = 'YYYY-MM-DD HH:NN:SS';
begin
// ============== 方法一 ==================== //
if FindFirst(sFileName, faAnyFile, SR) = 0 then
begin
Edit1.Text := intToStr(SR.Attr); //文件属性
Edit2.Text := intToStr(SR.Size); //文件大小
Edit3.Text := FormatDateTime(dtFmt,CovFileDate(SR.FindData.ftCreationTime)); //创建时间
Edit4.Text := FormatDateTime(dtFmt,CovFileDate(SR.FindData.ftLastWriteTime)); //最后修改时间
Edit5.Text := FormatDateTime(dtFmt,CovFileDate(SR.FindData.ftLastAccessTime)); //最后访问时间 if SR.Attr and faHidden <> 0 then
FileSetAttr(sFileName, SR.Attr-faHidden); FindClose(SR);
end; if GetFileVersion(sFileName,V1, V2, V3, V4) then
Edit7.Text := intToStr(v1)+'.'+intToStr(v2)+'.'+intToStr(v3)+'.'+intToStr(v4); // ============== 方法二 ==================== //
{
var
Attrs: Word;
f: file of Byte; // 文件大小 必须要 定义为" file of byte" ,这样才能取出 bytes
size: Longint; //文件属性
Attrs := FileGetAttr(sFileName); Edit1.Text := intToStr(Attrs); //文件大小
AssignFile(f, OpenDialog1.FileName);
Reset(f);
try
AssignFile(f, sFileName);
Reset(f);
size := FileSize(f);
Edit2.Text := intToStr(size);
finally
CloseFile(f);
end;
}
end;