1 //アプリケーションを制御し、ネイティブなブラウザウィンドウを作成するモジュール
2 const { app, Menu, BrowserWindow, dialog, Notification, globalShortcut } = require('electron')
3 const path = require('path')
4 const fs = require('fs');
5 app.setName("CommentGenerator-Electron")
10 const isMac = (process.platform === 'darwin'); // 'darwin' === macOS
12 //------------------------------------
13 // About Panelの内容をカスタマイズする
14 //------------------------------------
15 const aboutPanel = function(){
16 dialog.showMessageBox({
17 title: `${app.name}について`,
18 message: `${app.name} ${app.getVersion()}`,
19 detail: `Created by Neko7sora\n© 2021 ${app.name}`,//特殊文字に注意
21 //icon: resolve(__dirname, 'asset/image/icon.png')
25 //------------------------------------
27 //------------------------------------
30 const template = Menu.buildFromTemplate([
34 {role:'about', label:`${app.name}について` },
36 {role:'services', label:'サービス'},
38 {role:'hide', label:`${app.name}を隠す`},
39 {role:'hideothers', label:'ほかを隠す'},
40 {role:'unhide', label:'すべて表示'},
42 {role:'quit', label:`${app.name}を終了`}
48 isMac ? {role:'close', label:'ウィンドウを閉じる'} : {C}
54 {role:'undo', label:'元に戻す'},
55 {role:'redo', label:'やり直す'},
57 {role:'cut', label:'切り取り'},
58 {role:'copy', label:'コピー'},
59 {role:'paste', label:'貼り付け'},
61 {role:'pasteAndMatchStyle', label:'ペーストしてスタイルを合わせる'},
62 {role:'delete', label:'削除'},
63 {role:'selectAll', label:'すべてを選択'},
68 {role:'startSpeaking', label:'読み上げを開始'},
69 {role:'stopSpeaking', label:'読み上げを停止'}
73 {role:'delete', label:'削除'},
75 {role:'selectAll', label:'すべてを選択'}
82 {role:'reload', label:'再読み込み'},
83 {role:'forceReload', label:'強制的に再読み込み'},
84 {role:'toggleDevTools', label:'開発者ツールを表示'},
86 {role:'resetZoom', label:'実際のサイズ'},
87 {role:'zoomIn', label:'拡大'},
88 {role:'zoomOut', label:'縮小'},
90 {role:'togglefullscreen', label:'フルスクリーン'}
96 {role:'minimize', label:'最小化'},
97 {role:'zoom', label:'ズーム'},
100 {role:'front', label:'ウィンドウを手前に表示'},
102 {role:'window', label:'ウィンドウ'}
104 {role:'close', label:'閉じる'}
111 {label:`${app.name} ヘルプ`}, // ToDo
114 {click: aboutPanel , label:`${app.name}について` }
121 //Menu.setApplicationMenu(template);
124 function createWindow() {
126 window = new BrowserWindow({
135 preload: path.join(__dirname, 'preload.js'),
136 enableRemoteModule: true,
137 nodeIntegration: false,
140 const menu = Menu.buildFromTemplate(exampleMenuTemplate());
141 Menu.setApplicationMenu(menu);
142 //アプリのindex.htmlを読み込みます。
143 window.loadFile('index.html')
146 function showNotification() {
148 const notification = {
149 title: 'Basic Notification',
150 body: 'Notification from the Main process'
152 new Notification(notification).show()
155 // このメソッドは、Electronが初期化を終え、ブラウザウィンドウを作成する準備ができたときに呼び出されます。
156 // 初期化が完了し、ブラウザウィンドウを作成する準備ができたときに呼び出されます。
157 // いくつかのAPIは、このイベントが発生した後にのみ使用できます。
158 app.whenReady().then(() => {/*
159 globalShortcut.register('CommandOrControl+Shift+I', () => {
160 console.log('Devtool Block')
163 createWindow()// <-- function createWindow のやつを動かす。
165 window.setProgressBar(0.555555555555,{mode:"paused"})
167 window.setProgressBar(0)
169 window.setProgressBar(0.2)
171 window.setProgressBar(0.25)
173 window.setProgressBar(0.3,{mode:"error"})
175 window.setProgressBar(0.9)
177 window.setProgressBar(0.99)
179 window.setProgressBar(1)
181 window.setProgressBar(-1)//win11では動作しない
183 window.setProgressBar(2)
194 // このリスナーは、アプリケーションが起動した後に動きます。
195 app.on('activate', () => {
197 // 表示されているウィンドウがないときにのみ動きます。(バックグラウンド処理など)
199 if (BrowserWindow.getAllWindows().length === 0) {
200 // 新しいブラウザウィンドウを作成します。
210 // 開いているウィンドウがなくなったときにのみ動きます。
211 // !このリスナーは、macOSではOSのウィンドウ管理の動作のため、使用できません。
212 // !macOSでは、ユーザーがCmd + Qで明示的に終了させるまで、アプリケーションとそのメニューバーがアクティブなままであることが一般的です。
213 // !(余談:Neko7soraは、macを持っていないため詳しく分かりません。以上....)
214 app.on('window-all-closed', () => {
215 if (process.platform !== 'darwin') {
222 require("./plugin/NavigatorOnLine/index.js")(app, BrowserWindow, path);
226 const exampleMenuTemplate = () => [
231 label: `${app.name}を完全終了する`,
232 click: () => app.quit()