当前位置: 首页 > news >正文

[AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性

目录

背景描述

 用浏览器访问,正常返回

​编辑

 AHK v2官方示例源代码

 AHK v2运行结果报错(0x80092004) 找不到对象或属性

用thqby大佬的WinHttpRequest.ahk库测试报错 0x80092004 找不到对象或属性

附:

用Apifox访问,也正常返回

AHK v1 官方示例源代码

AHK v1运行失败报错 0x80092004 找不到对象或属性

用Msxml2.XMLHTTP则能正常得到结果



背景描述

想通过ahk编程,获取 https://autohotkey.com/download/2.0/version.txt  的文件内容。

在确认用浏览器可以正常访问情况下,用官方帮助中的示例运行会报错 Error: (0x80092004) 找不到对象或属性。用 thqby大佬的 WinHttpRequest.ahk 网络请求库 https://github.com/thqby/ahk2_lib/blob/master/WinHttpRequest.ahk  也报同样错误。

求指点

 用浏览器访问,正常返回

 AHK v2官方示例源代码

whr := ComObject("WinHttp.WinHttpRequest.5.1")
whr.Open("GET", "https://autohotkey.com/download/2.0/version.txt", true)
whr.Send()
whr.WaitForResponse()
version := whr.ResponseText
MsgBox version

 AHK v2运行结果报错(0x80092004) 找不到对象或属性

如果把参数 true改为 false ,报错如下:

用thqby大佬的WinHttpRequest.ahk库测试报错 0x80092004 找不到对象或属性

/************************************************************************* @file: WinHttpRequest.ahk* @description: 网络请求库* @author thqby* @date 2021/08/01* @version 0.0.18***********************************************************************/#Requires AutoHotkey v2.0
whr := WinHttpRequest()
whr.Open("Get", "https://www.autohotkey.com/download/2.0/version.txt", True)
whr.Send()
whr.WaitForResponse()
MsgBox whr.ResponseTextclass WinHttpRequest {static AutoLogonPolicy := {Always: 0,OnlyIfBypassProxy: 1,Never: 2}static Option := {UserAgentString: 0,URL: 1,URLCodePage: 2,EscapePercentInURL: 3,SslErrorIgnoreFlags: 4,SelectCertificate: 5,EnableRedirects: 6,UrlEscapeDisable: 7,UrlEscapeDisableQuery: 8,SecureProtocols: 9,EnableTracing: 10,RevertImpersonationOverSsl: 11,EnableHttpsToHttpRedirects: 12,EnablePassportAuthentication: 13,MaxAutomaticRedirects: 14,MaxResponseHeaderSize: 15,MaxResponseDrainSize: 16,EnableHttp1_1: 17,EnableCertificateRevocationCheck: 18,RejectUserpwd: 19}static PROXYSETTING := {PRECONFIG: 0,DIRECT: 1,PROXY: 2}static SETCREDENTIALSFLAG := {SERVER: 0,PROXY: 1}static SecureProtocol := {SSL2: 0x08,SSL3: 0x20,TLS1: 0x80,TLS1_1: 0x200,TLS1_2: 0x800,All: 0xA8}static SslErrorFlag := {UnknownCA: 0x0100,CertWrongUsage: 0x0200,CertCNInvalid: 0x1000,CertDateInvalid: 0x2000,Ignore_All: 0x3300}__New(UserAgent := unset) {(this.whr := ComObject('WinHttp.WinHttpRequest.5.1')).Option[0] := IsSet(UserAgent) ? UserAgent : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.68'}request(url, method := 'GET', post_data?, headers := {}) {this.Open(method, url)for k, v in headers.OwnProps()this.SetRequestHeader(k, v)this.Send(post_data?)return this.ResponseText}enableRequestEvents(Enable := true) {static vtable := init_vtable()if !Enablereturn this._ievents := this._ref := 0if this._ieventsreturnIConnectionPointContainer := ComObjQuery(pwhr := ComObjValue(this.whr), '{B196B284-BAB4-101A-B69C-00AA00341D07}')DllCall('ole32\CLSIDFromString', 'str', '{F97F4E15-B787-4212-80D1-D380CBBF982E}', 'ptr', IID_IWinHttpRequestEvents := Buffer(16))ComCall(4, IConnectionPointContainer, 'ptr', IID_IWinHttpRequestEvents, 'ptr*', IConnectionPoint := ComValue(0xd, 0))	; IConnectionPointContainer->FindConnectionPointIWinHttpRequestEvents := Buffer(3 * A_PtrSize)NumPut('ptr', vtable.Ptr, 'ptr', ObjPtr(this), 'ptr', ObjPtr(IWinHttpRequestEvents), IWinHttpRequestEvents)ComCall(5, IConnectionPoint, 'ptr', IWinHttpRequestEvents, 'uint*', &dwCookie := 0)	; IConnectionPoint->Advisethis._ievents := { __Delete: (*) => ComCall(6, IConnectionPoint, 'uint', dwCookie) }static init_vtable() {vtable := Buffer(A_PtrSize * 7), offset := vtable.Ptrfor nParam in StrSplit('3113213')offset := NumPut('ptr', CallbackCreate(EventHandler.Bind(A_Index), , Integer(nParam)), offset)vtable.DefineProp('__Delete', { call: __Delete })return vtablestatic EventHandler(index, this, arg1 := 0, arg2 := 0) {if (index < 4) {IEvents := NumGet(this, A_PtrSize * 2, 'ptr')if index == 1NumPut('ptr', this, arg2)if index == 3ObjRelease(IEvents)else ObjAddRef(IEvents)return 0}req := ObjFromPtrAddRef(NumGet(this, A_PtrSize, 'ptr'))req.readyState := index - 2switch index {case 4:	; OnResponseStarttry req.OnResponseStart(arg1, StrGet(arg2, 'utf-16'))case 5:	; OnResponseDataAvailabletry req.OnResponseDataAvailable(NumGet((pSafeArray := NumGet(arg1, 'ptr')) + 8 + A_PtrSize, 'ptr'),NumGet(pSafeArray + 8 + A_PtrSize * 2, 'uint'))case 6:	; OnResponseFinishedtry req._ref := 0, req.OnResponseFinished()case 7:	; OnErrortry req.readyState := req._ref := 0, req.OnError(arg1, StrGet(arg2, 'utf-16'))}}static __Delete(this) {loop 7CallbackFree(NumGet(this, (A_Index - 1) * A_PtrSize, 'ptr'))}}};#region IWinHttpRequest https://learn.microsoft.com/en-us/windows/win32/winhttp/iwinhttprequest-interfaceSetProxy(ProxySetting, ProxyServer, BypassList) => this.whr.SetProxy(ProxySetting, ProxyServer, BypassList)SetCredentials(UserName, Password, Flags) => this.whr.SetCredentials(UserName, Password, Flags)SetRequestHeader(Header, Value) => this.whr.SetRequestHeader(Header, Value)GetResponseHeader(Header) => this.whr.GetResponseHeader(Header)GetAllResponseHeaders() => this.whr.GetAllResponseHeaders()Send(Body?) => (this._ievents && this._ref := this, this.whr.Send(Body?))Open(verb, url, async := false) {this.readyState := 0this.whr.Open(verb, url, async)this.readyState := 1}WaitForResponse(Timeout := -1) => this.whr.WaitForResponse(Timeout)Abort() => (this._ref := this.readyState := 0, this.whr.Abort())SetTimeouts(ResolveTimeout := 0, ConnectTimeout := 60000, SendTimeout := 30000, ReceiveTimeout := 30000) => this.whr.SetTimeouts(ResolveTimeout, ConnectTimeout, SendTimeout, ReceiveTimeout)SetClientCertificate(ClientCertificate) => this.whr.SetClientCertificate(ClientCertificate)SetAutoLogonPolicy(AutoLogonPolicy) => this.whr.SetAutoLogonPolicy(AutoLogonPolicy)Status => this.whr.StatusStatusText => this.whr.StatusTextResponseText => this.whr.ResponseTextResponseBody {get {pSafeArray := ComObjValue(t := this.whr.ResponseBody)pvData := NumGet(pSafeArray + 8 + A_PtrSize, 'ptr')cbElements := NumGet(pSafeArray + 8 + A_PtrSize * 2, 'uint')return ClipboardAll(pvData, cbElements)}}ResponseStream => this.whr.responseStreamOption[Opt] {get => this.whr.Option[Opt]set => (this.whr.Option[Opt] := Value)}Headers {get {m := Map(), m.Default := ''loop parse this.GetAllResponseHeaders(), '`r`n'if (p := InStr(A_LoopField, ':'))m[SubStr(A_LoopField, 1, p - 1)] .= LTrim(SubStr(A_LoopField, p + 1))return m}}/*** The OnError event occurs when there is a run-time error in the application.* @prop {(this,errCode,errDesc)=>void} OnError*/OnError := 0/*** The OnResponseDataAvailable event occurs when data is available from the response.* @prop {(this,safeArray)=>void} OnResponseDataAvailable*/OnResponseDataAvailable := 0/*** The OnResponseStart event occurs when the response data starts to be received.* @prop {(this,status,contentType)=>void} OnResponseDataAvailable*/OnResponseStart := 0/*** The OnResponseFinished event occurs when the response data is complete.* @prop {(this)=>void} OnResponseDataAvailable*/OnResponseFinished := 0;#endregionreadyState := 0, whr := 0, _ievents := 0static __New() {if this != WinHttpRequestreturnthis.DeleteProp('__New')for prop in ['OnError', 'OnResponseDataAvailable', 'OnResponseStart', 'OnResponseFinished']this.Prototype.DefineProp(prop, { set: make_setter(prop) })make_setter(prop) => (this, value := 0) => value && (this.DefineProp(prop, { call: value }), this.enableRequestEvents())}
}

附:

用Apifox访问,也正常返回

AHK v1 官方示例源代码

whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
whr.Open("GET", "https://www.autohotkey.com/download/1.1/version.txt", true)
whr.Send()
whr.WaitForResponse()
version := whr.ResponseText
MsgBox % version

AHK v1运行失败报错 0x80092004 找不到对象或属性

用Msxml2.XMLHTTP则能正常得到结果

#Requires AutoHotkey v2.0
req := ComObject("Msxml2.XMLHTTP")
req.open("GET", "https://www.autohotkey.com/download/2.0/version.txt", true)
req.onreadystatechange := Ready
req.send()PersistentReady() {if (req.readyState != 4)  ; 没有完成.returnif (req.status == 200) ; OK.MsgBox "Latest AutoHotkey version: " req.responseTextelseMsgBox "Status " req.status,, 16ExitApp
}

 

相关文章:

[AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性

目录 背景描述 用浏览器访问&#xff0c;正常返回 ​编辑 AHK v2官方示例源代码 AHK v2运行结果报错(0x80092004) 找不到对象或属性 用thqby大佬的WinHttpRequest.ahk库测试报错 0x80092004 找不到对象或属性 附&#xff1a; 用Apifox访问&#xff0c;也正常返回 AHK v1 …...

`speech_recognition` 是一个流行的库

在Python中&#xff0c;speech_recognition 是一个流行的库&#xff0c;用于从各种来源&#xff08;如麦克风、文件等&#xff09;进行语音识别。以下是您提到的技术名称和相应的Python代码示例。 技术名称 语音识别&#xff08;Speech Recognition&#xff09;&#xff1a;这…...

MFC Ribbon菜单 - 中英文实时切换方法

简介 最近在搞一个老外的项目&#xff0c;本来谈的好好的&#xff0c;纯英文界面。项目接近尾声了&#xff0c;又提出了中英文实时切换的新需求&#xff0c;没办法就只能想办法&#xff0c;毕竟客户最大嘛。 实现方法 还好本来的ribbon英文菜单不复杂&#xff0c;就用纯C编码…...

MFC程序创建word,创建表格,写入数据

文章目录 1、MFC程序功能&#xff1a;2、MFC程序实现2.1 创建项目2.2 添加word操作类2.3 添加word资源2.4 编写代码&#xff0c;实现将数据写入到word2.5 运行程序、验证功能3、工程代码下载 1、MFC程序功能&#xff1a; 创建word文档&#xff1b;向文档中写入字符串&#xff…...

FPGA:基于复旦微FMQL10S400 /FMQL20S400 国产化核心板

复旦微电子是国内集成电路设计行业的领军企业之一&#xff0c;早在2000年就在香港创业板上市&#xff0c;成为行业内首家上市公司。公司的RFID芯片、智能卡芯片、EEPROM、智能电表MCU等多种产品在市场上的占有率位居行业前列。 今天介绍的是搭载复旦微 FMQL10S400/FMQL20S400的…...

centos下使用yum安装keepalived工具

1、安装如下rpm包&#xff0c;不安装此包在装keepalived时会报错 mkdir keepalived_rpm cd keepalived_rpm/ wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-community-libs-compat-8.0.36-1.el7.x86_64.rpm 2、使用yum进行keepalived的安装 yum -y install keepal…...

无人机图像目标检测

本仓库是人工智能课程的课程作业仓库&#xff0c;主要是完成无人机图像目标检测的任务&#xff0c;我们对visdrone数据集进行了处理&#xff0c;在yolo和ssd两种框架下进行了训练和测试&#xff0c;并编写demo用于实时的无人机图像目标检测。 requirements依赖&#xff1a; ss…...

JSqlParser 解析 sql

目录 前言一、Maven依赖二、获取sql中的表名三、获取sql中的具体信息 前言 JSqlParser是一个 SQL 语句解析器。它将 SQL 语句转换为可遍历的 Java 类层次结构&#xff0c;可以方便的用代码对 SQL 语句进行解析&#xff0c;修改等操作。 官网 api 文档和 github 地址如下&…...

Vue中使用mind-map实现在线思维导图

概述 在前面的文章Vue中实现在线画流程图实现中介绍了流程图的在线绘制&#xff0c;在本文&#xff0c;给大家分享一下基于mind-map实现在线的思维导图&#xff0c;并实现&#xff1a;1. 导图导出为图片&#xff1b;2. 打开xmind文件。 实现效果 实现 1. mind-map简介 simp…...

ChatGPT 深度解析:技术驱动的智能对话

在当今科技飞速发展的时代&#xff0c;ChatGPT 无疑成为了最耀眼的明星之一。它以其令人惊叹的智能对话能力&#xff0c;引发了全球范围内的广泛关注和热议。 ChatGPT 背后的技术堪称精妙绝伦。它基于深度学习算法&#xff0c;通过对海量数据的学习和分析&#xff0c;从而能够理…...

Armv8-R内存模型详解

目录 1.内存模型的必要性 2.Armv8-R内存模型分类 2.1 Normal memory 2.2 Device Memory 2.2.1 Gathering 2.2.2 Reordering 2.2.3 Early Write Acknowledgement 3.小结 大家好&#xff0c;今天是悲伤的肌肉。 在调研区域控制器芯片时&#xff0c;发现了S32Z、Stellar …...

Python面经

文章目录 Python基本概念1. Python是**解释型**语言还是**编译型**语言2. Python是**面向对象**语言还是面向过程语言3. Python基本数据类型4.append和 extend区别5.del、pop和remove区别6. sort和sorted区别介绍一下Python 中的字符串编码is 和 的区别*arg 和**kwarg作用浅拷…...

海外ASO:iOS与谷歌优化的相同点和区别

海外ASO是针对iOS的App Store和谷歌的Google Play这两个主要海外应用商店进行的优化过程&#xff0c;两个不同的平台需要采取不同的优化策略&#xff0c;以下是对iOS优化和谷歌优化的详细解析&#xff1a; 一、iOS优化&#xff08;App Store&#xff09; 1、关键词覆盖 选择关…...

【C++题解】1168. 歌唱比赛评分

问题&#xff1a;1168. 歌唱比赛评分 类型&#xff1a;数组找数 题目描述&#xff1a; 四&#xff08;1&#xff09; 班要举行一次歌唱比赛&#xff0c;以选拔更好的苗子参加校的歌唱比赛。评分办法如下&#xff1a;设 N 个评委&#xff0c;打 N 个分数&#xff08; 0≤每个分…...

鸿蒙开发工程师面试-架构篇

1. 假如让你负责鸿蒙App架构设计&#xff0c;你会关注哪些方面&#xff1f; 分层架构设计&#xff1a; 将应用划分为产品定制层、基础特性层和公共能力层&#xff0c;以降低层间依赖性&#xff0c;提升代码可维护性。通过分层架构设计&#xff0c;进一步明确每层的职责和层间交…...

【Redis】持久化

对于Redis中间件来说&#xff0c;一般是作为内存型数据库或者缓存出现的。但是由于其数据是在内存中&#xff0c;因此当Redis所在的主机宕机之后&#xff0c;数据就会消失&#xff0c;再次重启之后&#xff0c;没有任何数据。这对于生产环境来说&#xff0c;是属于P0级别的灾难…...

港股指数实时行情API接口

港股 指数 实时 行情 API接口 # Restful API https://tsanghi.com/api/fin/index/HKG/realtime?token{token}&ticker{ticker}指定指数代码&#xff0c;获取该指数的实时行情&#xff08;开、高、低、收、量&#xff09;。 更新周期&#xff1a;实时。 请求方式&#xff1a…...

Qt5开发实战_图形_QPen

Qpen是Qt框架中的一个类&#xff0c;用于定义绘制线条的属性&#xff0c;包括颜色、宽度、样式、端点样式和连接样式。 具体属性(设置颜色和设置宽度直接pass从样式开始&#xff09;: 设置样式&#xff1a; pen的样式主要有以下几种&#xff1a; 分别是&#xff1a;直线样式…...

linux进程周边知识——内核对硬件的管理——计算机世界的管理

前言&#xff1a;本节主要讲解内核也就是操作系统对于硬件的管理&#xff0c; 本节内容同样为进程的周边知识。 主要是关于软件方面&#xff0c; 和我的上一篇——冯诺依曼体系结构可以说是兄弟文章&#xff0c; 这篇文章主要是关于硬件方面。 两篇文章都是为学习进程做准备。但…...

同声传译语音合成接口,分段预合成实现丝滑的衔接效果

背景&#xff1a; 在使用微信官方语音合成插件的时候遇到一个问题&#xff0c;textToSpeech这个api的内容限制在官网的文档上明明是1000个字节&#xff0c;也就是说能保证333个中文字符应该是没有问题的&#xff0c;但是也不知道为什么我这里仅仅传了150个中文字符就报错了&…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...