ポップアップメニューを利用したスクリプト

2019-01-28

選択したファイルを別のフォルダにコピーするスクリプト。

  • コピー先はタブで開いているフォルダのいずれか
  • ポップアップメニューでコピー先を選択

動作の様子

タブで開いている C:\ C:\Apps D:\ D:\Games が、コピー先の選択肢としてポップアップしています。

Tablacus Explorer

スクリプト

// Copy2OpenedTabs.js
//
// Mode
//  0:Copy
//  1:Move (Copy+Delete)
//
// PopupPos
//  0:Item
//  1:Mouse Cursor

exec = function(Mode, PopupPos) {
    var FV = GetFolderView(Ctrl, pt);
    if (FV) {
        var Selected = FV.SelectedItems();
        if (Selected) {
            var distPath = OpenedTabsMenu(FV, PopupPos);
            if (distPath) {
                distPath = distPath + '\\';
                for (var i = 0; i < Selected.Count; i++) {
                    var 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) {
    var items = [];
    var items_ct = 0;

    // Item
    var TC = Ctrl.Parent;
    for (var 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
    var nVerb = PopupMenu(items, Ctrl, PopupPos);
    if (nVerb == 0) {
        return false;
    }
    var path = items[nVerb - 1];
    return path;
}

function PopupMenu(Items, Ctrl, PopupPos) {
    var hMenu = api.CreatePopupMenu();
    for (var i = 0; i < Items.length; i++) {
        var 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);
    }

    var pt = api.Memory("POINT");
    if (PopupPos == 1) {
        api.GetCursorPos(pt);
    } else {
        var rc = api.Memory("RECT");
        Ctrl.GetItemRect(Ctrl.FocusedItem || Ctrl.SelectedItem, rc);
        pt.x = rc.left;
        pt.y = rc.top;
        api.ClientToScreen(Ctrl.hwnd, pt);
    }

    var nVerb = api.TrackPopupMenuEx(hMenu, TPM_RETURNCMD, pt.x, pt.y, te.hwnd, null);
    api.DestroyMenu(hMenu);
    return nVerb;
}

登録

スクリプト名をCopy2OpenedTabs.jsとした場合の登録例。

Tablacus Explorer

exec(動作モード, ポップアップ表示位置)

動作モード
0:コピー
1:移動
ポップアップ表示位置
0:選択アイテム位置にポップアップ(キーアドオンに登録して使用する場合など)
1:マウスカーソル位置にポップアップ(コンテキストに登録して使用する場合など)
関連記事
#APPs
2019-04-18 AutoFileName Improved
2018-11-24 Alchemia
2018-09-09 行末に「You (just now) not committed yet」が表示されるようになった
2018-07-08 Cypher
2017-06-01 GitGutterを導入してGutterに編集マークを表示
2016-11-28 ColorHelperの新しいカラーピッカー
2016-11-26 「最新版の確認」のボタン化と最新バージョンの再インストール方法
2016-11-06 ColorHelperがバージョンアップして安定化
2016-10-30 Gutterにカラーアイコンを表示
2016-10-02 Theme - Cyanideのカレントタブ色を変更
#Coding
2016-04-04 クリップボード内のテキストを新規ファイルに保存するスクリプト(UTF-8版)
2016-03-31 highlight.jsで行番号を表示
2016-02-28 背景を透過してもギザギザしないローディングスピナー(spin.js版)
2016-02-25 背景を透過してもギザギザしないローディングスピナー(SVG版)
JavaScript
2016-04-04 クリップボード内のテキストを新規ファイルに保存するスクリプト(UTF-8版)
2016-03-31 highlight.jsで行番号を表示
2016-02-28 背景を透過してもギザギザしないローディングスピナー(spin.js版)
Tablacus Explorer
2016-11-26 「最新版の確認」のボタン化と最新バージョンの再インストール方法
2016-04-04 クリップボード内のテキストを新規ファイルに保存するスクリプト(UTF-8版)
    APPs
    #APPs
    Game
    Qonoha
    Sublime Text
    Tablacus Explorer
    OBLIVION
    #Oblivion
    Architectures and Locations
    Blockhead
    Body, Head and Hair
    Combat and Crime
    Console
    CS
    Dremora IceElf
    Enhanced Economy
    Equipment
    Fundament
    Immersion and Realism
    LAME
    Mage's Sky House
    Magic and Enchantments
    MajorJims UI
    Maskar's Oblivion Overhaul
    Mercantiles
    MODs List
    My Characters
    NPC
    Photo Album
    Pose and Animation
    Quests
    Recommended
    Skills and Leveling
    TES4Edit
    Troubles
    Undies Underneath
    User Interfaces
    Wrye Bash
    CODING
    #Coding
    HTML/CSS
    JavaScript