首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >脚本vbs到windows api运行

脚本vbs到windows api运行
EN

Stack Overflow用户
提问于 2022-06-09 20:14:42
回答 1查看 405关注 0票数 2

我有一个播放mp3的vbs脚本,正常情况是通过将mp3文件拖到vbs或使用命令行指定mp3来调用它。

代码语言:javascript
运行
复制
Set objArgs = Wscript.Arguments
if (objArgs.Count = 0) then
    Wscript.echo "Necesito un archivo MP3"
    WScript.Quit 123
end if
'Wscript.echo "Playing: " & objArgs(0) & "..."
Set objPlayer = createobject("Wmplayer.OCX.7")
With objPlayer  ' saves typing
    .settings.autoStart = True
    .settings.volume = 100  ' 0 - 100
    .settings.balance = 0  ' -100 to 100
    .settings.enableErrorDialogs = False
    .enableContextMenu = False
    .URL = objArgs(0)
    WScript.Sleep(10000)  ' time to load and start playing
    '.Controls.Pause()  ' stop
End With
WScript.Quit 0
' MsgBox "if WMP is still playing, clicking OK will end it", _
' vbInformation, "WMP Demo finished"

我需要调用这段代码,而不需要创建vbs文件来保持简单。这能用Windows完成吗?

例如,callvbsfunction("mycodevbs")并运行它?

当我提到windows时,我指的是类似于这些

代码语言:javascript
运行
复制
MessageBox( 0, "Test", "Title here", MB_OK )
GetSystemMetrics( SM_CXSCREEN )
ShellExecute( 0, "open", "c:\myfile.txt", 0, 0, 1 )
Beep( 1000, 250 )

还有更多。

EN

回答 1

Stack Overflow用户

发布于 2022-06-10 02:29:04

注意,您的VBScript有错误。

VBScript不能调用API调用。VB.Net可以

将VBScript转换为VB.Net

  1. 移除Set关键字。所以只要objPlayer = createobject("Wmplayer.OCX.7").

  1. Dim除API调用之外的每个变量as Object .

  1. 将以下行放在文件的顶部。

导入系统导入System.Runtime.InteropServices公共模块AnythingYouWantToCallIt子主

在底部

代码语言:javascript
运行
复制
End Sub
End Module

  1. 所有参数必须放在括号中,包括Sub。在VBScript中,只有函数需要括号,Subs不需要括号。在VB.Net中,函数和Subs都需要方括号.

  1. ,它将处理VBScript转换。注意,WScript顶层对象不可用。对于Command().

,使用WScript.Arguments

调用API调用

您必须使用declare关键字。你把Declare放在Sub MainModule之后。

代码语言:javascript
运行
复制
Public Declare Function Lib "User32" GetSystemMetrics(ByVal SM as Integer) As Integer
Const SM_CXSCREEN = 0

您可以从文档中获得Declare的函数原型。https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getsystemmetrics

然后在你的代码中

代码语言:javascript
运行
复制
x = GetSystemMetrics(SM_CXSCREEN)

要编译,输入一个命令提示符修复文件名。

代码语言:javascript
运行
复制
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /target:winexe /out:"%~dp0\DeDup.exe" "%~dp0\DeDup.vb" 

下面是我的博客,介绍如何在编写VBA代码时将VBA移植到VB.Net。记住,合法的VBScript是合法的VBA。https://winsourcecode.blogspot.com

代码语言:javascript
运行
复制
   Imports System
   Imports System.Runtime.InteropServices
   Public Module AnythingYouWantToCallIt

   Public Declare Function GetSystemMetrics Lib "User32" (ByVal SM as Integer) As Integer
   Const SM_CXSCREEN = 0

   Sub Main
       Dim X as Object
       MsgBox( "Test", 0, "Title here")
       x = GetSystemMetrics( SM_CXSCREEN )
       Msgbox(X) 
   End Sub
   End Module
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72566154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档