大家做了那么多年程序,肯定都有自己写的比较得意的过程,贴出来让大家共享一下,一起进步,贴的时候请说明该过程或函数的用法,用途!希望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;
我先来一个,此函数可以通过名字查找进程,如果有该进程则返回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;
解决方案 »
- delphi idhttp post 网页
- 讨论一个方案!!
- Excel数据导入到SqlServer出错!!急,明天用啊!
- 请教:listview的用法?
- 当我关掉调用DLL的主窗口时就报告Invalid pointer operation,请问这是为什么??
- ★★关于《Delphi5 开发人员指南》8.7编写动画程序中的例子,无法运行,怎么回事?
- 最后的散份贴 (3)
- 优点
- 急急急!Delphi IdTCPServer 发送大文件时,OnExecute接收不到客户信息
- 关于 将Excel数据批量导入到Access中的问题!!!
- 若干EDIT,如何得到第一个和最后一个?
- 关于 TCP Nat 穿透问题?
只能帮忙顶下
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.
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.