以下function可以找到非汉字的进程,比如 notepad.exe ,但如果是汉字就找不到,如:记事本.exe
代码如下:我跟踪过ExtractFileName(FProcessEntry32.szExeFile)的值,到了 记事本.exe 时,就出来个乱码,不能和“记事本.exe”配对。。大家帮帮忙。function MyFun_GetProcessID(ProcessName: string): Cardinal;
var
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
Ret: Boolean;
TmpProcessName: string;
TmpProcessID: DWORD;
begin
TmpProcessID := 0; //如果没有找到
//创建系统快照
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//先初始化 FProcessEntry32 的大小
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
Ret := Process32First(FSnapshotHandle, FProcessEntry32);
//循环枚举出系统开启的所有进程,找出“ProcessName”所指定的进程
while Ret do
begin
TmpProcessName := ExtractFileName(FProcessEntry32.szExeFile);
if TmpProcessName = ProcessName then
begin
TmpProcessID := FProcessEntry32.th32ProcessID;
Break;
end;
Ret := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
Result := TmpProcessID;
end;
代码如下:我跟踪过ExtractFileName(FProcessEntry32.szExeFile)的值,到了 记事本.exe 时,就出来个乱码,不能和“记事本.exe”配对。。大家帮帮忙。function MyFun_GetProcessID(ProcessName: string): Cardinal;
var
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
Ret: Boolean;
TmpProcessName: string;
TmpProcessID: DWORD;
begin
TmpProcessID := 0; //如果没有找到
//创建系统快照
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//先初始化 FProcessEntry32 的大小
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
Ret := Process32First(FSnapshotHandle, FProcessEntry32);
//循环枚举出系统开启的所有进程,找出“ProcessName”所指定的进程
while Ret do
begin
TmpProcessName := ExtractFileName(FProcessEntry32.szExeFile);
if TmpProcessName = ProcessName then
begin
TmpProcessID := FProcessEntry32.th32ProcessID;
Break;
end;
Ret := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
Result := TmpProcessID;
end;
试试遍历进程时加一句Memo1.Lines.Add(FProcessEntry32.szExeFile);看看Memo里会不会有乱码
用widestring试试