zoukankan      html  css  js  c++  java
  • 枚举进程for in

    //use Tlhelp32
    
    function GetProcessIDEx(List:TStrings; ProcessName: string = ''): TProcessEntry32;
    var
      ret: Boolean;
      processID: Cardinal;
      _processName: string;
      FSnapshotHandle: HWND;
      FProcessEntry32: TProcessEntry32;
    begin
      FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
      FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
      ret := Process32First(FSnapshotHandle,FProcessEntry32);
      while ret do
      begin
        _processName := ExtractFileName(FProcessEntry32.szExeFile);
        if (ProcessName = '') then
        begin
          processID := FProcessEntry32.th32ProcessID;
          List.Add(Format('%-20s%d',[_processName,processID]));
        end
        else if (AnsiCompareText(_processName,ProcessName)=0) then
        begin
          processID := FProcessEntry32.th32ProcessID;
          List.Add(Format('%-20s%d',[_processName,processID]));
          Result := FProcessEntry32;
          Break;
        end;
        ret := Process32Next(FSnapshotHandle,FProcessEntry32);
      end;
    end;
    
    function GetProcessID(const ProcessName: string): Integer;
    var
      ret: Boolean;
      processID: Cardinal;
      _processName: string;
      FSnapshotHandle: HWND;
      FProcessEntry32: TProcessEntry32;
    begin
      Result := -1;
      FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
      FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
      ret := Process32First(FSnapshotHandle,FProcessEntry32);
      while ret do
      begin
        _processName := ExtractFileName(FProcessEntry32.szExeFile);
        if (AnsiCompareText(_processName,ProcessName)=0) then
        begin
          processID := FProcessEntry32.th32ProcessID;
          Result := processID;
          Break;
        end;
        ret := Process32Next(FSnapshotHandle,FProcessEntry32);
      end;
    end;
    
    function IsDestProcess: Integer;
    type
      TExeNameEnum = (exeNotepad=1,exeTest=2,exeBds=3);
    const
      K_ExeName: array [TExeNameEnum] of string = (
      ('Notepad1.exe'),('Test.exe'),('bds.exe')
      );
    var
      ExeName: TExeNameEnum;
      //ExeName: exeNotepad..exeBds;
    begin
      Result := -1;
      //for in 高版本才可以用如D2007
      for ExeName in [Low(TExeNameEnum)..High(TExeNameEnum)] do
      //for ExeName in [exeNotepad..exeBds] do
      begin
        ShowMessage(K_ExeName[ExeName]);
        Result := GetProcessID(K_ExeName[ExeName]);
        if Result > 0 then Break;
      end;
    end;
    
  • 相关阅读:
    Kotlin Coroutines不复杂, 我来帮你理一理
    Refresh design pattern
    Android App安装包瘦身计划
    Google IO 2019 Android 太长不看版
    Effective Java读书笔记完结啦
    探究高级的Kotlin Coroutines知识
    移动应用中的非功能性(跨职能)需求
    Android程序员的Flutter学习笔记
    如何正确使用Espresso来测试你的Android程序
    MVP模式, 开源库mosby的使用及代码分析
  • 原文地址:https://www.cnblogs.com/Jekhn/p/2140331.html
Copyright © 2011-2022 走看看