.batファイルをシステムトレイでのみ実行するにはどうすればよいですか?
下部にTL; DR!
詳細はこちら:
有線でモデムに接続されているルーターにワイヤレスで接続されているWin10ラップトップで、2つの理由により、インターネット接続の信頼性が低下しています。
理由1、Win 10のせいではない何か:私のモデムはしばしばフリッツアウトし(モデム自体、ISP、または何であるかはIDKですが、ええ)、それによってちょっと再起動します。これが発生すると、私のラップトップのインターネットも(明らかに)消えますが、モデムが再びオンになっても再接続しません。これを行う唯一の方法は、[ネットワーク接続]ウィンドウからワイヤレスアダプタを無効にしてから有効にすることです。
理由2、isWin 10の障害:私のラップトップがWi-Fiネットワークからキックオフされることがあります。これ自体は、NICやルーターなどのWin10以外の原因が原因である可能性があります。私を悩ませているのは、Win10がネットワークに自動的に再接続するはずなのに再接続しない場合です。自分でWi-Fiメニューの「接続」ボタンをクリックすると正常に動作します。
いずれかのシナリオが発生したときに検出する* .batファイルを作成し、問題を修正することにしました。インターネットで少し調べて、次のスクリプトをまとめることができました。
@echo off
:LOOP
ping 8.8.8.8
IF ERRORLEVEL 1 goto RESTART
IF ERRORLEVEL 0 goto LOOP
:RESTART
netsh interface set interface "<wireless adapter>" disabled
netsh interface set interface "<wireless adapter>" enabled
netsh wlan connect name="<ssid>" interface="<wireless adapter>"
timeout /t 15
goto LOOP
これは(管理者として実行している場合)うまく機能しますが、問題は、cmdウィンドウをnot開いたまま(画面上およびタスクバー)プロセスの実行中。代わりにトレイで実行したいので、タスクマネージャーに移動しなくても、必要に応じて簡単に終了できます。タスクスケジューラでスクリプトをスケジュールして、起動時に最小化して開始できることはわかっていますが、タスクバーからウィンドウを非表示にするだけではありませんか?
TL; DR:
* .batファイルをトレイ内/時計で実行し、簡単に右クリックして停止/終了できるようにするにはどうすればよいですか?これを実現する唯一の方法は、実行可能ファイルをコンパイルすることですか?
これが単純な.bat
ファイルで実行できるとは思わないので、これは AutoHotKey の仕事のようです。
AutoHotkey(AHK)は、Windows用の無料のオープンソースマクロ作成および自動化ソフトウェアであり、ユーザーが反復的なタスクを自動化できるようにします。これは、当初はホットキーとも呼ばれるキーボードショートカットを提供することを目的としていたスクリプト言語によって駆動され、時間の経過とともに本格的なスクリプト言語に進化しました。
2014年のこのフォーラム投稿によると 次のようなスクリプトでウィンドウの表示を切り替えることができるはずです:
#NoTrayIcon
#Persistent
global hBatFile
/* Setup Tray icon and add item that will handle
* double click events
*/
Menu Tray, Icon
Menu Tray, Icon, C:\windows\system32\cmd.exe
Menu Tray, Add, Show / Hide Pingu, TrayClick
Menu Tray, Add, Close Pingu, CloseItem
Menu Tray, Default, Show / Hide Pingu
;// Run program or batch file hidden
DetectHiddenWindows On
Run pingu.bat,, Hide, PID
WinWait ahk_pid %PID%
hBatFile := WinExist()
DetectHiddenWindows Off
return
TrayClick:
OnTrayClick()
return
;// Show / hide program or batch file on double click
OnTrayClick() {
if DllCall("IsWindowVisible", "Ptr", hBatFile) {
WinHide ahk_id %hBatFile%
} else {
WinShow ahk_id %hBatFile%
WinActivate ahk_id %hBatFile%
}
}
CloseItem() {
DetectHiddenWindows On
WinWait ahk_class ConsoleWindowClass
Process, Close, cmd.exe
DetectHiddenWindows Off
ExitApp
}
このスクリプトは、AutoHotKey 1.1.24.00(2016年5月)でテストされました。
編集: ここに改善されたOP修正バージョンへのリンクがあります。
この場合には:
- pingu.batは、実行するバッチファイルの(任意の)名前です。
- hBatFileは、ウィンドウ情報を保持する任意の変数名です
- ピングーは、追加のAHKトレイメニュー項目に表示される任意の名前です
スクリプトをtray.ahk
のようなものとして保存し(.ahk
スクリプト拡張子に注意)、ダブルクリックして実行します(AutoHotKeyがインストールされている場合)。
スクリプトは、最小化されたバッチファイルを開始し、デフォルトのAHKスクリプトアイコンをトレイ内のミニチュアコンソールウィンドウアイコンに置き換えます。
コンソールウィンドウの表示は、トレイアイコンまたは追加されたトレイメニュー項目(選択メニューの下部に太字で表示されます)をダブルクリックすることで切り替えることができます。
バッチファイルとコマンドウィンドウの両方を閉じるには、Show / Hide
の下に追加されたClose
メニュー項目を使用します(Exit
はスクリプトのみを閉じ、コンソールウィンドウは閉じません)。
また、注意してください
Run pingu.bat,, Hide, PID
明らかにpingu.bat
を独自のバッチファイルの名前に置き換える必要があります。この行は、AHKスクリプトがpingu.bat
と同じディレクトリにあるか、pingu.bat
がグローバルにアクセス可能であることを前提としています(つまり、システムパスまたはユーザーPATH変数のフォルダーに追加されています)。それ以外の場合は、pingu.bat
を実行可能ファイルへのフルパスに置き換える必要があります(スペースに注意してください!)。
警告
このスクリプトは、主にウィンドウの可視性へのインターフェイスとして機能します。これが意味するのは、トレイアイコンを介してExit
した場合、バッチファイルではなくAHKスクリプトのみを終了するということです。
簡単な解決策は、追加されたClose
メニュー項目を使用して、スクリプトを終了し、cmd.exe
を停止することです。または、次のことができます。
コンソールウィンドウを表示して使用する Ctrl + C (または単に赤い「X」でコンソールウィンドウを閉じます)バッチプロセスを終了します。
トレイアイコンから
Exit
を選択して、AHKスクリプトを停止します
前述のように、これらは別々のプロセスです。
注:AHKスクリプトが最初にExit
で終了した場合、ウィンドウが非表示の孤立したコンソールプログラムに直接アクセスすることはできませんが、タスクマネージャーを使用して関連するcmd.exe
を閉じることができます。処理する。
cmd.exe
プロセスが1つしかない場合、記述されているClose
メニュー項目は正常に機能します。ただし、複数のcmd.exe
プロセスが実行されている場合、スクリプトで開始したバッチファイルが正しく閉じられない可能性があります(他の何かが閉じられる可能性があります)。代わりに、プロセスID(PID)による終了を検討することをお勧めします。そうは言っても、上記と同じ表示/閉じる/終了プロセスを使用することもできます。
スクリプトノート
Menu Tray, Icon, C:\windows\system32\cmd.exe
埋め込まれたアイコンファイルが関連付けられたコンパイル済み実行可能ファイルの場所を指します。これを、アイコンが埋め込まれた実行可能ファイルへの参照、または.ico
アイコンファイルへの直接参照に置き換えることができるはずです。
Menu Tray, Icon, C:\Path\To\Icons\icon.ico
オープンソースツールMoveMouseを使用できます。これにより、SysTrayで最小化された実行が可能になり、スケジュールまたはイベントベースの方法でバッチスクリプトを簡単に実行できます。
その本来の目的は、マウスポインターを少し動かして、非アクティブに基づくアプリケーション/またはシステムアクション(チャットプログラムでのステータスの入力やスクリーンセーバーの実行など)を防ぐことです。
セットアップ:
設定するには、アプリケーションを開き、「スクリプト」タブをクリックします。そこには、「各間隔でスクリプトを実行する」オプションがあります:Importボタンを使用して実行する(Power Shell)スクリプトをインポートし、Startボタンをクリックします。 。間隔時間は、[アクション]タブで秒単位で設定できます。
[スケジュール]タブを使用して、タイムスケジュールに基づいてスクリプトの実行を開始/停止するタイミングを設定することもできます。必要に応じて、[ブラックアウト]タブで開始時刻と停止時刻を入力してブロックすることにより、ブラックアウト期間を設定することもできます。その間のスクリプトの実行。
注:MoveMouseはPowerShellスクリプトのみをサポートしているため、バッチファイルを実行する必要がある場合は、説明されているように、start-process C:Pathfile.bat
またはstart-process "cmd.exe" "/c C:Pathfile.bat"
として呼び出すことができます- ここ