選択したファイルを別のフォルダにコピーするスクリプト。
タブで開いている C:\
C:\Apps
D:\
D:\Games
が、コピー先の選択肢としてポップアップしています。
// 選択したファイルをタブで開いているフォルダにコピーするスクリプト // // Mode // 0:Copy // 1:Move (Copy+Delete) // // PopupPos // 0:Item // 1:Mouse Cursor exec = function(Mode, PopupPos) { const FV = GetFolderView(Ctrl, pt); if (FV) { const Selected = FV.SelectedItems(); if (Selected) { const distPath = OpenedTabsMenu(FV, PopupPos); if (distPath) { for (let i = 0; i < Selected.Count; i++) { const path = fso.BuildPath(distPath, fso.GetFilename(Selected.Item(i).Path)); if (fso.FolderExists(Selected.Item(i).Path)) { if (fso.FolderExists(path)) { if (!confirmOk(path, "Overwrite?")) continue; } fso.CopyFolder(Selected.Item(i).Path, distPath + '\\'); if (Mode == 1) { fso.DeleteFolder(Selected.Item(i).Path); } } else { if (fso.FileExists(path)) { if (!confirmOk(path, "Overwrite?")) continue; } fso.CopyFile(Selected.Item(i).Path, distPath + '\\'); if (Mode == 1) { fso.DeleteFile(Selected.Item(i).Path); } } } FV.Refresh(); } } } } function OpenedTabsMenu(Ctrl, PopupPos) { let items = []; let items_ct = 0; // Item const TC = Ctrl.Parent; for (let i = 0; i < TC.length; i++) { if (fso.FolderExists(TC[i].FolderItem.Path) && TC[i].FolderItem.Path != Ctrl.FolderItem.Path) { items[items_ct++] = TC[i].FolderItem.Path; } } // Popup const nVerb = PopupMenu(items, Ctrl, PopupPos); if (nVerb == 0) { return false; } return items[nVerb - 1]; } function PopupMenu(Items, Ctrl, PopupPos) { const hMenu = api.CreatePopupMenu(); for (let i = 0; i < Items.length; i++) { const mii = api.Memory("MENUITEMINFO"); mii.cbSize = mii.Size; mii.fMask = MIIM_ID | MIIM_STRING | MIIM_BITMAP; mii.wId = i + 1; mii.dwTypeData = String(Items[i]); api.InsertMenuItem(hMenu, 0, false, mii); } const pt = api.Memory("POINT"); if (PopupPos == 1) { api.GetCursorPos(pt); } else { const rc = api.Memory("RECT"); Ctrl.GetItemRect(Ctrl.FocusedItem || Ctrl.SelectedItem, rc); pt.x = rc.left; pt.y = rc.top; api.ClientToScreen(Ctrl.hwnd, pt); } const nVerb = api.TrackPopupMenuEx(hMenu, TPM_RETURNCMD, pt.x, pt.y, te.hwnd, null); api.DestroyMenu(hMenu); return nVerb; }
スクリプト名を Copy2OpenedTabs.js
とした場合の登録例。
exec(動作モード, ポップアップ表示位置)