Delphi编程获取系统当前进程、窗口句柄、文件属性以及程序运行状态,8种应用

Delphi编程获取系统当前进程、窗口句柄、文件属性以及程序运行状态.

uses TLHelp32,PsAPI;

(1)显示进程列表:

procedure TForm1.Button2Click(Sender: TObject);

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;

end;

(2)杀死某进程:

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;

(3)取得某进程EXE路径:

procedure TForm1.Button8Click(Sender: TObject); //uses PSAPI;

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;

(4)取得窗口列表:

begin

ListBox1.Items.Clear ;

EnumWindows(@EnumWindowsProc, 0);

end;

(5)杀死窗口进程:

procedure TForm1.Button6Click(Sender: TObject);

var

H:THandle;

P:DWORD;

s:string;

killed:boolean;

begin

s := ListBox1.Items[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;

(6)取得窗口进程路径:

procedure TForm1.Button9Click(Sender: TObject);

var

H:THandle; P,cbNeeded: DWORD; s,fileName:string;

iLen:integer; hMod:HMODULE;

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;

(7)文件属性:

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;

(8)判断程序是否在运行:

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;

参考:http://www.cnblogs.com/key-ok/p/4594676.html