首页
社区
课程
招聘
[求助]DELPHI代码疑惑!
发表于: 2009-2-14 13:26 4807

[求助]DELPHI代码疑惑!

2009-2-14 13:26
4807
我摘了3段主要的代码!希望大家能帮我解决下~ 谢谢了~

前面已经枚举了进程

procedure TProcessWindow.OKButtonClick(Sender: TObject);
var ProcessIDString: String;
    i:               Integer;
begin
  if formsettings.cbUndoMemoryChanges.checked then CheckForChanges;

  if Processlist.ItemIndex>-1 then
  begin
    DetachIfPossible;
   ProcessIDString:='';
    i:=1;
    while ProcessList.Items[Processlist.ItemIndex][i]<>'-' do
    begin
      ProcessIDString:=ProcessIDString+ProcessList.Items[Processlist.ItemIndex][i];
     inc(i);
    end;

    PWOP(ProcessIDString); //这里的ProcessIDString最后取出来时什么啊?进程ID?
   MainForm.ProcessLabel.caption:=ProcessList.Items[Processlist.ItemIndex];
  end;
end;

procedure TFrmProcessWatcher.PWOP(ProcessIDString:string);
var i:integer;
begin
  val('$'+ProcessIDString,ProcessHandler.processid,i); //初学delphi 这里具体什么意思啊? val  后面'$'
  if i<>0 then raise exception.Create(processidstring+' isn''t a valid processID');
  if Processhandle<>0 then   //这里通过 ProcessIDString 得到了 processid  难道这两个不一样,还是什么标志啊?
  begin
    CloseHandle(ProcessHandle);
    ProcessHandler.ProcessHandle:=0;
  end;

  Open_Process;   //这里打开
end;

procedure Open_Process;
begin
  {$ifndef netclient}
  ProcessHandler.ProcessHandle:=NewKernelHandler.OpenProcess(PROCESS_ALL_ACCESS,false,ProcessID);
  {$endif}
end;

小菜菜一个! 希望大家帮助下哈~  PROCESS_ALL_ACCESS具体数值应该时什么饿?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
procedure TProcessWindow.OKButtonClick(Sender: TObject);
var ProcessIDString: String;
    i:               Integer;
begin
  if formsettings.cbUndoMemoryChanges.checked then CheckForChanges;

  if Processlist.ItemIndex>-1 then
  begin
    DetachIfPossible;
   ProcessIDString:='';
    i:=1;
    while ProcessList.Items[Processlist.ItemIndex][i]<>'-' do
    begin
      ProcessIDString:=ProcessIDString+ProcessList.Items[Processlist.ItemIndex][i];
     inc(i);
    end;

    PWOP(ProcessIDString); //这里的ProcessIDString最后取出来时什么啊?进程ID?PWOP函数是兼关闭“前一个进程”和“打开新的进程”函数,不会取出什么东西来。ProcessIDString保存的是转换成“字符串类型”的“进程ID值”。
   MainForm.ProcessLabel.caption:=ProcessList.Items[Processlist.ItemIndex];
  end;
end;

procedure TFrmProcessWatcher.PWOP(ProcessIDString:string);
var i:integer;
begin
  val('$'+ProcessIDString,ProcessHandler.processid,i); //初学delphi 这里具体什么意思啊? val  后面'$'Val函数是将字符串类型数值转换成整数类型值,'$'是告诉val函数,这个要转换的字符串类型数值要按十六进制的数值类型转换。
  if i<>0 then raise exception.Create(processidstring+' isn''t a valid processID');
  if Processhandle<>0 then   //这里通过 ProcessIDString 得到了 processid  难道这两个不一样,还是什么标志啊?Processhandle是在外部取得的,不是ProcessIDString得到的。这一句主要是判断Processhandle(进程句柄)是否为零,如果不为零则调用下面的CloseHandle函数关闭进程
  begin
    CloseHandle(ProcessHandle);
    ProcessHandler.ProcessHandle:=0;
  end;

  Open_Process;   //这里打开
end;

procedure Open_Process;
begin
  {$ifndef netclient}
  ProcessHandler.ProcessHandle:=NewKernelHandler.OpenProcess(PROCESS_ALL_ACCESS,false,ProcessID);
  {$endif}
end;

小菜菜一个! 希望大家帮助下哈~  PROCESS_ALL_ACCESS具体数值应该时什么饿?
SYNCHRONIZE = $00100000;
STANDARD_RIGHTS_REQUIRED = $000F0000;
PROCESS_ALL_ACCESS        = (STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $FFF);
2009-2-14 15:36
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
但是val这个函数只有一个参数啊

val('$'+ProcessIDString,ProcessHandler.processid,i);

为什么这里有三个啊?
2009-2-14 16:40
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
没错,是两个参数。
procedure Val(S; var V; var Code: Integer);
'$'+ProcessIDString是第一个参数,i是第二个参数。
2009-2-14 17:00
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
val( '$'+ProcessIDString , ProcessHandler.processid  ,  i );

但是我到网上搜索了下 val 只有一个参数

这是一个把字符串转为数值的函数。
  它返回包含于字符串内的数字,字符串中是一个适当类型的数值。

VAL也是个API函数么?   

'$'+ProcessIDString 就是把得到的ProcessIDString(整数)转换成16进制么?还是把ProcessIDString直接当成16进制饿?

谢谢了~ 感觉DELPHI很别扭!
2009-2-14 17:04
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
6
Val 不是API
简单来请就是将字符串 S 转成数值存放于 V
若非正确数值格式的话, 则将错误位置放于 Code. 而不会像StrToInt会产生例外.
例如:
   Val("123r567", V , Code)
   V=123
   Code= 3

'$' 是让Delphi视字符串为十六进制
100 = 64h = Delphi的 $64

Declaration

procedure Val(S; var V; var Code: Integer);

Description

The Val function converts the string value S to its numeric representation, as if it were
read from a text file with Read.
S is a string-type expression; it must be a sequence of characters that form a signed
whole number. V is an integer-type or real-type variable. Code is a variable of type Integer.
If the string is invalid, the index of the offending character is stored in Code; otherwise,
Code is set to zero. For a null-terminated string, the error position returned in Code is
one larger than the actual zero-based index of the character in error.

Val performs range checking differently depending upon the state of $R and the type of
the parameter V.
2009-2-14 18:45
0
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
确切的说是 3个参数
第一个是待处理字符串
第二个是取出的数值
第三个是 如果出现错误,错误地址
还有楼上有处错误,code应该是4
2009-2-14 21:05
0
游客
登录 | 注册 方可回帖
返回
//