大家做了那么多年程序,肯定都有自己写的比较得意的过程,贴出来让大家共享一下,一起进步,贴的时候请说明该过程或函数的用法,用途!希望DELPHI版的各位大佬和朋友都支持一下!
我先来一个,此函数可以通过名字查找进程,如果有该进程则返回TRUE,否则FALSE。
function FindExe(AName: string): Boolean;
var
    v_ProcessSnap: THandle;
    v_pe32: TProcessEntry32;
    v_Str: String;
begin
    Result := False;    v_ProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (v_ProcessSnap = INVALID_HANDLE_VALUE) then Exit;
    v_pe32.dwSize := sizeof(PROCESSENTRY32);
    if Process32First(v_ProcessSnap, v_pe32) then
      repeat
        v_Str := v_pe32.szExeFile;
        if v_Str = AName then
        begin
            Result := True;
            Break;
        end;
      until not Process32Next(v_ProcessSnap, v_pe32);    CloseHandle(v_ProcessSnap);
end;

解决方案 »

  1.   

    顶一下,本人刚入行delphi,暂无得意的过程,
    只能帮忙顶下
      

  2.   

    用于多线程当中使用对象安保证完全释放的,支持引用计数的基类
    Create的时候会先增加一个引用计数,其它使用到的地方就可通过Attach来增加引用计数,如果增加成功则返回该对象的实例指针,否则返回Nil表示失败.每次使用之前增加引用计数,用完调用Free释放(虽然有提供Detach,但是不建议使用).这个对于在多线程当中编程,特别是进行异步/并行处理的时候,就有相当大的用处.
    unit UnitManagedObject;interfaceuses
        Windows
      ;
    type
      TManagedObject = class(TObject)
        {Management Properties}
        private
          FManagementCount  : Integer;      //对象引用计数
        protected
          function Detach: Integer;
        public
          {structor}
          constructor Create;
        public
          {Management}
          procedure Free;
          function Attach:TManagedObject;
      end;
    implementation{TManagedBaseObject}
      {structor}
      constructor TManagedObject.Create;
      begin
        Inherited Create;
        FManagementCount := 1;
      end;  {Management}
      function TManagedObject.Attach  : TManagedObject;
      begin
        Result := Nil;
        if InterlockedIncrement(FManagementCount) = 1 then
          begin
            InterlockedDecrement(FManagementCount);
            Exit;
          end;
        Result := self;
      end;  function TManagedObject.Detach  : Integer;
      begin
        Result := InterlockedDecrement(FManagementCount);
      end;  procedure TManagedObject.Free;
      begin
        if Detach>0 then
          Exit;
        Inherited;
      end;
    end.
      

  3.   

    获取CPU的ID.unit CUP;interface
      uses Windows, SysUtils,Tlhelp32;
      
    type
      TCPUID=array[1..4]of LongInt;
      TVendor=array[0..11] of Char;function IsCPU_Available:Boolean;register;
    function GetCPUID:TCPUID;assembler;register;
    function GetCPUVendor:TVendor;assembler;register;implementationfunction IsCPU_Available:Boolean;register;
    asm
      pushfd
      pop   eax
      mov   edx,eax
      xor   eax,ID_BIT
      push  eax
      popfd
      pushfd
      pop   eax
      xor   eax,edx
      jz    @Exit
      mov   al,True
      @Exit:
    end;function GetCPUID:TCPUID;assembler;register;
    asm
      PUSH    EBX
      PUSH    EDI
      MOV     EDI,EAX
      MOV     EAX,1
      DW      $A20F
      STOSD
      MOV     EAX,EBX
      STOSD
      MOV     EAX,ECX
      STOSD
      MOV     EAX,EDX
      STOSD
      POP     EDI
      POP     EBX
    end;function GetCPUVendor:TVendor;assembler;register;
    asm
      PUSH   EBX
      PUSH   EDI
      MOV    EDI,EAX
      MOV    EAX,0
      DW     $A20F
      MOV    EAX,EBX
      XCHG   EBX,ECX
      MOV    ECX,4
    @1:
      STOSB
      SHR    EAX,8
      LOOP   @1
      MOV    EAX,EDX
      MOV    ECX,4
    @2:
      STOSB
      SHR    EAX,8
      LOOP   @2
      MOV    EAX,EBX
      MOV    ECX,4
    @3:
      STOSB
      SHR    EAX,8
      LOOP   @3
      POP    EDI
      POP    EBX
    end;end.
      

  4.   

    关于CPUID,可以参考一下这里的资料:http://softpixel.com/~cwright/programming/simd/cpuid.php