node-ffi模块的安装以及基于electron生成windows桌面应用程序
|
原文地址: 点击打开链接 一、为什么需要使用DLL
二、node-ffi 是什么node-ffi:Node.js Foreign Function Interface
WARNING: 上面是 node-ffi 的介绍,英语不好,就不翻译了。 三、electron 使用 node-ffi使用上一篇文章里的项目,在 package.json的 dependencies节点上加上node-ffi 依赖: "dependencies": {
"electron": "^1.6.11","ffi": "2.2.0"
}
然后安装缺失的 npm包(参考之前的文章),注意,安装 ffi npm 包之前需要安装 python2.7,否则 ffi 会编译总是失败,导致安装不成功,具体安装参考:https://github.com/nodejs/node-gyp#installation。 安装完成后,在 app.js 文件第一行中添加如下代码: const ffi = require('ffi')
然后运行程序,出现如下错误: 参考资料:https://github.com/electron/electron/blob/master/docs-translations/zh-CN/tutorial/using-native-node-modules.md,原来是需要把 ffi 重新编译为适合 electron的模块。 打开 nodejs 命令行窗口,先执行如下命令: set python=python安装路径python.exe 设置 python 的路径,切换到项目目录,然后执行如下命令: "./node_modules/.bin/electron-rebuild" "./node_modules/ffi" 编译完成后,运行程序,漂亮的界面终于出现了。 四、使用 ffi 调用 Widows API 解决一个小缺陷上篇文章中的仿 QQ 登录界面还有一个小问题,就是鼠标右键点击窗口的任意地方,都会弹出系统菜单: 现在使用 ffi 调用 user32.dll 中的GetSystemMenu 函数来解决这个问题,首先新建一个 user32.js 文件,为了展示 ffi ,我多定义了几个API函数: const ffi = require('ffi')
exports.User32 = ffi.Library('user32',{
'GetWindowLongPtrW': ['int',['int','int']],'SetWindowLongPtrW': ['int','int','long']],'GetSystemMenu': ['int','bool']],'DestroyWindow': ['bool',['int']]
});
修改 app.js 文件,首先导入 user32.js: const user32 = require('./app/scripts/user32').User32
然后修改如下内容: win.once('ready-to-show',() => {
let hwnd = win.getNativeWindowHandle() //获取窗口句柄。
user32.GetSystemMenu(hwnd.readUInt32LE(0),true); 禁用系统菜单.
win.show()
})
再运行项目,系统菜单就消失的无影无踪了。 最后,所有代码都已经提交到了github:https://github.com/starts2000/ElectronQQLogin,欢迎获取。 (编辑:南阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- wpf – 使用WiX在应用程序的主要升级中从Windows 7任务栏中
- windows-8 – 如何向可以定位多个平台的商店提交应用程序?
- JNA调用Dll的问题
- windows-server-2008 – Windows Server 2008 R2打印服务器
- windows – 是否可以以编程方式找出通过网络锁定文件的进程
- .net – Windows Azure Web角色缓存(预览)“挂起”使模拟器
- Windows Server 2016-Win Ser 2016已删减内容
- 如何正确使用MSBuild社区任务库在.NET dll上设置SVN版本号
- 如何在WP7中从字符串中删除重音
- .net – 适用于Windows 7.0的蓝牙低功耗API
- windows-services – 首先是TopShelf,Ninject和E
- windows10下安装source insight 4.0
- 32位数据转8位数据和8位数据转32位数据
- 为什么有条件地包含direct.h或sys / stat.h基于_
- Windows Filtering Platform用户模式或内核模式?
- windows – 用户和内核之间的线程fs段寄存器切换
- NonSerialized 字段如果在dll 中读到数据写入Mon
- 飞溅屏幕 – 通用窗口10个应用程序的Splash屏幕
- Windows下wamp php单元测试工具PHPUnit安装及生成
- Windows Vista 64位的命令行subversion客户端
