發表文章

Chrome native messaging host with C# app in windows

圖片
由於工作需要使用到chrome擴充功能跟C#寫的app做資料傳輸,所以學了一下 以下開始來看,先看chrome extension的部分: chrome的manifest.json: { "name": "Native Messaging Windows", "version": "1.0", "manifest_version": 2, "description": "Communicate with a native application.", "icons": { "16": "icons/icon_windows.png", "48": "icons/icon_windows.png", "128": "icons/icon_windows.png" }, "app": { "launch": { "local_path": "main.html" } }, "permissions": [ "nativeMessaging" ] } main.html: <!DOCTYPE html> <html> <head> <script src='./main.js'></script> </head> <body> <button id='connect-button'>Connect</button> <input id='input-text' type='text' /> <button id='send...

Visual Sudio2019創建MFC ActiveX工程製作IE OCX插件

圖片
前言 最近因為工作需要,實現IE extension插件,現在將學到的內容細節記錄下來, 本次的學習內容如下幾個主題: VS2019創建MFC ActiveX工程製作IE OCX插件 VS2019中MFC ActiveX工程如何調試 註冊ocx插件 在IE中使用JS調用第三方DLL函數 ㄧ. VS2019創建MFC ActiveX專案 1.新建專案 2. 默認,直接點下一步 3.  由於不需要顯示AboutBox,取消打勾“有關於對話框”,點擊完成 4. 建好的專案,文件格式如下圖 二. 加入自己要加的方法 js可以調用的ocx函數,一般寫在CDemoAXCtrl類中,該類即爲控件類(一個ActiveX可以寫多個控件類,本文就使用默認生成的這個CDemoAXCtrl控件類) 本人在 DemoAXCtrl.cpp中 添加了兩個隸屬於 CDemoAxCtrl底下的 方法,代碼如下 // JS調用返回 歡迎 xx,hello world! BSTR CDemoAXCtrl::speakHelloWorld(LPCTSTR pname) { CString res(""); res.Format(_T("您好%s,hello world!"), pname); return res.AllocSysString(); } LONG CDemoAXCtrl::add(LONG a, LONG b) { return a + b; } 此時會有紅線,不用緊張, JS還不能調用,我們還需要在DemoAXCtrl.h & .cpp加入如下代碼 //DemoAXCtrl.h中,添加如下代碼 class CDemoAXCtrl : public COleControl { //此處爲默認生成的代碼 // 調度和事件 ID public: enum { dispidSpeakHelloWorld = 1L, dispidadd = 2L }; protected: // JS調用返回 歡迎 xx,hello world! BSTR speakHelloWorld(LPCTSTR...

electron打包:electron-packager及electron-builder兩種方式實現(for Windows)

前言 本文主要介紹如何通過electron-packager及electron-builder兩種方式,將已有的electron應用打包成msi格式和exe可執行檔案。打包是一個成熟的應用程式一個重要的環節,希望這篇文章可以給大家一些參考,最後會講到打包時遇到的一些坑,與大家分享。 electron-packager 使用命令 npm install electron-packager --save-dev 安裝好之後會在package.json中的devDependencies生成程式碼: "devDependencies": { "electron-packager": "^9.1.0" } 打包時要分清devDependencies與dependencies的區別,文章後會講。 package.json 的額外欄位 —— productName、author 和 description,雖然這幾個欄位並不是打包必備的,但它們會在 Windows 的 Squirrel 安裝包(用於自動更新)中使用到,所以請讀者根據實際情況新增。 安裝好模組之後,就可以對應用進行打包, 為了方便起見,在 package.json 中新增程式碼: { "scripts": { "start": "electron .", "build": "electron-packager . AlarmClock --out AlarmClock --overwrite --platform=win32 --arch=x64 --icon=clock.ico --prune=true --squirrel-install --ignore=node_modules/electron-* --electron-version=1.7.9 --ignore=AlarmClock-win32-x64 --version-string.CompanyName=Robby --version-string.ProductName=AlarmClock", }, } 引數說明: elec...

Electron - pcsclite.node was compiled against a different Node.js version

首先我使用 pcsclite  遇到以下問題 Error: The module '.../node_modules/@pokusew/pcsclite/build/Release/pcsclite.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 51. This version of Node.js requires NODE_MODULE_VERSION 53. Please try re-compiling or re-installing 把 Node version提升了,也沒作用 後來使用rebuild才成功 安裝模組並重新建置 Electron npm install --save-dev electron-rebuild # 每次執行完 "npm install" 後,記得再跑: ./node_modules/.bin/electron-rebuild # 如果你在 Windows 下碰到問題,可以試: .\node_modules\.bin\electron-rebuild.cmd

Electron - 跨平台的視窗應用程式

圖片
一、Electron介紹 Electron Logo Electron(原名為Atom Shell)是 GitHub 開發的一個 開源 框架 。 [5] 它允許使用 Node.js (作為後端)和 Chromium (作為前端)完成桌面 GUI 應用程式 的開發。Electron現已被多個開源 Web應用程式 用於前端與後端的開發,著名專案包括GitHub的 Atom 和 微軟 的 Visual Studio Code 。 由於開發環境就是基於 Node.js ,請務必安裝好。 很多知名的桌面應用程式都是使用 Electron 開發的例如: Github Desktop Discord WordPress.com Visual Studio Code Slack Atom 二、專案建立 以下實務操作將建立一個桌面鬧鐘通知應用程式,此範例從 此處 學習 首先我們建立專案資料夾,並初始化: mkdir electron-alarm-clock && cd electron-alarm-clock npm init -y 你可以直接手動新增資料夾,然後進入(可以不用這麼工程師的方式) 進入專案後使用終端機輸入 npm init -y 進行初始專案(-y 是將詢問的條件通通默認 yes) 安裝 electron: npm install --save--dev electron --save-dev 會將指定套件存於 package.json 的 devDependencies 因為 electron 只有開發階段才需要用到,因此只需要 --save--dev 在 package.json 修改程式進入點位置: 在 main 的部分,將 index.js 改為 main.js 。 在 script 的部分,新增 start 。 [ package.json ] { "name": "electron-alarm-clock", "version": "1.0.0", "description": "...

Converting Between Byte Arrays and Hexadecimal Strings in Java

1. Overview In the tutorial, we'll take a look at different ways to convert a byte array to a hexadecimal string, and vice versa. The record is introduced because the result of encryption and decryption will be a byte array, but my data must be passed through the HTTP protocol. 2. Converting Between Byte and Hexadecimal First of all, let's take a look at conversion logic between byte and hexadecimal numbers. 2.1 Byte to Hexadecimal The bytes are 8 bit signed integers in Java. Therefore, we need to convert each 4-bit segment to hex separately and concatenate them. Consequently, we'll get two hexadecimal characters after conversion. For instance, we can write 45 as 0010 1101 in binary, and the hexadecimal equivalent will be "2d": 0010 = 2 (base 10) = 2 (base 16) 1101 = 13 (base 10) = d (base 16) Therefore: 45 = 0010 1101 = 0x2d Let's implement the simple logic in Java: public String byteToHex(byte num) { char[] hexDigits = new char[2]...

Little Endian VS Big Endian

圖片
Endianness, 當一個資料要儲存到記憶體時 有兩種儲存方式, 如上圖其一為 Little Endian, 另一為 Big Endian 通常而言不需要考慮此排列方式的問題, 但是當要將資料傳遞到別的硬體平台上,或是網路上時 這問題就變得需要在意了, 在網路傳輸上使用的是 Big Endian, Kernel 中也有提供 htonl, htons, ntohs, ntohl 等 function 幫助將資料在 Big Endian 及 機器的 Endian 之間作轉換 ~ 目前也有平台是支援多種 Endianness 的 ex: ARM, PowerPC, MIPS … 透過硬體上的一個 Register 來設定要使用那種方式 當拿到一個新的硬體時,要如何得知此硬體目前使用的是哪一種 Endianness 呢? 1. 翻閱 Spec, 一般而言 CPU Spec 上都會標明是哪一種,不過在可以並存的硬體上 就需要別的方式來幫助判斷了。 2. 寫小程式來判別,在此提供兩種程式寫法   2-1 先宣告 integer 0x12345678   再使用一個 char pointer 檢查第一個 byte 存 0x12 or 0x78 #include int main() { int a = 0x12345678; char *ptr = (char *)&a; if (*ptr == 0x12) printf("Big Endian\n"); else printf("Little Endian\n"); return 0; } 2-2 使用 htonl 來幫忙   剛剛有提到 htonl 會將資料轉成 Big Endian,若轉換前後一致那就是 Big endian 啦 #include int main() { int a = 0x12345678; int b = htonl(a); if (b == a) printf("Big Endian\n"); el...