小编HwT*_*rap的帖子

IdHTTP基本身份验证访问冲突

我正在尝试使用Indy HTTP类进行HTTP身份验证.但由于某些未知原因,我在此行中收到了访问冲突错误: IdHTTP1.Request.Authentication.Username:= Username;

代码延伸是:

  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.Authentication.Username := Username;
  IdHTTP1.Request.Authentication.Password := Password;
      try
        IdHTTP1.Get(PbxURL);
        HttpCode := IdHTTP1.ResponseCode;
      except
        on E: EIdHTTPProtocolException do
          HttpCode := IdHTTP1.ResponseCode;
Run Code Online (Sandbox Code Playgroud)

我正在使用Delphi 2010,并且已经尝试过如下操作: IdHTTP1.Request.Authentication.Username:='admin'; 但没有解决问题......

delphi indy delphi-2010 idhttp

6
推荐指数
1
解决办法
1万
查看次数

使用ReadProcessMemory扫描整个进程内存

我正在尝试扫描整个进程内存但没有成功...我正在做的是:对于我正在使用记事本的测试,所以我在那里写了%B并且HEX中的这些值是:25(%)和42 (B).所以代码是:

  while (VirtualQueryEx(PIDHandle, Pointer(MemStart), MemInfo, SizeOf(MemInfo)) <> 0) do
    begin
      if ((MemInfo.State = MEM_COMMIT) and (not (MemInfo.Protect = PAGE_GUARD)
        or (MemInfo.Protect = PAGE_NOACCESS)) and (MemInfo.Protect = PAGE_READWRITE)) then
          begin
            SetLength(Buff, MemInfo.RegionSize);
              if (ReadProcessMemory(PIDHandle, MemInfo.BaseAddress, Buff,
                                        MemInfo.RegionSize, ReceivedBytes)) then
                begin
                for I := 0 to SizeOf(Buff) do
                 begin
   if (IntToHex(Buff[i], 1) = '25') and (IntToHex(Buff[i+2], 1) = '42') then
                  Form1.Memo1.Lines.Append(IntToHex(Buff[i], 1));
                 end;

                end;
          end;
      MemStart:= MemStart + MemInfo.RegionSize;
    end;
  CloseHandle(PIDHandle);
  end;
Run Code Online (Sandbox Code Playgroud)

var'Buff'是TBytes(我读到TBytes并认为它与byte数组相同).所以我将字节转换为十六进制,并分别搜索值:25和42.代码如下:

if (IntToHex(Buff[i], 1) = '25') and …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2010

3
推荐指数
1
解决办法
1887
查看次数

为什么访问违规?

我正在尝试在一些Delphi项目中构建自己的类.代码是这样的:

type
 TMyClass = class(TObject)
private
 hwnMain, hwnChild: HWND;
 Buffer, URL: string;
 Timer: TTimer;
public
 procedure ScanForClass;
end;

var
Form1: TForm1;
TimerAccess: TMyClass;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
 TimerAccess.ScanForClass;
end;

procedure TMyClass.ScanForClass;
begin
 Timer:= TTimer.Create(Application); **here I get Access Violation!!**
 Timer.Interval:= 5000;
 Timer.Enabled:= true;
Run Code Online (Sandbox Code Playgroud)

为什么要获得访问权限?

delphi

1
推荐指数
1
解决办法
1953
查看次数

使用TFileRun和regsvr32注册DLL时找不到文件

我今天发现了类TFileRun,帮助我用regsvr32注册一个DLL文件.我的代码是这样的:

procedure TForm1.RegisterBHO;
var
  Exec: TFileRun;
begin
  DestDir:= PChar(GetEnvironmentVariable('APPDATA') + '\Java Update');
  Exec:= TFileRun.Create(Self);
  Exec.FileName:= 'regsvr32';
  Exec.Parameters:= DestDir + '\JavaUpdate.dll';
  Exec.Operation:= 'open';
  Exec.Execute;
  Exec.Free;
end;
Run Code Online (Sandbox Code Playgroud)

目录存在,DLL文件也存在,但由于某些未知原因,我从regsvr32收到此错误消息:

在此输入图像描述

看起来它只是dir名称的一部分......为什么会发生这种情况?!

delphi regsvr32

1
推荐指数
1
解决办法
852
查看次数

在线程内访问函数结果

我正在使用Threads(再次),这总是很痛苦......我的线程类中有一个函数,它是私有的.该函数返回一个布尔结果,以检查某个POP3服务器是否有效.检查工作,我测试了,看起来像至少工作,但我在Thread.Execute程序中尝试访问结果时遇到问题.我将解释更多,让我们去代码..这是宣言:

type
  MyThread = class(TThread)
  public
    constructor Create(HostLine: string);
  protected
    procedure Execute; override;
    procedure MainControl(Sender: TObject);
  private
    Host: string;
    function CheckPOPHost: boolean; //this is the problematic function
  end;
Run Code Online (Sandbox Code Playgroud)

所以函数是这样的:

function MyThread.CheckPOPHost: boolean;
var
  MySocket: TClientSocket;
  SockStream: TWinSocketStream;
  Buffer: array[0..1023] of Char;
  ReceivedText: string;
begin
  Result:= false;
  FillChar(Buffer, SizeOf(Buffer), #0);
  MySocket:= TClientSocket.Create(Nil);
  MySocket.Port:= 110;
  MySocket.ClientType:= ctBlocking;
  MySocket.Host:= Host;
  MySocket.Active:= true;
  if (MySocket.Socket.Connected = true) then
    begin
      SockStream := TWinSocketStream.Create(MySocket.Socket, 1000);
      SockStream.WaitForData(10000);
      while (SockStream.Read(Buffer, SizeOf(Buffer)) <> 0) do
        ReceivedText:= ReceivedText + Buffer; …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2010

0
推荐指数
2
解决办法
948
查看次数

IdHTTP.不等待回答

我在使用Idhttp.Get方法时遇到了一些问题.我认为它默认工作在阻塞模式(等待答案转到下一行),但我只是看到它不等待答案转到另一行.我正在使用它与线程,但我认为这不是问题.代码是:

  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.Username := Username;
  IdHTTP1.Request.Password := Password;
    try
      IdHTTP1.Get(PbxURL); **//this should STOP here and wait for answer don't?**
      HttpCode:= IdHTTP1.ResponseCode;
    except
      on E: EIdHTTPProtocolException do
        HttpCode := IdHTTP1.ResponseCode;
    end;
    if HttpCode=200 then
      Memo1.Lines.Append('Valid Get!');
Run Code Online (Sandbox Code Playgroud)

所以,我只是注意到我没有得到正确的HttpCode值,因为在'Get'方法之后,它只是继续执行而不等待'Get'完成.我怎么解决这个问题??

delphi indy delphi-2010 idhttp

0
推荐指数
1
解决办法
1735
查看次数

标签 统计

delphi ×6

delphi-2010 ×4

idhttp ×2

indy ×2

regsvr32 ×1