diff --git a/commons/data/languages.ts b/commons/data/languages.ts index 5a42862..b2bc17e 100644 --- a/commons/data/languages.ts +++ b/commons/data/languages.ts @@ -90,6 +90,7 @@ let simplifiedChinese = { deleteClassificationPrompt: "是否删除当前分类?", deleteIcon: "删除图标", deleteItemPrompt: "是否删除当前项目?", + deleteHistory: "删除历史记录", description: "描述", display: "显示", displayMainWindow: "显示主界面", @@ -397,6 +398,7 @@ let traditionalChinese = { deleteClassificationPrompt: "是否刪除當前分類?", deleteIcon: "刪除圖標", deleteItemPrompt: "是否刪除當前項目?", + deleteHistory: "刪除歷史記錄", description: "描述", display: "顯示", displayMainWindow: "顯示主界面", @@ -710,6 +712,7 @@ let english = { deleteClassificationPrompt: "Delete current classification?", deleteIcon: "Delete Icon", deleteItemPrompt: "Delete current item?", + deleteHistory: "Delete History", description: "Description", display: "Display", displayMainWindow: "Display Main Interface", diff --git a/electron/main/item/index.ts b/electron/main/item/index.ts index f02f441..d9a3759 100644 --- a/electron/main/item/index.ts +++ b/electron/main/item/index.ts @@ -664,6 +664,35 @@ function clearOpenInfo(item: Item) { item.data.quickSearchLastOpen = 0; } +/** + * 删除历史记录 + * @param itemId + */ +function deleteQuickSearchHistory(itemId: number) { + // 查询 + let item = selectById(itemId); + if (item) { + // 重置历史记录 + item.data.quickSearchLastOpen = 0; + item.data.quickSearchOpenNumber = 0; + // 更新 + updateData(itemId, item.data); + // 通知主页面 + sendToWebContent("mainWindow", "onUpdateOpenInfo", { + id: itemId, + quickSearchOpenNumber: item.data.quickSearchOpenNumber, + quickSearchLastOpen: item.data.quickSearchLastOpen, + type: "quickSearch", + }); + // 通知快速搜索页面 + sendToWebContent("quickSearchWindow", "onUpdateOpenInfo", { + id: itemId, + quickSearchOpenNumber: item.data.quickSearchOpenNumber, + quickSearchLastOpen: item.data.quickSearchLastOpen, + }); + } +} + export { createAddEditWindow, createNetworkIconWindow, @@ -681,4 +710,5 @@ export { getClipboardImageFile, pasteIcon, checkInvalid, + deleteQuickSearchHistory, }; diff --git a/electron/main/item/ipcEvent.ts b/electron/main/item/ipcEvent.ts index f7119b4..1c5f74b 100644 --- a/electron/main/item/ipcEvent.ts +++ b/electron/main/item/ipcEvent.ts @@ -5,6 +5,7 @@ import { ipcMain, clipboard, MenuItemConstructorOptions, + screen, } from "electron"; import { getAbsolutePath } from "../../commons/utils"; import { @@ -22,6 +23,7 @@ import { getClipboardImageFile, pasteIcon, updateOpenInfo, + deleteQuickSearchHistory, } from "."; import { getAppxItemList, @@ -171,6 +173,8 @@ export default function () { if (!classification) { return; } + // 鼠标位置 + let point = global.addon.getCursorPoint(); // 菜单 let menuList: Array = []; // 组装菜单 @@ -184,7 +188,10 @@ export default function () { } // "打开"菜单 let openMenu = false; - if (item.type === 0 && ext && (ext === "exe" || ext === "bat")) { + if ( + (item.type === 0 && ext && (ext === "exe" || ext === "bat")) || + item.type === 4 + ) { menuList.push( new MenuItem({ label: global.language.runAsAdministrator, @@ -233,10 +240,12 @@ export default function () { label: global.language.explorerMenu, click: () => { // 获取当前窗口所在屏幕 - let screen = getWindowInScreen(); + let display = getWindowInScreen( + type === "main" ? global.mainWindow : global.quickSearchWindow + ); let scaleFactor = 1; - if (screen && screen.length > 0) { - scaleFactor = screen[0].scaleFactor; + if (display && display.length > 0) { + scaleFactor = display[0].scaleFactor; } // 弹出资源管理器菜单 sendToWebContent( @@ -251,12 +260,17 @@ export default function () { global.addon.disableMouseHook(); // 弹出资源管理器菜单 global.addon.explorerContextMenu( - global.mainWindow.getNativeWindowHandle().readInt32LE(0), + (type === "main" + ? global.mainWindow + : global.quickSearchWindow + ) + .getNativeWindowHandle() + .readInt32LE(0), item.type === 0 || item.type === 1 ? getAbsolutePath(item.data.target) : item.data.target, - args.x * scaleFactor, - args.y * scaleFactor + point[0], + point[1] ); // 开启鼠标HOOK global.addon.enableMouseHook(); @@ -310,7 +324,7 @@ export default function () { ); pathMenu = true; } - if (item.type === 0 || item.type === 1 || item.type === 2) { + if (item.type === 0 || item.type === 1) { menuList.push( new MenuItem({ label: global.language.createShortcut, @@ -677,4 +691,8 @@ export default function () { ipcMain.on("updateItemOpenInfo", (event, args) => { updateOpenInfo(args.type, args.id); }); + // 删除历史记录 + ipcMain.on("deleteQuickSearchHistory", (event, args) => { + deleteQuickSearchHistory(args); + }); } diff --git a/electron/main/setting/index.ts b/electron/main/setting/index.ts index 0abc49a..2f51153 100644 --- a/electron/main/setting/index.ts +++ b/electron/main/setting/index.ts @@ -101,7 +101,7 @@ function setShortcutKey(setting: Setting = global.setting) { classification.shortcutKey.replace("Win", "Super"), () => { // 分类 - showMainWindowBefore(true, classification.id); + showMainWindowBefore(true, false, classification.id); } ); } catch (e) { diff --git a/electron/preload/index.ts b/electron/preload/index.ts index 57c757a..dafaa34 100644 --- a/electron/preload/index.ts +++ b/electron/preload/index.ts @@ -682,6 +682,10 @@ contextBridge.exposeInMainWorld("item", { updateOpenInfo: (type: string, id: number) => { ipcRenderer.send("updateItemOpenInfo", { type, id }); }, + // 删除历史记录 + deleteQuickSearchHistory: (id: number) => { + ipcRenderer.send("deleteQuickSearchHistory", id); + }, }); contextBridge.exposeInMainWorld("setting", { diff --git a/rust/lib.rs b/rust/lib.rs index 434bb99..7c18160 100644 --- a/rust/lib.rs +++ b/rust/lib.rs @@ -183,3 +183,12 @@ fn remove_window_animation(window: i32) { fn get_appx_list() -> Vec> { windows::get_appx_list() } + +/** + * 获取当前鼠标位置 + */ +#[allow(dead_code)] +#[napi] +fn get_cursor_point() -> [i32; 2] { + windows::get_cursor_point() +} diff --git a/rust/windows.rs b/rust/windows.rs index 93e6f73..823908e 100644 --- a/rust/windows.rs +++ b/rust/windows.rs @@ -773,3 +773,14 @@ fn get_foreground_window_class_name() -> String { // 返回 u16_to_string(&buffer) } + +/** + * 获取当前鼠标位置 + */ +pub fn get_cursor_point() -> [i32; 2] { + let mut point = POINT::default(); + unsafe { + GetCursorPos(&mut point); + }; + [point.x, point.y] +} diff --git a/src/index.d.ts b/src/index.d.ts index 21ad588..b43ef85 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -144,6 +144,7 @@ declare global { onUpdateOpenInfo: (callback: Callback) => Function; onCheckInvalid: (callback: Callback) => Function; updateOpenInfo: (type: string, id: number) => void; + deleteQuickSearchHistory: (id: number) => void; }; setting: { createWindow: () => void; diff --git a/src/pages/search/QuickSearch.vue b/src/pages/search/QuickSearch.vue index 9387c1b..2faf5e9 100644 --- a/src/pages/search/QuickSearch.vue +++ b/src/pages/search/QuickSearch.vue @@ -80,6 +80,7 @@ getSearchItemClassificationName((item as Item).classificationId) }} +