Browse Source

fix

tags/v1.0.0
3136352472 5 years ago
parent
commit
04d24dfb71
  1. 2
      .gitignore
  2. BIN
      CommandTrayHost/CommandTrayHost.exe
  3. 1
      CommandTrayHost/command_tray_host.cache
  4. 154
      CommandTrayHost/config.json
  5. 168
      main.js
  6. 92
      preload.js
  7. 1
      project-map.json
  8. 1
      task.json
  9. BIN
      windows-icon@2x.png

2
.gitignore

@ -0,0 +1,2 @@
task.json
username.json

BIN
CommandTrayHost/CommandTrayHost.exe

1
CommandTrayHost/command_tray_host.cache

@ -0,0 +1 @@
{"configs":[{"alpha":170,"bottom":708,"enabled":true,"left":384,"name":"cmd例子","right":1344,"start_show":true,"top":200,"valid":11},{"alpha":255,"bottom":0,"enabled":false,"left":0,"name":"cmd例子3","right":0,"start_show":false,"top":0,"valid":0}]}

154
CommandTrayHost/config.json

@ -0,0 +1,154 @@
{
/**
* 0. wiki.
* 1. "cmd".exe..bat, 使 cmd.exe /ccmd.exe /k.
* 2. C:\\Windowsjson
* 3. ..\..\icons\icon.ico
*
* cmdworking_directory
* CommandTrayHost.exe
* 4. cmdpath
* path: i) pathcmdpathcmd
* ii) i) CommandTrayHost.exe
* working_directory:
* i) working_directory>CommandTrayHost.exe
* ii) i) path
* 5. Unicode()UTF-8
* VS CodeSublime TextJSON with Comments
* 6. CommandTrayHost.exe.
*
* 7. "enable_cache": true command_tray_host.cache
*
* CommandTrayHost.execonfig.json
* config.json(
* )退
* 8. 使alt win shift ctrl
* 0-9 A-Z.0x26
* https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
*
*
* 9. crontab crontab使
* 0 0/10 * * * * 10
* 0 1,11,21 * * * 1 11 21
* 0 2/10 12-14 * * * 1214210
* 10Mrotaterotate500
*/
"configs": [
{
// 8
"name": "cmd例子", //
"path": "C:\\Windows\\System32", // cmdexe,,CommandTrayHost.exe
"cmd": "cmd.exe", // cmd.exe
"working_directory": "", // . >CommandTrayHost.exepath
"addition_env_path": "", // dll
"use_builtin_console": false, // CREATE_NEW_CONSOLE
"is_gui": false, // GUI
"enabled": true, // CommandTrayHost
//
// CommandTrayHostUIPI/
"require_admin": false, //
"start_show": false, // ()
"ignore_all": false, //
"position": [ //
0.2, // STARTUPINFO.dwX 10-1
200 // STARTUPINFO.dwY,
],
"size": [ //
0.5, // STARTUPINFO.dwXSize,
0.5 // STARTUPINFO.dwYSize,
],
"icon": "", //
"alpha": 170, // 0-255,0255
"topmost": false, //
// 7
"hotkey": { //
"disable_enable": "Shift+Win+D", // /
"hide_show": "Shift+Win+H", // /
"restart": "Shift+Win+R", //
"elevate": "Shift+Win+A", //
},
"not_host_by_commandtrayhost": false, // trueCommandTrayHost
"not_monitor_by_commandtrayhost": false, // trueCommandTrayHost退
"kill_timeout": 200, // ms200ms
"exclusion_id": 1, // id0id
"kill_process_tree": false, // nginx. true,kill_timeout
},
{
"name": "cmd例子3",
"path": "C:\\Windows\\System32",
"cmd": "cmd.exe",
"working_directory": "",
"addition_env_path": "",
"use_builtin_console": false,
"is_gui": false,
"enabled": false,
},
],
"global": true,
//
"require_admin": false, // CommandTrayHostUAC
"icon": "", // icoico
"icon_size": 256, // 256 32 16
"cmd_menu_max_length": 0, // cmdpath00...
"lang": "auto", // zh-CN en-US https://msdn.microsoft.com/en-us/library/cc233982.aspx
"groups": [ // groups()object()object40objectname
{
"name": "cmd例子分组1", //
"groups": [
0, // configs0
1,
],
},
{
"name": "cmd例子分组2",
"groups": [
2,
1,
],
},
2,
{
"name": "empty test", // groupsname
},
],
"enable_groups": true, //
"groups_menu_symbol": "+", //
"left_click": [
0,
1
], // / configs0.CommandTrayHost
"enable_cache": true, // cache
"conform_cache_expire": true, // CommandTrayHostcachefalse
"disable_cache_position": false, //
"disable_cache_size": false, //
"disable_cache_enabled": true, //
"disable_cache_show": false, //
"disable_cache_alpha": false, // (alphaconfigs)
// 7
"hotkey": { //
"disable_all": "Alt+Win+Shift+D",
"enable_all": "Alt Win + Shift +E", // +
"hide_all": "Alt+WIN+Shift+H", //
"show_all": "AlT Win Shift s", //
"restart_all": "ALT+Win+Shift+U",
"elevate": "Alt+wIn+Shift+a",
"exit": "Alt+Win+Shift+X", //
"left_click": "Alt+Win+Shift+L",
"right_click": "Alt+Win+Shift+R",
//
"add_alpha": "Alt+Ctrl+Win+0x26", // ()
"minus_alpha": "Alt+Ctrl+Win+0x28", // Alt+Ctrl+Win+
"topmost": "Alt+Ctrl+Win+T", //
"hide_current": "Alt+Ctrl+Win+H", //
"show_all_docked": "Alt+Ctrl+Win+S", //
},
"repeat_mod_hotkey": false, // ,Windows XP
"global_hotkey_alpha_step": 5, //
"show_hotkey_in_menu": true, //
"enable_hotkey": true,
"start_show_silent": true, // ()
"auto_hot_reloading_config": true, // true
"auto_update": true,
"skip_prerelease": true,
"keep_update_history": false, //
}

168
main.js

@ -1,12 +1,144 @@
// Modules to control application life and create native browser window
const {app, BrowserWindow} = require('electron')
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';
const { app, dialog, BrowserWindow, Menu, Tray, ipcMain } = require('electron')
const path = require('path')
const fs = require('fs');
var result = [{
label: "title",
sublabel: "title",
type: "submenu",
submenu: [
{
label: "切换到该任务分支",
},
]
}
];
let tray = null
function createMenu() {
const iconPath = path.join(__dirname, 'windows-icon.png')
tray = new Tray(iconPath)
tray.setToolTip('This is my application.')
var menu_data = "";
var project_map_data = "";
tray.on("right-click", function () {
// tray.popUpContextMenu(Menu.buildFromTemplate(result.concat({
// type: "separator"
// }, {
// label: "退出",
// click: function () {
// for (var i in BrowserWindow.getAllWindows()) {
// BrowserWindow.getAllWindows()[i].close()
// }
// app.quit()
// }
// })))
// return
console.log("right-click")
if (!fs.existsSync("task.json") || !fs.existsSync("project-map.json")) {
return
}
// if (!fs.existsSync("project-map.json")) fs.writeFileSync("project-map.json", JSON.stringify({}))
var project_map_str = fs.readFileSync("project-map.json");
var project_map = JSON.parse(fs.readFileSync("project-map.json"));
var data = fs.readFileSync("task.json") + "";
if (data != menu_data && menu_data != "") {
tray.displayBalloon({
title: "你有一个新任务",
content: "你有一个新任务,请及时查看"
})
}
project_map_data = project_map_str
menu_data = data
data = JSON.parse(data);
result = [];
for (var i in data) {
let submenu = [];
for (var k in data[i]) {
submenu.push({
label: data[i][k]["title"],
type: "submenu",
submenu: [
{
label: "切换到该任务分支",
click: (function () {
i, data[i][k]["title"]
return function () {
}
})()
},
]
});
}
let project_dir = project_map[i]
if (!project_dir) {
project_dir = ""
} else {
project_dir = `(${project_dir})`
}
let item = {
label: i,
type: "submenu",
submenu: submenu.concat([
{
type: "separator"
},
{
label: "关联项目路径" + project_dir,
click: (function (i) {
return function (menuItem, browserWindow, event) {
let project_map = JSON.parse(fs.readFileSync("project-map.json"));
let a = dialog.showOpenDialogSync({ properties: ['openDirectory'] })
if (a) {
project_map[i] = a[0]
fs.writeFileSync("project-map.json", JSON.stringify(project_map))
}
}
})(i)
},
])
}
result.push(item);
}
tray.popUpContextMenu(Menu.buildFromTemplate(result.concat({
type: "separator"
}, {
label: "退出",
click: function () {
for (var i in BrowserWindow.getAllWindows()) {
BrowserWindow.getAllWindows()[i].close()
}
app.quit()
}
})))
})
function createWindow () {
}
function createWindow() {
// Create the browser window.
const mainWindow = new BrowserWindow({
width: 800,
width: 300,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
@ -15,7 +147,23 @@ function createWindow () {
// and load the index.html of the app.
mainWindow.loadURL('http://oa.ouxuan.net/?d=we&m=login')
mainWindow.webContents.on('crashed', function () {
const options = {
type: 'info',
title: '渲染器进程崩溃',
message: '这个进程已经崩溃.',
buttons: ['重载', '关闭']
}
dialog.showMessageBox(options, function (index) {
if (index === 0) mainWindow.reload()
else mainWindow.close()
})
})
mainWindow.on('minimize', function (event) {
event.preventDefault();
mainWindow.hide();
});
// Open the DevTools.
// mainWindow.webContents.openDevTools()
}
@ -23,12 +171,20 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(createWindow)
app.whenReady().then(function () {
createWindow()
createMenu()
})
// Quit when all windows are closed.
app.on('window-all-closed', function () {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
for (var i in BrowserWindow.getAllWindows()) {
BrowserWindow.getAllWindows()[i].close()
}
if (process.platform !== 'darwin') app.quit()
})
@ -38,5 +194,7 @@ app.on('activate', function () {
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.

92
preload.js

@ -2,6 +2,10 @@
// It has the same sandbox as a Chrome extension.
const fs = require('fs');
const ipc = require('electron').ipcRenderer
function get(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
@ -9,28 +13,96 @@ function get(name) {
if (r != null) return (r[2]); return null;
}
function inits() {
function p(page, cb) {
$.get("http://oa.ouxuan.net/api.php?m=index&a=getyydata&adminid=2&cfrom=mweb&event=wwc&num=work&key=&loadci=1&page=" + page, function (data) {
var data = JSON.parse(data);
if (data.code == 200) {
if (page < data["data"]["maxpage"]) {
p(page + 1, function (rows) {
cb(data["data"]["rows"].concat(rows))
})
} else {
for (var i in data["data"]["rows"]) {
$.ajax({
url: "http://oa.ouxuan.net/task.php?a=x&num=work&show=we&mid=" + data["data"]["rows"][i]["id"],
async: false,
success: function (html) {
var last = ""
$(html).find("div").each(function (item) {
if (last == "所属项目") {
a = ($(this).text()).split("(")
a.pop()
a = a.join("(")
data["data"]["rows"][i]["project"] = a
console.log(a)
}
last = $(this).text()
})
}
});
}
cb(data["data"]["rows"])
}
}
})
}
var start = function () {
p(1, function (data) {
// alert( JSON.stringify(data));
result = {};
for (let i in data) {
if (!result[data[i]["project"]]) {
result[data[i]["project"]] = [];
}
result[data[i]["project"]].push(data[i])
}
fs.writeFileSync("task.json", JSON.stringify(result))
setTimeout(function () {
location.reload()
}, 1 * 1000);
})
}
start()
}
window.addEventListener('DOMContentLoaded', () => {
let m = get("m");
// inits()
if (PageJs[m]) {
PageJs[m]()
} else {
alert("未有指定动作:" + m);
// alert("未有指定动作:" + m);
}
})
PageJs = {
login() {
if (fs.existsSync("username.json")) {
let data = fs.readFileSync("username.json");
data = JSON.parse(data)
const adminuser = document.getElementById("adminuser")
adminuser.value = "郑荣升"
adminuser.value = data["username"];
const adminpass = document.getElementById("adminpass")
adminpass.value = "as19940108"
adminpass.value = data["password"];
loginsubmit(0)
},
index() {
const fs = require("fs")
$.get("http://oa.ouxuan.net/api.php?m=index&a=getyydata&adminid=2&cfrom=mweb&page=1&event=wwc&num=work&key=&loadci=1&t=123", function (data) {
fs.writeFileSync("task.json", data);
})
} else {
_loginsubmit = loginsubmit
loginsubmit = function () {
const adminuser = document.getElementById("adminuser")
const adminpass = document.getElementById("adminpass")
fs.writeFileSync("username.json", JSON.stringify({
username: adminuser.value,
password: adminpass.value,
}))
_loginsubmit(0)
}
}
}
}

1
project-map.json

@ -0,0 +1 @@
{"同济人脸识别签到系统授权库放到云上(离线版及在线版)":"C:\\Users\\admin\\Desktop\\临时项目\\tjrl","壁球馆智能系统":["C:\\Users\\admin\\go\\src\\git.ouxuan.net\\3136352472\\ouxuanac"]}

1
task.json

@ -1 +0,0 @@
{"code":200,"msg":"","data":{"wdtotal":0,"event":"wwc","num":"work","rows":[{"id":"133","uid":"10","title":"\u4fee\u6539\u540e\u7aef\u62a2\u5355\u6a21\u5f0f\u4e3a\u5206\u914d\u6a21\u5f0f","optdt":"2020-04-09 16:39:53","cont":"\u7c7b\u578b\uff1a\u5f00\u53d1\n\u7b49\u7ea7\uff1a\u4e2d\n\u5206\u914d\u7ed9\uff1a\u90d1\u8363\u5347\n\u521b\u5efa\u8005\uff1a\u5218\u5927\u94ed\n\u622a\u6b62\u65f6\u95f4\uff1a2020-04-16 16:39:00","modename":"\u4efb\u52a1","modenum":"work","statustext":"","statuscolor":"","face":"images\/noface.png"},{"id":"41","uid":"10","title":"\u6b27\u8f69\u667a\u80fd\u7f51\u5173\u4e2d\u95f4\u4ef6\u7814\u53d1","optdt":"2019-09-27 14:56:10","cont":"\u7c7b\u578b\uff1a\u5f00\u53d1\n\u7b49\u7ea7\uff1a\u9ad8\n\u5206\u914d\u7ed9\uff1a\u90d1\u8363\u5347\n\u521b\u5efa\u8005\uff1a\u5218\u5927\u94ed\n\u622a\u6b62\u65f6\u95f4\uff1a2019-10-30 14:55:00","modename":"\u4efb\u52a1","modenum":"work","statustext":"","statuscolor":"","face":"images\/noface.png"}],"page":1,"limit":10,"agentid":"12","count":2,"maxpage":1,"prevpage":0,"nextpage":2,"url":"","stotal":{"myrw":2}},"success":true}

BIN
windows-icon@2x.png

After

Width: 32  |  Height: 32  |  Size: 2.5 KiB

Loading…
Cancel
Save