中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Web开发 > JavaScripts > 综合文章
进程、窗口句柄、文件属性、程序运行状态
作者:佚名 时间:2005-03-11 11:03 出处:互连网 责编:chinaitpower
              摘要:进程、窗口句柄、文件属性、程序运行状态

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;

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有