一些函数,包括内存映像等(一)

很早以前写的,还是有一些用处的
----------------------------
////////////////////////////////////////////////////////////////////////////////
//    该单元提供所需工具函数的实现
////////////////////////////////////////////////////////////////////////////////
unit untTools;
interface
uses Classes, Windows, SysUtils, TlHelp32, untDef, Registry;
// ----------------------------FindProcessID------------------------------------
// 名    称:FindProcessID
// 功    能:查找指定名称的进程的ID
// 参    数:procName     要查找的进程的名称,不包括路径
// 返 回值:0       失败
//           其他    进程ID
// 日    期:2004.02.02
// 修    改:????.??.??
function FindProcessID(procName: pchar): THandle; export;
// ----------------------------ListProcesses------------------------------------
// 名    称:ListProcesses
// 功    能:列举当前系统中运行的进程
// 参    数:pl      用于返回进程列表
//                  当pl为nil时则返回当前系统中的进程数量
// 返 回 值:当前运行的进程数量
// 日    期:2004.02.02
// 修    改:????.??.??
function ListProcesses(pl: PList): integer; export;
// ------------------------------ListThreads------------------------------------
// 名    称:ListProcesses
// 功    能:列举当前系统中运行的线程
// 参    数:pID    进程ID,如果为-1则表示列出系统中所有的线程
//           pl     用于返回线程列表
//                  当pl为nil时则返回当前系统中的进程数量
// 返 回 值:当前运行的进程数量
// 日    期:2004.02.20
// 修    改:????.??.??
function ListThreads(pID: integer; pl: PList): integer; export;
// ----------------------------SetPrivilege-------------------------------------
// 名    称:SetPrivilege
// 功    能:设置进程权限
// 参    数:hToken                 指定的进程
//           strPrivilege           权限描述
//           bEnable                使能
// 返 回 值:成功与否
// 日    期:2004.02.02
// 修    改:????.??.??
function SetPrivilege(hToken: THandle; strPrivilege: PChar; bEnable: BOOL): BOOL; export;
// ----------------------------SetCurProcDbgPrivilege---------------------------
// 名    称:SetCurProcDbgPrivilege
// 功    能:设置/取消当前进程为DEBUG权限
// 参    数:bEnable
//                        TRUE       设置
//                        FALSE      取消
// 返 回 值:成功与否
// 日    期:2004.02.02
// 修    改:????.??.??
function SetCurProcDbgPrivilege(bEnabled: boolean): BOOL; export;
// ------------------------------GetOSVersion-----------------------------------
// 名    称:GetOSVersion
// 功    能:取得当前操作系统的版本
// 参    数:无
// 返 回 值:操作系统的版本代号
// 日    期:2004.02.03
// 修    改:????.??.??
function GetOSVersion: integer; export;
// --------------------------------ExitWin2000----------------------------------
// 名    称:ExitWin2000
// 功    能:退出win2000操作系统
// 参    数:ewx      退出类型,关机、注销等,见EWX_POWEROFF定义
// 返 回 值:
// 日    期:2004.02.03
// 修    改:????.??.??
procedure ExitWin2000(ewx: integer); export;
// --------------------------------ExitWin9x------------------------------------
// 名    称:ExitWin9x
// 功    能:退出win9x操作系统
// 参    数:ewx      退出类型,关机、注销等,见EWX_POWEROFF定义
// 返 回 值:
// 日    期:2004.02.03
// 修    改:????.??.??
procedure ExitWin9x(EWX: integer); export;
// --------------------------------ShutDownPC-----------------------------------
// 名    称:ShutDownPC
// 功    能:关闭计算机
// 参    数:无
// 返 回 值:
// 日    期:2004.02.03
// 修    改:????.??.??
procedure ShutDownPC; export;
// --------------------------------GetFileDateTime-------------------------------
// 名    称:GetFileDateTime
// 功    能:取得指定文件的指定的日期
// 参    数:
//          FileName           文件名称,必须为文件全名,包括路径
//          FileTimeType       指定文件的日期,参见TFileTimeType定义
// 返 回 值:指定文件信息中的时间
// 日    期:2004.02.03
// 修    改:????.??.??
function GetFileDateTime(const FileName: String; FileTimeType: TFileTimeType): TDateTime; export;
// --------------------------------SetFileDateTime-------------------------------
// 名    称:SetFileDateTime
// 功    能:设定指定文件的指定的日期
// 参    数:
//          FileName           文件名称,必须为文件全名,包括路径
//          FileTimeType       指定文件的日期,参见TFileTimeType定义
//          aDateTime          要指定为的时间
// 返 回 值: 0 成功;  其它为错误信息
// 日    期:2004.02.03
// 修    改:????.??.??
function SetFileDateTime(const FileName: string; FileTimeType: TFileTimeType; aDateTime: TDateTime): Integer; export;
// --------------------------------ListFiles---------------------------------------
// 名    称:ListFiles
// 功    能:必须调用两次,首先调用时给定pFL为nil以取得数量
//          然后为pFL申请空间
//          然后第二次调用该函数,以取得文件列表
// 参    数:
//          Path           要查询的目录
//          pFL            返回列表,nil 表示要取得当前目录包括的文件和目录的总和
// 返 回 值:当前目录中的文件数量,包括目录
// 日    期:2004.02.03
// 修    改:????.??.??
function ListFiles(const Path: string; pFI: PList): integer; export;
// --------------------------------StartScoutReg--------------------------------
// 名    称:StartScoutReg
// 功    能:实现指定的注册表键及其子键监视
// 参    数:
//          RootKey        根键
//          Key            要监视的键
//          Filter         要监视的事件
//                         包括REG_NOTIFY_CHANGE_NAME
//                          or REG_NOTIFY_CHANGE_ATTRIBUTES
//                          or REG_NOTIFY_CHANGE_LAST_SET
//                          or REG_NOTIFY_CHANGE_SECURITY
//                         0 表示全部
//          Handle         当注册表有改动后接受消息的据窗口的句柄
//          MsgValue       当注册表有改动后接受消息的据窗口需要处理的消息
//                         当消息的wParam值为0时表示注册表有改动
//                         当消息的wParam值为1时表示试图开始监视
//                         当消息的wParam值为2时表示监视失败
// 返 回值:监视线程的句柄,调用者必须保存该句柄,当取消监视时TerminateThread函数需要使用这个值
// 日    期:2004.02.04
// 修    改:????.??.??
function StartScoutReg(RootKey: HKEY; key: string; Filter: integer; Handle: THandle; MsgValue: integer): DWORD; export;
// --------------------------------KillProcess----------------------------------
// 名    称:KillProcess
// 功    能:终止指定ID的进程,该函数可以终止大多数的进程
// 参    数:ProcID         要终止的进程的ID
// 返 回 值:无
// 日    期:2004.02.04
// 修    改:????.??.??
procedure KillProcess(ProcID: DWORD); export;
// --------------------------------WriteShareData-------------------------------
// 名    称:WriteShareData
// 功    能:写内存映像文件,保存一个整形数据
// 参    数:
//          ShareName         内存映像文件的唯一标示
//          Data              要写入的数据
//          DataSize          数据的大小
// 返 回值:内存映像的句柄,调用者需要保存,在它不再使用后要CloseHandle
// 日    期:2004.02.05
// 修    改:????.??.??
function WriteShareData(ShareName: pchar; Data: pointer; DataSize: Cardinal): THandle; export;
// --------------------------------ReadShareData--------------------------------
// 名    称:ReadShareData
// 功    能:写内存映像文件,保存一个整形数据
// 参    数:
//          ShareName         内存映像文件的唯一标示,必须是已经存在的
//          Data              读出的数据缓冲区
//          DataSize          要读出数据缓冲的大小,调用者必须知道
// 返 回 值:无
// 日    期:2004.02.05
// 修    改:????.??.??
procedure ReadShareData(ShareName: pchar; Data: pointer; DataSize: Cardinal); export;
// --------------------------------WriteShareInteger----------------------------
// 名    称:WriteShareInteger
// 功    能:写内存映像文件,保存一个整形数据
// 参    数:
//          ShareName         内存映像文件的唯一标示
//          h                 要写入的数据
// 返 回值:内存映像的句柄,调用者需要保存,在它不再使用后要CloseHandle
// 日    期:2004.02.05
// 修    改:????.??.??
function WriteShareInteger(ShareName: pchar; h: integer): THandle; export;
// --------------------------------ReadShareInteger-----------------------------
// 名    称:ReadShareInteger
// 功    能:读内存映像文件中的整形数据
// 参    数:
//          ShareName         内存映像文件的唯一标示,必须是已经存在的
// 返 回 值:内存映像文件中的数据
// 日    期:2004.02.05
// 修    改:????.??.??
function ReadShareInteger(ShareName: pchar): integer; export;
// --------------------------------RunAndWaitForExe-----------------------------
// 名    称:RunAndWaitForExe
// 功    能:运行指定的程序并等待其执行结束
// 参    数:
//          appName         要运行的程序的名称
//          cmdLine         命令行参数
// 返 回 值:
//          -1              运行程序失败
//          其他            程序退出的flag
// 日    期:2004.02.06
// 修    改:????.??.??
function RunAndWaitForExe(appName: pchar; cmdLine: pchar): integer; export;
                                                      
implementation
function FindProcessID(procName: pchar): THandle;
var
  lppe: TProcessEntry32;
  SSHandle: THandle;
  Found: boolean;
begin
  result :
= 0;
  SSHandle :
= CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);          // 取得系统快照
  try
    lppe.dwSize :
= sizeof(lppe);
    Found :
= Process32First(SSHandle, lppe);                        // 从中取出第一个进程的部分属性
    
while Found do
    
begin
      
if ansiCompareText(ExtractFileName(lppe.szExeFile), procName) = 0 then
      
begin
        result :
= lppe.th32ProcessID;
        break;
      
end;
      Found :
= Process32Next(SSHandle, lppe);                       // 从中取出下一个进程的部分属性
    
end;
  finally
    CloseHandle(SSHandle);
  
end;
end;
function ListProcesses(pl: PList): integer;
var
  lppe: TProcessEntry32;
  SSHandle: THandle;
  Found: boolean;
  pi: PProcInfo;
begin
  SSHandle :
= CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
  try
    result :
= 0;
    lppe.dwSize :
= sizeof(lppe);
    Found :
= Process32First(SSHandle, lppe);
    
while Found do
    
begin
      inc(result);
      try
        
if pl <> nil then
        
begin
          new(pi);
          pi^.ProcID :
= lppe.th32ProcessID;
          pi^.ExeFile :
= lppe.szExeFile;
          pi^.CntThread :
= lppe.cntThreads;
          pl^.Add(TObject(pi));
        
end;
      except
        break;
      
end;
      Found :
= Process32Next(SSHandle, lppe);
    
end;
  finally
    CloseHandle(SSHandle);
  
end;
end;
posted on 2008-08-11 10:21  dotjava  阅读(264)  评论(0)    收藏  举报