• 枚举进程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;
    
  • 相关阅读:
    双机调试环境部署
    VC++中通过MultiByteToWideChar将string|char*转换为wstring|wchar_t*
    Unicode环境下的类型转换
    SQL调优日记之发挥SQL性能与你的写法有关--对比三种方式实现相同功能
    从MS SQL删除大数据说开去
    Microsoft SQL Server Reporting Services (SSRS)报表技巧之在图表中增加参考线
    想个法子找出性能差的SQL
    MS SQL,数据库增长时众多表中谁是你关注的目标
    TSQL 日期处理总结
    投入.NET,我的第一篇BLOG
  • 原文地址:https://www.cnblogs.com/Jekhn/p/2140331.html
Copyright © 2020-2023  润新知