全体表示

[ リスト ]

窓化した完全版をクリック一発で起動したい。
いろいろやり方を考えたのですが結局
  1. 窓化アプリを起動する
  2. アプリにメッセージ(キー入力)を送って起動
で実現することにした。使用言語は WSH + javascript
DXWndで、1番目にYs I、2番目に Ys II を登録します(キーボードで操作する関係上、スクリプトはこの順にしか対応できません)

イメージ 1

エディタなどで次の内容を保存し、"ys1_win.js"などとして拡張子を .js にして保存します。
13行目 dxwnd_exe で設定している exe のパスは、実際に dxwnd.exe を置いているところに合わせてください。
/*
 * DXWnd を起動して登録してある ys1 を起動する
 */
var sh = WScript.CreateObject("WScript.Shell");

var wmi = GetObject("WinMgmts:Root\\Cimv2");
var fso = WScript.CreateObject("Scripting.FileSystemObject");
var proc = wmi.ExecQuery("Select * From Win32_Process");
var iproc = new Enumerator(proc);

var dxwnd_wnd = "DXWnd";
//var dxwnd_exe = "D:\\App\\DxWndv2\\dxwnd.exe /C:dxwnd.ini";
var dxwnd_exe = "D:\\App\\DxWndv2\\dxwnd.exe";
var proc_name = "dxwnd.exe";

function search_proc() {
    for (; !iproc.atEnd(); iproc.moveNext()) {
    var item = iproc.item();
    if ((item.ExecutablePath != null && fso.GetFileName(item.ExecutablePath).toLowerCase() == proc_name) || (item.Name != null && item.Name.toLowerCase() == proc_name)) {
        return item.ProcessId;
    }
    }

    return 0;
}
   
/* DXWnd を起動 */
function active_dxwnd() {
    var proc_id = search_proc();

    if (proc_id == 0) { // 見つからない
    sh.CurrentDirectory = fso.GetParentFolderName(dxwnd_exe);

    var proc = sh.Exec(dxwnd_exe);
    proc_id = proc.ProcessID;
    }
    wait_count = 0;
    while (sh.AppActivate(proc_id) == 0) { // 起動待ち
    WScript.Sleep(1000);
    wait_count++;
    if (wait_count > 10) {    // 10秒待った
        // 実行ファイルのパスが違う場合は Runtime Error
        WScript.Echo("DXWnd を見つけることができませんでした - 終了します");
        WScript.Quit();
    }
    }
}


active_dxwnd();
sh.SendKeys("{DOWN}");
WScript.Sleep(100);
sh.SendKeys("{UP}");
sh.SendKeys("{UP}");
sh.SendKeys("{UP}");
sh.SendKeys("{UP}");
sh.SendKeys("{UP}");    // YS I
WScript.Sleep(100);
sh.SendKeys("%ER");    // Edit→Run


保存した ys1_win.js をダブルクリックすると DXWnd が起動され、そこからショートカットで一番上に設定している Ys I が起動されるはず。

上から2番めに設定している Ys II を起動するには、スクリプトの後半部分を次のようにします。
active_dxwnd();
WScript.Sleep(100);
sh.SendKeys("{DOWN}");
WScript.Sleep(100);
sh.SendKeys("{UP}");
sh.SendKeys("{UP}");
sh.SendKeys("{UP}");
sh.SendKeys("{UP}");
sh.SendKeys("{UP}");
WScript.Sleep(100);
sh.SendKeys("{DOWN}");    // YS II
WScript.Sleep(100);
sh.SendKeys("%ER");    // Edit→Run



.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事