今回は、Win10/Win11 右クリックに「コマンド ウィンドウをここで開く」を追加 で紹介したツール「RightCMD」のソースコードを紹介します。
「RightCMD」は、Windows 10 または Windows 11 のデスクトップ、フォルダー、ドライブの右クリックメニューに「コマンド ウィンドウをここで開く」と「管理者としてコマンド ウィンドウをここで開く」を追加します。
「RightCMD」のソースコード
レジストリ値を変更する場合は十分に注意してください。
レジストリの操作を間違えるとシステムが起動できなくなるなど不具合が起きる可能性があります。
事前にシステムの復元などでバックアップを取り、自己責任で行うようお願いします。
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile_x64=RightCMD.exe
#AutoIt3Wrapper_Res_Description=右クリックに「コマンド ウィンドウをここで開く」を追加
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_ProductName=右クリックに「コマンド ウィンドウをここで開く」を追加
#AutoIt3Wrapper_Res_ProductVersion=1.0
#AutoIt3Wrapper_Res_CompanyName=©2023 wenbang https://windows-waza.com/
#AutoIt3Wrapper_Res_LegalCopyright=©2023 wenbang https://windows-waza.com/
#AutoIt3Wrapper_Res_LegalTradeMarks=RightCMD.exe
#AutoIt3Wrapper_Res_Language=1041
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include-once
_Singleton("右クリックに「コマンド ウィンドウをここで開く」を追加"); プログラムを 1つしか起動できないようにする
; 高 DPI に対応
DllCall("User32.dll", "bool", "SetProcessDpiAwarenessContext", "HWND", "DPI_AWARENESS_CONTEXT" - 2)
; コンボボックスに表示する文字
$text = "A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z"
$Form1 = GUICreate("右クリックに「コマンド ウィンドウをここで開く」を追加", 510, 125, -1, -1, -1, $WS_EX_TOPMOST)
$MenuItem1 = GUICtrlCreateMenu("ファイル")
$MenuItem5 = GUICtrlCreateMenuItem("終了", $MenuItem1)
$MenuItem2 = GUICtrlCreateMenu("ヘルプ")
$MenuItem3 = GUICtrlCreateMenuItem("WEBサイトへ", $MenuItem2)
$MenuItem4 = GUICtrlCreateMenuItem("バージョン", $MenuItem2)
$CheckBox1 = GUICtrlCreateCheckbox("コマンド ウィンドウをここで開くを追加", 24, 35, 310)
GUICtrlSetCursor(-1, 0)
; レジストリ値を読み取ります。
RegRead("HKEY_CLASSES_ROOT\Directory\Background\shell\cmd2", "")
; もしもレジストリ値の読み取りに成功したら、チェックボックスにチェックを入れます。
If @error = 0 Then GUICtrlSetState($CheckBox1, $GUI_CHECKED)
$CheckBox2 = GUICtrlCreateCheckbox("管理者としてコマンド ウィンドウをここで開くを追加", 24, 60, 310)
GUICtrlSetCursor(-1, 0)
$Readcmd = RegRead("HKEY_CLASSES_ROOT\Directory\shell\runas", "")
If @error = 0 Then GUICtrlSetState($CheckBox2, $GUI_CHECKED)
GUICtrlCreateGroup("右クリックメニュー", 15, 10, 330, 80)
$ComboBox1 = GUICtrlCreateCombo("", 380, 35, 110)
GUICtrlSetData(-1, $text)
GUICtrlCreateGroup("ショートカットキー", 370, 10, 130, 80)
$ComboBox2 = GUICtrlCreateCombo("", 380, 60, 110)
GUICtrlSetData(-1, $text)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $MenuItem5
Exit
Case $CheckBox1
If _IsChecked($CheckBox1) Then
_CMD()
Else
_DelCMD()
EndIf
Case $CheckBox2
If _IsChecked($CheckBox2) Then
_RunAsCMD()
Else
_DelRunAsCMD()
EndIf
Case $MenuItem3
ShellExecute("https://windows-waza.com/")
Case $MenuItem4
MsgBox(0, "バージョン", "1.0", 0, $Form1)
EndSwitch
WEnd
; チェックボックスのチェックの有無を確認
Func _IsChecked($iControlID)
Return BitAND(GUICtrlRead($iControlID), $GUI_CHECKED) = $GUI_CHECKED; チェックされていれば
EndFunc ;==>_IsChecked
; コマンド ウィンドウをここで開く
Func _CMD()
Local $HotKey = ""
If GUICtrlRead($ComboBox1) Then $HotKey = "(&" & GUICtrlRead($ComboBox1) & ")"
RegWrite("HKEY_CLASSES_ROOT\Directory\shell\cmd2")
RegWrite("HKEY_CLASSES_ROOT\Directory\shell\cmd2", "", "REG_SZ", "コマンド ウィンドウをここで開く" & $HotKey)
RegWrite("HKEY_CLASSES_ROOT\Directory\shell\cmd2", "Icon", "REG_SZ", "imageres.dll,-5323")
RegWrite("HKEY_CLASSES_ROOT\Directory\shell\cmd2", "NoWorkingDirectory", "REG_SZ", "")
RegWrite("HKEY_CLASSES_ROOT\Directory\shell\cmd2\command", "", "REG_SZ", "cmd.exe /s /k pushd ""%V""")
RegWrite("HKEY_CLASSES_ROOT\Directory\Background\shell\cmd2", "", "REG_SZ", "コマンド ウィンドウをここで開く" & $HotKey)
RegWrite("HKEY_CLASSES_ROOT\Directory\Background\shell\cmd2", "Icon", "REG_SZ", "imageres.dll,-5323")
RegWrite("HKEY_CLASSES_ROOT\Directory\Background\shell\cmd2", "NoWorkingDirectory", "REG_SZ", "")
RegWrite("HKEY_CLASSES_ROOT\Directory\Background\shell\cmd2\command", "", "REG_SZ", "cmd.exe /s /k pushd ""%V""")
RegWrite("HKEY_CLASSES_ROOT\Drive\shell\cmd2", "", "REG_SZ", "コマンド ウィンドウをここで開く" & $HotKey)
RegWrite("HKEY_CLASSES_ROOT\Drive\shell\cmd2", "Icon", "REG_SZ", "imageres.dll,-5323")
RegWrite("HKEY_CLASSES_ROOT\Drive\shell\cmd2", "NoWorkingDirectory", "REG_SZ", "")
RegWrite("HKEY_CLASSES_ROOT\Drive\shell\cmd2\command", "", "REG_SZ", "cmd.exe /s /k pushd ""%V""")
EndFunc ;==>_CMD
; 削除 コマンド ウィンドウをここで開く
Func _DelCMD()
RegDelete("HKEY_CLASSES_ROOT\Directory\shell\cmd2")
RegDelete("HKEY_CLASSES_ROOT\Directory\Background\shell\cmd2")
RegDelete("HKEY_CLASSES_ROOT\Drive\shell\cmd2")
EndFunc ;==>_DelCMD
; 管理者としてコマンド ウィンドウをここで開く
Func _RunAsCMD()
Local $HotKey = ""
If GUICtrlRead($ComboBox2) Then $HotKey = "(&" & GUICtrlRead($ComboBox2) & ")"
RegWrite("HKEY_CLASSES_ROOT\Directory\Shell\runas")
RegWrite("HKEY_CLASSES_ROOT\Directory\Shell\runas", "", "REG_SZ", "管理者としてコマンド ウィンドウをここで開く" & $HotKey)
RegWrite("HKEY_CLASSES_ROOT\Directory\Shell\runas", "Icon", "REG_SZ", "imageres.dll,-5324")
RegWrite("HKEY_CLASSES_ROOT\Directory\Shell\runas\command", "", "REG_SZ", "cmd.exe /s /k pushd ""%V""")
RegWrite("HKEY_CLASSES_ROOT\Directory\Background\shell\runas")
RegWrite("HKEY_CLASSES_ROOT\Directory\Background\shell\runas", "", "REG_SZ", "管理者としてコマンド ウィンドウをここで開く" & $HotKey)
RegWrite("HKEY_CLASSES_ROOT\Directory\Background\shell\runas", "Icon", "REG_SZ", "imageres.dll,-5324")
RegWrite("HKEY_CLASSES_ROOT\Directory\Background\shell\runas\command", "", "REG_SZ", "cmd.exe /s /k pushd ""%V""")
RegWrite("HKEY_CLASSES_ROOT\Drive\Shell\runas")
RegWrite("HKEY_CLASSES_ROOT\Drive\Shell\runas", "", "REG_SZ", "管理者としてコマンド ウィンドウをここで開く" & $HotKey)
RegWrite("HKEY_CLASSES_ROOT\Drive\Shell\runas", "Icon", "REG_SZ", "imageres.dll,-5324")
RegWrite("HKEY_CLASSES_ROOT\Drive\Shell\runas\command", "", "REG_SZ", "cmd.exe /s /k pushd ""%V""")
EndFunc ;==>_RunAsCMD
; 削除 管理者としてコマンド ウィンドウをここで開く
Func _DelRunAsCMD()
RegDelete("HKEY_CLASSES_ROOT\Directory\shell\runas")
RegDelete("HKEY_CLASSES_ROOT\Directory\Background\shell\runas")
RegDelete("HKEY_CLASSES_ROOT\Drive\shell\runas")
EndFunc ;==>_DelRunAsCMD
コメント