首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

关于OpenProcess这个函数,该如何处理

2012-03-17 
关于OpenProcess这个函数这是不是一个API函数?如下的语句,HANDLE hProcess OpenProcess( PROCESS_QUERY_

关于OpenProcess这个函数
这是不是一个API函数?

如下的语句,  
 HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
  PROCESS_VM_READ,
  FALSE, processID );
其中PROCESS_QUERY_INFORMATION 和PROCESS_VM_READ是什么意思? 两个东西当中那个竖杠是什么意思?

[解决办法]
http://baike.baidu.com/view/1280137.htm

[编辑本段]一.VC
  方法名称: OpenProcess 
  位置: Kernel32.dll
  OpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。
  1.函数原型
  HANDLE OpenProcess(
  DWORD dwDesiredAccess, // access flag
  BOOL bInheritHandle, // handle inheritance option
  DWORD dwProcessId // process identifier
  );
  2.返回值:
  如成功,返回值为指定进程的句柄。
  如失败,返回值为空,可调用GetLastError获得错误代码。
  -------------------------
  3.举例
  HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pID );
  ---------------------- 
  4.附:
  BOOL ReadProcessMemory( HANDLE hProcess, PVOID pvAddressRemote, PVOID pvBufferLocal, DWORD dwSize, PDWORD pdwNumBytesRead); 
  参数 
  hProcess //为远程进程的句柄 
  pvAddressRemote //用于指明远程进程中的地址 
  pvBufferLocal //是本地进程中的内存地址 
  dwSize //是需要传送的字节数 
  pdwNumBytesRead和pdwNumBytesWritten //用于指明实际传送的字节数.当函数返回时,可以查看这两个参数的值.

二.在vb中的使用
  1.VB声明
  Declare Function OpenProcess Lib "kernel32" Alias "OpenProcess" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  说明
  打开一个现有进程的句柄
  2.返回值
  Long,如执行成功,返回进程句柄;零表示失败。会设置GetLastError
  3.参数表
  参数 类型 及 说明
  dwDesiredAccess Long,指定这个句柄要求的访问方法。指定API32.TXT文件中以PROCESS_???开头的一个或多个常数
  bInheritHandle Long,如句柄能够由子进程继承,则为TRUE
  dwProcessId Long,要打开那个进程的进程标识符
  4.注解
  这个函数经常用来打开一个要进行同步的进程(同步:即步调协同,你说完,我再说,按说好的先后次序来)
  5.举例
  hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid) 打开进程
  If hProcess Then
   ReadProcessMemory hProcess, ByVal &H12F82C, base, 4, 0& 读写进程内存
  CloseHandle hProcess 结束进程
  End If
[编辑本段]三、Delphi
  var
  ProcessHandle, PID: longword;
  begin
  GetWindowThreadProcessId(FindWindow('Shell_TrayWnd', nil), @PID);//获取c的PID
  ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);//打开进程
  Inject(ProcessHandle, @Main);//插入代码
  CloseHandle(ProcessHandle);//关闭线程句柄
  end.

热点排行