npm start运行的是什么?----在工程项目下看到package.json的内容, scripts项有一个键值对:
, 也就是说, start后会运行
electron .
遇到一个ipc使用on来绑定监听就会报错的问题--------------ipc的获取方式不对,在使用electron的ipc应该是 var ipc = electron.ipcMain; 而不是 var ipc = electron.ipc;
根据导师的提醒,大概思路是:
在 https://wizardforcel.gitbooks.io/electron-doc/content/api/browser-window.html 下查找对应的API函数,返回窗口句柄,然后生成一个MFC项目,强制设置electron窗口为其子窗口
使用
console.log(window.getNativeWindowHandle());
可以打印出来,不过是一个buffer,如图所示:
从vs里面看到win32项目的HWND实际上是某个包含一个int类型的结构体的宏取的别名,那么应该是一个有符号整数。如图测试:
说明 win10是小端,所以buffer转int 我们该使用转成64位(或者转成64位再截取成32位的句柄),使用函数buf.readInt32LE-------------------http://www.runoob.com/nodejs/nodejs-buffer.html
通过测试可以成功的得到句柄值,那么接下里的问题,是如何通过ipc把这个值传给我们的MFC程序呢。
(还有一个问题,就是如何标识我们的MFC程序呢------------用bat启动2个程序,然后在这个bat里面传参吗???)
先解决第一个问题: electron如何通过ipc传递参数给另外一个进程注意windowsk开发中的字符串的转移字符,比如说
_T("D:\\software\\notepad\\Notepad++")
那么,通过类似的: HINSTANCE hins = ShellExecute(NULL, NULL, _T("D:\\software\\notepad\\Notepad++\\notepad++.exe"), NULL, NULL, SW_SHOWNORMAL); 方法就可以运行该程序并且得到该实例句柄
如何看electron安装路径
------------看npm的环境变量,因为在任意环境的命令行下直接输入electron可以运行示例程序,那么说明electron是可以通过环境变量找到的。
找到它的对应路径: C:\Users\admin\AppData\Roaming\npm\electron, 这里要意识到一点就是: 在命令下,其实我们输入一个命令,其实是对应的执行了一个可执行程序那么这个可执行程序我们是可以使用ShellExcute执行的(linux好像是excute)是的,没错————
HINSTANCE hins = ShellExecute(NULL, NULL, _T("C:\\Users\\admin\\AppData\\Roaming\\npm\\electron"),_T("C:\\Users\\admin\\Desktop\\electron_example"), NULL, SW_SHOWNORMAL);
就可以运行了。