程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 進程、窗口句柄、文件屬性、程序運行狀態

進程、窗口句柄、文件屬性、程序運行狀態

編輯: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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved