标签: vbscript

如何使用java/vb脚本在自定义ActiveX dll中调用方法

我使用VB6创建了一个ActiveX dll,并使用打包和部署向导打包它,这导致了一个cab文件和一个演示HTML页面.

此ActiveX dll包含一个返回字符串并且不接受任何参数的simgle方法.

我遇到的麻烦是,当我调用该方法时,我总是得到一个"对象不支持此属性或方法"错误.但它支持我打电话的方法.

我想要实现的是用户访问一个网页,其中包含一些java或vb脚本,它调用我的ActiveX中的方法并获取返回的字符串值.DLL旨在被称为客户端.

我的测试网页如下:

<html>
<head>
    <title>SaveClipboardImage.CAB</title>
    <object id="Class1" classid="CLSID:" codebase="SaveClipboardImage.CAB#version=1,0,0,0"></object>
    <script type="text/javascript">
            function displaymessage()
            {
                try
                {
                var filename;

                filename = Class1.SaveClipboardToImage();

                alert(filename);
                }
                catch(e)
                {
                    alert(e.message);
                }               
            }
    </script>
</head>
<body>      
    <input type="BUTTON" onclick="displaymessage()" value="preview" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我显然做错了什么,但我不知道是什么.我是否必须在VB6项目中为类做一些特殊的事情,以便我可以访问该方法?我是否错误地调用了DLL?

谢谢你的帮助.

javascript vb6 dll vbscript activex

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

我可以从VBScript初始化用JScript编写的对象吗?

我正在尝试编写WSH登录脚本.整个公司的管理员需要能够自定义脚本的执行,并为特定位置和用户执行其他脚本.为了使他们的工作更轻松,我想提供一个管理员可以在他们的脚本中访问的API.如果我使用JScript编写API,是否可以初始化我通过VBScript定义的对象?例如,请考虑以下代码:

<!-- The WSF logon script file -->
<package>
    <job>
        <script language="JScript">
            // A demonstration function
            function OverNineThousand() {
                return 9001;
            }

            // A demonstration "class"
            function WorkstationClass() {
                var os = "Windows XP";

                this.getOperatingSystem = function() {
                    return os;
                }
            }
        </script>

        <script language="VBScript">
            Dim bigNumber, workstation

            '// This assignment works properly.
            bigNumber = OverNineThousand() 

            '// This assignment causes an error. Am I doing it wrong?
            Set workstation = New WorkstationClass()

            '// Execution never gets this far
            WScript.Echo workstation.getOperatingSystem() …
Run Code Online (Sandbox Code Playgroud)

javascript vbscript wsh

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

Java 6中的VB支持?

我正在维基百科检查Java语言历史,这一段引起了我的注意:

当前版本,Java SE 6(2006年12月11日) - Codename Mustang - 与数据库管理器捆绑在一起,便于使用脚本语言(目前使用Mozilla的Rhino引擎的JavaScript)和JVM,并支持Visual Basic语言

在这种情况下,"Visual Basic语言支持"究竟是什么?

谢谢,

dariopy.

java vb6 vbscript wikipedia jdk1.6

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

未命名的默认属性

在VBScript中,一些内置对象使用未命名的属性.一些例子:

Set Dict = Server.CreateObject("Scripting.Dictionary")
Set RS = GetEmloyeesRecordSet()

Dict("Beer") = "Tasty"  ' Same as Dict.Item("Beer") = "Tasty"
Dict("Crude Oil") = "Gross" ' Same as Dict.Item("Crude Oil") = "Gross"

Response.Write "The First Employee Is: " & RS("Name") ' Same as RS.Fields("Name")
Run Code Online (Sandbox Code Playgroud)

如何在我自己的类中使用相同的语法?

UPDATE

这是一个如何执行此操作的独立示例,它是Scripting.Dictionary的简单包装器.注意使用"Let"来允许d("key")="value"语法.当然,Thom会提供答案.

<%
Class DictWrapper
    Private Dict

    Private Sub Class_Initialize()
        Set Dict = Server.CreateObject("Scripting.Dictionary")
    End Sub 

    Private Sub Class_Terminate()
        Set Dict = Nothing
    End Sub 

    Public Property Get Count
        Count = Dict.Count
    End Property

    Public Default Property Get …
Run Code Online (Sandbox Code Playgroud)

vbscript class

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

VBScript将重点放在IE中的一个窗口上

我正在更新一段旧代码,它使用VBScript在IE中拉出一个窗口.出于某种原因,它喜欢在IE背后开放.谷歌给了我以下几行在VBScript中设置窗口焦点:

set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.AppActivate("calculator")
Run Code Online (Sandbox Code Playgroud)

但是,当我在IE中运行它时,我收到错误"Object required:'WScript'."

有没有办法在IE中,或其他方式来做到这一点?我已经打开并操作Word文档没有任何问题.

编辑:为了澄清,我在浏览器(IE)中的<script type ="text/vbscript">标签中运行它,并且在我甚至调用AppActivate之前,代码在第一行崩溃.

更新:我的安全设置非常低; 所有ActiveX设置都处于启用状态(这是一个Intranet服务).我测试了这个问题的代码,计算器没有问题.事实上,我让AppActivate使用JavaScript,但它不能与VBScript一起使用.

使用JavaScript:

<script type="text/javascript">
    function calcToFrontJ(){
        wshShell = new ActiveXObject("WScript.Shell");
        wshShell.AppActivate("Calculator");
    }
</script>
Run Code Online (Sandbox Code Playgroud)

不工作VBScript:

<script type="text/vbscript">
    Public Function calcToFrontV()
        'Set WScript = CreateObject("WScript.Shell") 'breaks with or without this line
        Set WshShell = WScript.CreateObject("WScript.Shell")
        WshShell.AppActivate("Calculator")
    End Function
</script>
Run Code Online (Sandbox Code Playgroud)

我想我总是可以重构JavaScript,但我真的很想知道这个VBScript发生了什么.

最终答案:

<script type="text/vbscript">
    Public Function calcToFrontV()
        'must not use WScript when running within IE 
        Set WshShell = CreateObject("WScript.Shell")
        WshShell.AppActivate("Calculator")
    End Function
</script>
Run Code Online (Sandbox Code Playgroud)

vbscript internet-explorer wsh setfocus

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

检查xml节点是否不存在并执行某些操作而不是失败

给出以下XML.

<?xml version="1.0" encoding="UTF-8"?>
<xmldata>
   <Products>
       <ProductCode>M406789</ProductCode>
       <ProductID>858</ProductID>
       <ProductName>M406789 Ignition Box</ProductName>
       <ProductDescriptionShort>&lt;img alt="" src="/v/vspfiles/assets/images/alliance_small.jpg" align="right" /&gt;Ignition Box</ProductDescriptionShort>
       <ListPrice>134.2200</ListPrice>
       <ProductPrice>80.5300</ProductPrice>
       <SalePrice>59.9500</SalePrice>
   </Products>
</xmldata>
Run Code Online (Sandbox Code Playgroud)

这是脚本的相关部分.

Set xNewDoc = xData.responseXML 'ResponseXml returns DOMDocument object

Set ProductCode = xNewDoc.SelectSingleNode("//ProductCode")
Set ListPrice = xNewDoc.SelectSingleNode("//ListPrice")

x=Len(ListPrice.Text)
newlp = Left(ListPrice.Text,x-2)

Set ProductPrice = xNewDoc.SelectSingleNode("//ProductPrice")
x=Len(ProductPrice.Text)
newpp = Left(ProductPrice.Text,x-2)

Set SalePrice = xNewDoc.SelectSingleNode("//SalePrice")
x=Len(SalePrice.Text)
newsp = Left(SalePrice.Text,x-2)

Set ProductName = xNewDoc.SelectSingleNode("//ProductName")
Run Code Online (Sandbox Code Playgroud)

如果缺少上面加载的xml和节点(假设为"SalePrice"),则脚本将失败.如何测试以查看节点是否存在以使其不会失败.我过去在Stack上看过这个东西,但似乎无法找到它.

xml vbscript

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

仅将可见单元格从Excel保存为CSV

精简版:

如何只保存xls的可见单元格作为csv?

更长版本:

我有一个大的.xls文件,其中包含一些分布在许多工作表上的数据,我希望这些数据可用于一些旧的UNIX perl脚本.我有一些代码会监视文件进行修改,重新生成csv文件并将它们FTP到我需要的地方.问题是维护电子表格的人不想删除旧数据,他们只是将其隐藏在视图中以供后者参考.我保存到csv的方法(正如你在大多数用例中所预期的那样)最终得到所有隐藏数据并且可以并排显示,无法知道最初隐藏的是什么.我已经在网上和这里进行了一些搜索,并且无法找到以编程方式执行此操作的任何方式(我能够遵循).下面是我正在使用的一些代码.如果它可以作为答案的起点,那么我会更容易理解.

在此先感谢,你们总是非常乐于助人.


下面是我发现的一些VBScript,它完成了工作但包含了所有数据(不仅仅是可见数据).

Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open("S:\NetowrkFolder\SpreadSheet.xls")
Dim oSheet

If oBook.Sheets.count = 1 Then
  oBook.SaveAs "D:\output.csv", 6
else
  i=1
  aname=split("D:\output.csv",".",-1,1)
  For Each oSheet In oBook.WorkSheets
    fname = aname(0) & "_sheet" & Cstr(i)
    oSheet.SaveAs fname, 6
    i=i+1
  Next
End If

oBook.Close True
oExcel.Quit
WScript.Quit
Run Code Online (Sandbox Code Playgroud)

我实际上在AutoIt下面做的这个项目是我用来完成同样事情的AutoIt代码.不幸的是,它仍然包含所有隐藏的数据.

Local $oExcel = ObjCreate("Excel.Application")
Local $oBook = $oExcel.Workbooks.Open("Y:\NetworkLocation\File.xls")
Local $oWorkSheets = $oBook.WorkSheets
Local $i = 1
For $oSheet In $oWorkSheets …
Run Code Online (Sandbox Code Playgroud)

vbscript excel autoit

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

检测浏览器是否支持vbscript?

我希望我可以使用现代化工具(或类似工具)来确定浏览器是否能够运行vbscript。看起来好像不行。

IE11最近修改了用户代理,删除了MSIE并替换为“ Trident”。这样做是为了使IE看起来更像其他符合html规范的浏览器。

我有许多旧网站,要求浏览器支持vbscript。我正在寻找一种确定如何确定浏览器是否支持vbscript的方法。这些站点中的许多站点都使用经典的asp,这使其变得更加困难。

有想法吗?ty现在,我正在考虑使用JavaScript评估用户代理,如果它包含msie,那么我们可以假定它确实支持vbscript。

javascript vbscript internet-explorer

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

如何在调用SendKeys时确保我的应用程序保持焦点?(有没有比使用睡眠更好的方法?)

我正在更新一些脚本,这些脚本需要将焦点切换到一个应用程序,发送一些击键,然后再将焦点返回到另一个应用程序。

Option Explicit

dim objShell 
set objShell = WScript.CreateObject("WScript.Shell") 

objShell.AppActivate "AnApplication"
WScript.Sleep 1000 

objShell.SendKeys("%{I}")
...
objShell.SendKeys("{END}") 

WScript.Sleep 1000
objShell.AppActivate "AnotherApplication"

Set objShell = Nothing
Run Code Online (Sandbox Code Playgroud)

我研究了对这些脚本的一些改进,而我希望做的一件事就是删除Sleep语句以加快脚本的执行速度。在研究此问题时,我发现建议您AppActivate在继续之前检查返回值,以有效地使脚本等到应用程序获得焦点并可以发送击键之前。

我尝试更新脚本来执行此操作-

Option Explicit

dim objShell 
set objShell = WScript.CreateObject("WScript.Shell")

While Not objShell.AppActivate "AnApplication" 
    Sleep 300
Wend 

objShell.SendKeys("%{I}")
...
objShell.SendKeys("{END}")

While Not objShell.AppActivate "AnotherApplication"
    Sleep 300
Wend 
Run Code Online (Sandbox Code Playgroud)

但是,击键似乎仅在将焦点返回给AnotherApplication之后发送。

有没有一种方法可以确保在发送按键时AnApplication能够获得焦点,而无需使用Sleep?

vbscript

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

如何编写一个函数来组合文件夹路径和文件名?

我想将文本文件的完整路径传递给其中一个函数.我使用以下命令将我的脚本和文本文件放在同一位置,我找到了我的脚本所在的文件夹路径

p = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
Run Code Online (Sandbox Code Playgroud)

p 来了 C:\test

我的文件名是 xyz.txt

我想将参数传递给函数as C:\test\xyz.txt

我该如何组合路径和文件名

我尝试下面的代码

path =  p & "xyz.txt"
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我如何加入路径和文件名.

vbscript

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

标签 统计

vbscript ×10

javascript ×3

internet-explorer ×2

vb6 ×2

wsh ×2

activex ×1

autoit ×1

class ×1

dll ×1

excel ×1

java ×1

jdk1.6 ×1

setfocus ×1

wikipedia ×1

xml ×1