王朝网络
分享
 
 
 

进程、窗口句柄、文件属性、程序运行状态

王朝delphi·作者佚名  2006-01-09
宽屏版  字体: |||超大  

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;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有