ポップアップメニューを利用したスクリプトを作ってみました

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を使ってみました
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
    Body, Head and Hair
    Console
    Construction Set
    Equipment
    Immersion and Realism
    Locations and Player Homes
    Magic and Enchantments
    Mercantiles
    MODs List
    NPC
    Overhauls
    Photo
    Player Homes
    Pose and Animation
    Quests
    Recommended
    Skills and Leveling
    TES4Edit
    Troubles
    User Interfaces
    Wrye Bash
    CODING
    Coding
    HTML/CSS
    JavaScript