winnet.dll(win10远程过程调用失败怎么解决_clientinner.dll的访问被拒绝)

发布时间:2025-12-10 19:25:24 浏览次数:4

win10远程过程调用失败怎么解决_clientinner.dll的访问被拒绝-

win10远程过程调用失败怎么解决_clientinner.dll的访问被拒绝winnet.dll访问httpgetpost还是很方便的,为了增加超时设置,需要使用异步的方式来调用api,其中的坑点太多,以此文记录一下,方便以后查看。先上代码:unitUnit2;interfaceusesWindows,WinInet,SyncObjs,SysUtils;//全局函数,支持超时functionHttpGet(url:string;…

winnet.dll访问http get post还是很方便的,为了增加超时设置,需要使用异步的方式来调用api,其中的坑点太多,以此文记录一下,方便以后查看。先上代码:

unit Unit2;interfaceuses  Windows, WinInet, SyncObjs, SysUtils;//全局函数,支持超时function HttpGet(url: string; timeOut: Integer = MaxInt): string;implementationtype  TReqContext = class  //请求的上下文  private    m_eCall: TEvent;    m_hOpen, m_hUrl: HINTERNET;  public    constructor Create;    destructor Destroy; override;  end;{ TReqContext }constructor TReqContext.Create;begin  m_eCall := TEvent.Create(nil, False, False, '');end;destructor TReqContext.Destroy;begin  if Assigned(m_hOpen) then    InternetCloseHandle(m_hOpen);  if Assigned(m_hUrl) then    InternetCloseHandle(m_hUrl);  m_eCall.Free;  inherited;end;//回调函数procedure Callback(hInternet: hInternet; //  dwContext, dwInternetStatus: DWORD; //  lpStatusInfo: HWND; dwStatusInfoLen: DWORD); stdcall;var  context: TReqContext;  pret: PInternetAsyncResult;begin  context := TReqContext(dwContext);  case dwInternetStatus of    INTERNET_STATUS_HANDLE_CREATED: //创建openurl的句柄成功,绑定并触发事件      begin        pret := PInternetAsyncResult(lpStatusInfo);        context.m_hUrl := Pointer(pret.dwResult);  //绑定句柄      end;    INTERNET_STATUS_REQUEST_COMPLETE: //openurl的请求完成      context.m_eCall.SetEvent;  end;end;//http get requestfunction HttpGet(url: string; timeOut: Integer = MaxInt): string;var  context: TReqContext;  back1: INTERNET_STATUS_CALLBACK;  buffer: array[0..50] of Char;  interbuf: TInternetBuffersA;  bret: Boolean;begin  timeOut := timeOut * 1000;  context := TReqContext.Create;  try    context.m_hOpen := InternetOpen(PChar('http_get'), INTERNET_OPEN_TYPE_DIRECT, //      nil, nil, INTERNET_FLAG_ASYNC); //这里一定要设置为:INTERNET_FLAG_ASYNC 表示异步请求    //异步请求需要设置一个回调函数,这里用类的静态函数:callback    back1 := InternetSetStatusCallback(context.m_hOpen, INTERNET_STATUS_CALLBACK(@Callback));    if NativeInt(back1) = INTERNET_INVALID_STATUS_CALLBACK then      Exit;    //get方式请求url,这里注意最后一个参数,一定要大于0,如果为0根本收不到回调    //一般来说最后一个参数是绑定的上下文,以便回调后访问相关参数    context.m_hUrl := InternetOpenUrl(context.m_hOpen, PChar(url), nil, 0, INTERNET_FLAG_RELOAD, Integer(context));    //接下来要检查openurl的返回句柄,一般来说都要异步返回    if context.m_hUrl = nil then  //在异步函数中绑定      if context.m_eCall.WaitFor(timeOut) <> wrSignaled then        Exit;    //有事件返回后,开始读数据    //以下需要写成while循环,读到dwBufferLength=0时,表示读完    //这里为了简单,只读了一次    ZeroMemory(@buffer[0], SizeOf(buffer));    ZeroMemory(@interbuf, SizeOf(interbuf));    interbuf.dwStructSize := SizeOf(interbuf);    interbuf.lpvBuffer := @buffer[0];    interbuf.dwBufferLength := SizeOf(buffer) - 1;    bret := InternetReadFileExA(context.m_hUrl, @interbuf, IRF_ASYNC, Integer(context));    if bret then    begin      if interbuf.dwBufferLength > 0 then        Result := StrPas(PChar(interbuf.lpvBuffer));    end    else    begin      //这里需要等待回调,然后再读    end;  finally    context.Free;  end;end;end.

是否还在为Ide开发工具频繁失效而烦恼,来吧关注以下公众号获取最新激活方式。亲测可用!

为防止网络爬虫,请关注公众号回复”口令”

激活idea 激活CLion DataGrip DataSpell dotCover dotMemory dotTrace GoLand PhpStorm PyCharm ReSharper ReShaC++ Rider RubyMine WebStorm 全家桶 刷新

【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】:官方授权 正版激活 自己使用,支持Jetbrains家族下所有IDE…

调用方式:HttpGet(“http://www.baidu.com”, 5),返回为请求到的结果,这里为5秒超时。

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477