vbscript中的dllcall

vbscript中的dllcall,vbscript,autohotkey,Vbscript,Autohotkey,我想有一个简单的vbs脚本,它运行在每台Windows PC上,而不需要额外的应用程序和工具 以下是一个用英文编写的简短脚本: 从文件中提取文本字符串,并通过DLLCALL将其作为资源添加到exe文件中 能否在vbs中以简单的方式复制 ExeFile=MyExe.exe ScriptF=Script.txt 文件读取,脚本,%ScriptF% VarSetCapacity(Bin,BinScript_Len:=StrPut(脚本,“UTF-8”)-1) StrPut(脚本和BinScript,“

我想有一个简单的vbs脚本,它运行在每台Windows PC上,而不需要额外的应用程序和工具

以下是一个用英文编写的简短脚本: 从文件中提取文本字符串,并通过DLLCALL将其作为资源添加到exe文件中

能否在vbs中以简单的方式复制

ExeFile=MyExe.exe
ScriptF=Script.txt
文件读取,脚本,%ScriptF%
VarSetCapacity(Bin,BinScript_Len:=StrPut(脚本,“UTF-8”)-1)
StrPut(脚本和BinScript,“UTF-8”)
模块:=DllCall(“BeginUpdateResource”、“str”、ExeFile、“uint”、0、“ptr”)

DllCall(“UpdateResource”,“ptr”,Module,“ptr”,10,“str”,我的脚本简短的回答是否定的


VBScript只能调用通过函数公开并在VBScript中引用的DLL

下面是VBScript调用外部库的示例

Dim dll:Set dll=CreateObject(“Scripting.FileSystemObject”)
'从脚本库中的FileSystemObject对象调用CreateFolder()方法。
创建文件夹(“C:\test”)
虽然从技术上讲,这是一个内置组件(脚本运行时的一部分),但它演示了该过程,并位于外部库(
scrrun.dll
)中

但在这种情况下,根据文件


调用驻留在
User32.dll
Kernel32.dll
ComCtl32.dll
、或
Gdi32.dll
中的函数时,可以省略DllFile。例如,
“User32\IsWindowVisible”
生成与
“IsWindowVisible”
相同的结果


脚本正在调用不太可能向COM公开的Windows系统DLL函数调用。唯一的选项是为Windows系统DLL编写COM。

简短的回答是否


VBScript只能调用通过函数公开并在VBScript中引用的DLL

下面是VBScript调用外部库的示例

Dim dll:Set dll=CreateObject(“Scripting.FileSystemObject”)
'从脚本库中的FileSystemObject对象调用CreateFolder()方法。
创建文件夹(“C:\test”)
虽然从技术上讲,这是一个内置组件(脚本运行时的一部分),但它演示了该过程,并位于外部库(
scrrun.dll
)中

但在这种情况下,根据文件


调用驻留在
User32.dll
Kernel32.dll
ComCtl32.dll
、或
Gdi32.dll
中的函数时,可以省略DllFile。例如,
“User32\IsWindowVisible”
生成与
“IsWindowVisible”
相同的结果


该脚本正在调用不太可能向COM公开的Windows系统DLL函数调用。唯一的选项是为Windows系统DLL编写COM。

非常感谢,Lankymart。因此,在VBS中不可能像在VB中一样执行此操作?例如,我发现此示例:。(这里是Offtopic:您是否看到在每台Windows PC上运行的脚本中实现此功能的另一种方法?)“Nebe Be永远”,就像我说过的,你不能调用VBScript中的“代码”> Kelnal32.DLL/COD>中的系统函数,而不必在C++、C**、VB.NET等东西中编写COM DLL包装器,然后通过<代码> CuraTeBoObjet()调用它。
在VBScript中。我是一个讨厌的人,我知道:上面的离题问题没有任何提示?@newbieeforever lol,没有,根本不会重复我已经写过的内容。:D至于离题问题,可能需要另一个问题,因为需要更多关于你试图完成的内容的细节。非常感谢你,Lankymart。因此这是不可能的如何在VBS中实现与在VB中相同的功能?例如,我发现以下示例:(“Offtopic”在这里:您是否看到在每台Windows PC上运行的脚本中实现此功能的另一种方法?)“Nebe Be永远”,就像我说过的,你不能调用VBScript中的“代码”> Kelnal32.DLL/COD>中的系统函数,而不必在C++、C**、VB.NET等东西中编写COM DLL包装器,然后通过<代码> CuraTeBoObjet()调用它。在VBScript中。我是一个讨厌的人,我知道:上面的离题问题没有任何提示?@newieforever lol,没有,根本不会重复我已经写过的内容。至于离题问题,可能需要另一个问题,因为需要更多关于你试图完成什么的细节。没有简单的方法,但可以创建VBScript复制到临时文件夹wscript.exe,提取其中嵌入的dynwrap.dll和通过regsvr42创建的附加.manifest文件,以设置dll依赖项以供进一步使用,而无需注册dynwrap和其他dll,通过复制的wscript.exe重新启动自身,注册dll函数(如VBA的Declare),并将控制权委托给美国er代码部分。就是这样,在大纲中。@omegastripes什么是
regsvr42
你是说
regsvr32.exe
对吗?但是如果不构建COM包装器,怎么工作呢?你完全失去了我的意思。很抱歉。@Lankymart我的意思是完全正确的。@omegastripes哇,你每天都能学到一些新的东西,很好的链接。没有简单的方法,但创建VBScr是可能的ipt复制到临时文件夹wscript.exe,提取其中嵌入的dynwrap.dll和通过regsvr42创建的附加.manifest文件,以设置dll依赖项以供进一步使用,而无需注册dynwrap和其他dll,通过复制的wscript.exe重新启动自身,注册dll函数(如VBA的Declare),并将控制权委托给用户code部分。就是这样,在大纲中。@omegastripes什么是
regsvr42
你是说
regsvr32.exe
对吗?但是如果不构建COM包装器,怎么工作呢?你完全失去了我的意思。对不起。@Lankymart我的意思是完全正确的。@omegastripes哇,你每天都能学到一些新的东西,很棒的链接。