zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    (网页)中的简单的遮罩层
    (后端)shiro:Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.
    (网页)jQuery的时间datetime控件在AngularJs中使用实例
    Maven Myeclipse 搭建项目
    MyBatis 环境搭建 (一)
    java 常用方法
    XML 基础
    JS BOM
    js 事件
    js 的使用原则
  • 原文地址:https://www.cnblogs.com/findumars/p/4748477.html
Copyright © 2011-2022 走看看