我需要知道用户对 MsgBox 做了啥。非常基本的 VBScript

Posted

技术标签:

【中文标题】我需要知道用户对 MsgBox 做了啥。非常基本的 VBScript【英文标题】:I need to know what a user does with MsgBox. Very basic VBScript我需要知道用户对 MsgBox 做了什么。非常基本的 VBScript 【发布时间】:2014-10-14 19:01:56 【问题描述】:

我曾经有一个脚本(msgbox.vbs)是这样的:

Set objArgs = WScript.Arguments
messageTitle = objArgs(0)
messageText = objArgs(1)
MsgBox messageText, 1, messageTitle

我是编码新手,以前从未在 VBScript 中编码,但我需要更改此脚本,以便我可以从调用此脚本的 javascript 脚本中读取用户是否在对话框中单击“确定”或“取消”弹出 MsgBox 对话框时出现的框。 所以我尝试了这个:

Set objArgs = WScript.Arguments
messageTitle = objArgs(0)
messageText = objArgs(1)
retValue = MsgBox (messageText, 1, messageTitle)

if retValue == 1 Then
WScript.Quit 11
ElseIf retValue == 2 Then
WScript.Quit 22
Else
End If

我想我会尝试从我学到的 here 中获取 MsgBox 的返回值,然后编写一个 if then else 语句让它退出并返回一个错误代码,我可以从 JS 中的回调函数中读取该错误代码读取退出代码。

从第一个脚本开始,我得到一个错误代码 0,而且对话框非常漂亮。现在,使用我的新代码,我得到一个错误代码 1 并且对话框不再出现:(

我想念这个对话框,我需要它。我还需要知道用户点击了哪个按钮,这样我才能继续我的程序的其余部分。

提前感谢您的帮助,我真的很感激!

如果您好奇的话,这里是调用 .vbs 的 Javascript(只是找到的 NPM 的编辑版本here):

/*
 By Tomas Pollak <tomas@forkhq.com>.
 MIT License.
*/

var join = require('path').join,
    spawn = require('child_process').spawn;

var Dialog = module.exports = 

  info: function(str, title, callback)
    this.show('info', str, title, callback);
  ,

  warn: function(str, title, callback)
    this.show('warning', str, title, callback);
  ,

  show: function(type, str, title, callback)
    if (!str || str.trim() == '')
      throw('Empty or no string passed!');

    if (typeof title == 'function') 
      callback = title;
      title = null;
    

    var cmd = [],
        title = title ? title : 'Important';

    var str = (str+'').replace(/([.?*+^$[\]\\()<>|`-])/g, "\$1");

    cmd.push('cscript');
    cmd.push(join(__dirname, 'msgbox.vbs'));
    cmd.push(title) && cmd.push(str);

    this.run(cmd, callback);

  ,

  run: function(cmd, cb)
    var bin = cmd[0],
        args = cmd.splice(1),
        stdout = '', stderr = '';

    var child = spawn(bin, args);

    child.stdout.on('data', function(data)
      stdout += data.toString();
    )

    child.stderr.on('data', function(data)
      stderr += data.toString();
    )

    child.on('exit', function(code)
      cb && cb(code, stdout, stderr);
    )
  


【问题讨论】:

【参考方案1】:

VBScript中的eq运算符是=,不是==,所以改

if retValue == 1 Then

if retValue = 1 Then

(无处不在!)。

更新评论:

您应该使用MsgBox Constants;路过

vbOKCancel - 1 - 显示确定和取消按钮

而不是像 1 这样的幻数会避免误导其他人。

【讨论】:

以上是关于我需要知道用户对 MsgBox 做了啥。非常基本的 VBScript的主要内容,如果未能解决你的问题,请参考以下文章

当实体发生变化时,OpenJPA 对 db 模式做了啥?

C++ 在变量的内存地址上做了啥来“释放”它?

哈希在python中做了啥?

CircleCI 对非 0 退出代码做了啥?

来瞧瞧希尔排序都做了啥

Android Honeycomb 中的 Bitmap#recycle() 实际上做了啥?