OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

用纯Node.JS弹出Windows系统消息提示框(MessageBox)


分享到
分类 JS学习   关键字 Node.JS   发布 kris  1494816044399
注意 转载须保留原文链接,译文链接,作者译者等信息。  

Node.JS是一个控制台程序,如果想要从Node.JS弹出Windows系统提示框的话,有很多方法可以实现。比如借助 electron 或 node-webkit:


在Electron中弹出消息框

Electron与Windows的接口非常完善,可以调用各种Window原生机制,如创建系统托盘图标。打开文件夹选择框等。这里使用dialog,即可弹出系统消息提示框:

const {
    app
  , BrowserWindow
  , Menu
  , Tray
  , shell
  , dialog
  , ipcMain
} = require('electron')

var parseCommand = function() {
  dialog.showMessageBox({
      title   : '错误'
    , type    : 'error'
    , message : '此文件没有跟 OnceDoc 绑定'
  })
}

var initApp = function() {
  parseCommand()
}

app.on('ready', initApp)

使用electron运行上面的代码:

electron app.js

调用VB脚本弹出消息框

Electron的确实比较方便,但是体积比较大,消息弹出比较慢。我们可以通过child_process调用VB脚本弹出消息框。

比如,我们新建一个 VB 脚本文件,命名为: vb.message.vbs,内容如下:

msgbox WScript.Arguments(1), vbInformation, WScript.Arguments(0)

此脚本会将第一个和第二个参数作为提示框的标题和内容弹出,在Node.JS调用即可:

var cp    = require('child_process')

var initApp = function() {
  var vbsPath = path.join(__dirname, 'vb.message.vbs')

  cp.exec('cscript.exe ' + vbsPath + ' "提示" "此文件没有跟 OnceDoc 绑定"', function(err, stdout, stderr) {
    if (err) {
      fs.writeFileSync('log.log', err.toString())
    }
  })
}

initApp()

使用ActiveXObject弹出消息框

VB脚本需要创建额外的文件,使用ActiveXObject则直接在Node.JS中编写脚本,比如:

var cp    = require('child_process')
var initApp = function() {
  cp.exec('mshta "javascript:var sh=new ActiveXObject("WScript.Shell"); sh.Popup("Message!", 10, "Title!", 64 );close()"')
}

initApp()

除了弹出提示框外,借助vb和activex脚本均可实现一些高级功能,如连接本数据库等。此外借助msg.exe系统进程间通信也可以实现消息提示框,不过某些系统可能没有安装msg.exe,并且此种方法不能自定义消息标题。

cp.exec('msg %username% "这是什么意思? 我不知道"')
社区评论 ( Beta版 )
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. JavaScript使用ES6的Class面向对象继承时 this is not defined 解决方法
  2. Docker改名Moby:急于商业化陷入品牌更名乱象
  3. Java已快过时?斯坦福大学将JavaScript作为计算机科学入门课
  4. TCP/UDP协议比较:在Node.JS中UDP服务器和客户端通信示例
  5. Node.JS通过原型和类继承EventEmitter,实现收发事件的几种方法
  6. 如何基于SVG矢量图制作一个可填写信息的可视化表单-OnceVI
  7. 周鸿祎:一些程序员没有商业意识,却又很自负,一看就知道不会创业
  8. Node.js网页抓取:一个最简单的http请求客户端示例(request client)
  9. 学哪种语言的最赚钱?调查显示JavaScript和SQL是程序员最常用的语言
  10. Node.JS更改Windows注册表regedit的几种方法
  11. AirJD-简单好用的免费建站工具

 相关阅读 - JS学习
  1. 利用Windows注册表将你的Node.JS程序添加到右健菜单直接运行
  2. JavaScript中splice与slice的区别、数组的复制以及在指定位置添加删除元素
  3. Node.JS中如何判断递归嵌套的所有回调函数已经执行完毕,以读取目录下所有文件为例:计数比Promise方式快将近一倍
  4. Node.js网页抓取:一个最简单的http请求客户端示例(request client)
  5. JavaScrip字符串模板表达式中的反引号怎么打?
  6. Node.JS用Socket实现FTP Server服务器和Client客户端
  7. Node.JS更改Windows注册表regedit的几种方法
  8. Debian下设置Linux Shell脚本开机自动启动Node.JS进程
  9. Node.JS通过原型和类继承EventEmitter,实现收发事件的几种方法
  10. 可视化Web报表OnceVI中用户输入表单验证与提交

 关键字 - Node.JS
  1. 沃尔玛为什么要采用Node.js
  2. node.js使用unzip解压zip包指定文件,提取 word/excel (docx/pptx/xlsx) 文本内容
  3. Node.JSv8的5个新特性:支持string padding与async/await和object参数省略
  4. Node.JS中如何判断递归嵌套的所有回调函数已经执行完毕,以读取目录下所有文件为例:计数比Promise方式快将近一倍
  5. node.js中fs.stat里的atime,mtime,ctime,birthtime在debian下的更新规则与区别
  6. NodeJS的DNS使用:域名解析,MX记录查询,SPF反垃圾邮件测试
  7. 在nodejs中使用Redis缓存和查询数据及Session持久化(Express)
  8. 是什么让Node.js比Java更快?为什么NodeJS这么快?
  9. 用纯Node.JS弹出Windows系统消息提示框(MessageBox)
  10. 利用Windows注册表将你的Node.JS程序添加到右健菜单直接运行

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号