Advertisement
kazurai

[AHK Script] タイトルバーアクション [Hotkey系] ver.200225

Jun 16th, 2018
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. 【タイトル】タイトルバーアクション
  3. 【  概要  】
  4. 【  Type  】AHK Script[Hotkey系]
  5. 【  Site  】http://pastebin.com/4ZHJVHTV
  6. 【 更新日 】2020/02/25
  7. 【 要依存 】あり
  8.  
  9. ■ホットキー
  10.     L…左クリック/ドラッグ
  11.    LL…メニュー(menuHackerモドキ)
  12.     R…奥に表示
  13.     M…通常終了
  14.  C+ M…強制終了
  15.  C+ L…最前面
  16.  S+ L…シェード
  17. CS+ L…タイトル取得
  18.   + R…クラス名取得
  19.  
  20. ■メニュー
  21. フォルダを開く…タブ/ウィンドウ
  22. コピー…フルパス/フォルダパス/ファイル名/コマンドライン/PID/タイトル/クラス名
  23. リサイズ…定形/上下左右半分
  24. 最前面
  25. 優先度
  26. プロパティ
  27.  
  28. ■要依存
  29. □MG_CommandLine() [ぴょんきち] ※MouseGestureL.ahk内 http://hp.vector.co.jp/authors/VA018351/mglahk.html
  30. □_Lib.ahk        http://pastebin.com/t0TNWd8S
  31. □MouseIsOver()   http://pastebin.com/QC69R09p
  32. □SetPriority_*() http://pastebin.com/TnRd7dmC
  33. □ToolTip()       http://pastebin.com/uHuBttNb
  34. □WinActive_*()   http://pastebin.com/ByEVDxmk
  35. □WinMove()       http://pastebin.com/YdEbm8J9
  36. */
  37. #Include <_Lib>
  38.  
  39. ;【Hotkey】
  40. ;[タイトルバー上]
  41. ;    L│左クリック/ドラッグ
  42. ;   LL│メニュー(menuHackerモドキ)
  43. ;   〃│Soda
  44. ;    R│奥に表示
  45. ;    M│通常終了
  46. ; C+ M│強制終了
  47. ; C+ L│最前面
  48. ; S+ L│シェード
  49. ;CS+ L│タイトル取得
  50. ;  + R│クラス名取得
  51.  
  52. ;    タイトルバー…(onTitleBar() = 2)
  53. ;                …(Acc_GetRole() = "タイトル バー")
  54. ;システムメニュー…(onTitleBar() = 3)
  55. ;    最小化ボタン…(Acc_GetName() = "最小化" && Acc_GetRole() = "ボタン")
  56. ;    最大化ボタン…(Acc_GetName() = "最大化" && Acc_GetRole() = "ボタン")
  57. ;  元に戻すボタン…(Acc_GetName() = "元のサイズに戻す" && Acc_GetRole() = "ボタン")
  58. ;    閉じるボタン…(Acc_GetName() = "閉じる" && Acc_GetRole() = "ボタン")
  59.  
  60. ;Acc.ahk http://ux.getuploader.com/autohotkeyl/download/76/
  61. ;マウスカーソル下のデータ取得サンプル関数.ahk
  62.  
  63. ;{タイトルバー}
  64. ;(除外)
  65. ;AutoHotkey…メインウィンドウ/ダイアログボックス(MsgBox)
  66. ;Soda…エクスプローラー/ダイアログボックス
  67.  
  68. #If (onTitleBar() = 2                                                                   ;[除外]
  69.  && !WinActive_2(A_ScriptName " ahk_class AutoHotkey")                                  ;AutoHotkey メインウィンドウ
  70.  && !WinActive("ahk_class #32770 ahk_exe AutoHotkey.exe")                               ;AutoHotkey ダイアログボックス(MsgBox)
  71.  && !WinActive("ahk_class CabinetWClass")                                               ;エクスプローラー
  72.  && !WinActive_R("^((ファイル|フォルダー)[のを]|名前を付けて保存) ahk_class #32770"))    ;ダイアログボックス
  73.     LButton::
  74.         ;Sクリック
  75.         if (A_PriorHotkey <> A_ThisHotkey || A_TimeSincePriorHotkey > 500) {
  76.             Send {LButton Down}
  77.             KeyWait, LButton
  78.             Send {LButton Up}
  79.         ;Wクリック
  80.         } else {
  81.             ;取得
  82.             MouseGetPos,,, hWnd                             ;マウスカーソル下のウィンドウハンドル取得
  83.             WinGet, PID, PID, ahk_id %hWnd%                 ;         PID取得(PID)
  84.             WinGet, ProcessPath, ProcessPath, ahk_id %hWnd% ;    フルパス取得(ProcessPath)
  85.             SplitPath, ProcessPath,, FolderPath             ;フォルダパス取得(FolderPath)
  86.             WinGet, ProcessName, ProcessName, ahk_id %hWnd% ;  ファイル名取得(ProcessName)
  87.             WinGetTitle, Title, ahk_id %hWnd%               ;    タイトル取得(Title)
  88.             WinGetClass, ClassName, ahk_id %hWnd%           ;    クラス名取得(ClassName)
  89.             Priority := Priority(ProcessName)               ;      優先度取得(Priority)
  90.             WinGetPos, X, Y, Width, Height, ahk_id %hWnd%   ;ウィンドウポジション、サイズ取得
  91.             WinGet, ExStyle, ExStyle, ahk_id %hWnd%         ;ウィンドウ拡張スタイル取得
  92.             ;メニュー
  93.             ;フォルダを開く(Sub)
  94.             MenuAdd("タブ|ウィンドウ", "Open", "TitleBar")
  95.             ;コピー(Sub)
  96.             MenuAdd("フルパス|フォルダパス|ファイル名|コマンドライン|PID||タイトル|クラス名", "Copy", "TitleBar")
  97.             ;リサイズ(Sub)
  98.             MenuAdd("640×480|800×600|1024×768||上半分|下半分|左半分|右半分||" Width "×" Height " [A]|x``:" X " y``:" Y, "Resize", "TitleBar")
  99.             MenuDisable(Width "×" Height " [A]|x:" X " y:" Y, "Resize")
  100.             ;Notes
  101.             ;MenuAdd/Ins()内のコロン文字自身「:」→「``:」
  102.             ;優先度(Sub)
  103.             MenuAdd("リアルタイム(&R)|高(&H)|通常以上(&A)|通常(&N)|通常以下(&B)|低(&L)", "Priority", "TitleBar")
  104.             (Priority = "Realtime")    ? MenuCheck("リアルタイム(&R)", "Priority") : MenuCheck("リアルタイム(&R)", "Priority", 1)
  105.             (Priority = "High")        ? MenuCheck("高(&H)"          , "Priority") : MenuCheck("高(&H)"          , "Priority", 1)
  106.             (Priority = "AboveNormal") ? MenuCheck("通常以上(&A)"    , "Priority") : MenuCheck("通常以上(&A)"    , "Priority", 1)
  107.             (Priority = "Normal")      ? MenuCheck("通常(&N)"        , "Priority") : MenuCheck("通常(&N)"        , "Priority", 1)
  108.             (Priority = "BelowNormal") ? MenuCheck("通常以下(&B)"    , "Priority") : MenuCheck("通常以下(&B)"    , "Priority", 1)
  109.             (Priority = "Low")         ? MenuCheck("低(&L)"          , "Priority") : MenuCheck("低(&L)"          , "Priority", 1)
  110.             ;メインメニュー
  111.             MenuAdd("フォルダを開く:Open|コピー:Copy|リサイズ:Resize|最前面(&T)|優先度(&P):Priority|プロパティ(&R)",, "TitleBar")
  112.             (ExStyle & 0x8) ? MenuCheck("最前面(&T)") : MenuCheck("最前面(&T)",, 1)
  113.             ;メニュー表示/削除
  114.             MenuShow("Copy|Resize")
  115.         }
  116.     return
  117. #If
  118.  
  119. ;ラベル
  120. TitleBar:
  121.     Switch A_ThisMenuItem {
  122.         ;フォルダを開く
  123.         Case "タブ"            : Run, %FolderPath%
  124.         Case "ウィンドウ"      : Run, explorer /e`,/select`,%ProcessPath%
  125.         ;コピー
  126.         Case "フルパス"        : Clipboard := ProcessPath
  127.         Case "フォルダパス"    : Clipboard := FolderPath
  128.         Case "ファイル名"      : Clipboard := ProcessName
  129.         Case "コマンドライン"  : Clipboard := MG_CommandLine(PID)
  130.         Case "PID"             : Clipboard := PID
  131.         Case "タイトル"        : Clipboard := Title
  132.         Case "クラス名"        : Clipboard := ClassName
  133.         ;リサイズ
  134.         Case "640×480"        : WinMove, ahk_id %hWnd%,,,, 640, 480
  135.         Case "800×600"        : WinMove, ahk_id %hWnd%,,,, 800, 600
  136.         Case "1024×768"       : WinMove, ahk_id %hWnd%,,,, 1024, 768
  137.         Case "上半分"          : WinMove("上半", "ahk_id " hWnd)
  138.         Case "下半分"          : WinMove("下半", "ahk_id " hWnd)
  139.         Case "左半分"          : WinMove("左半", "ahk_id " hWnd)
  140.         Case "右半分"          : WinMove("右半", "ahk_id " hWnd)
  141.         ;最前面
  142.         Case "最前面(&T)"      : WinSet, AlwaysOnTop, Toggle, ahk_id %hWnd%
  143.         ;優先度
  144.         Case "リアルタイム(&R)": SetPriority(ProcessName, "R")
  145.         Case "高(&H)"          : SetPriority(ProcessName, "H")
  146.         Case "通常以上(&A)"    : SetPriority(ProcessName, "A")
  147.         Case "通常(&N)"        : SetPriority(ProcessName, "N")
  148.         Case "通常以下(&B)"    : SetPriority(ProcessName, "B")
  149.         Case "低(&L)"          : SetPriority(ProcessName, "L")
  150.         ;プロパティ
  151.         Case "プロパティ(&R)"  : Run, properties %ProcessPath%
  152.     }
  153.     ;コピー
  154.     (A_ThisMenu = "Copy") ? ToolTip(Clipboard,,,, 1)
  155.     return
  156.  
  157. ;(すべて)
  158. #If (onTitleBar() = 2)
  159.     ;奥に表示(R)
  160.     RButton::
  161.         ;除外
  162.         a := MouseIsOver("Orchis ahk_exe orchis.exe")   ;Orchis
  163.         if a {
  164.             Send {RButton}
  165.             return
  166.         }
  167.         MouseGetPos,,, hWnd             ;マウスカーソル下のウィンドウハンドル取得
  168.         WinSet, Bottom,, ahk_id %hWnd%  ;奥に表示
  169.         MouseGetPos,,, hWnd             ;マウスカーソル下のウィンドウハンドル取得
  170.         WinActivate, ahk_id %hWnd%      ;アクティブ化
  171.     return
  172.  
  173.     ;通常終了(M)
  174.     MButton::
  175.         MouseGetPos,,, hWnd                             ;マウスカーソル下のウィンドウハンドル取得
  176.         WinGet, ProcessName, ProcessName, ahk_id %hWnd% ;ファイル名取得
  177.         Switch ProcessName {
  178.         ;秀丸エディタ
  179.         Case "Hidemaru.exe":
  180.             Send {LButton}          ;アクティブ化
  181.             Send !{F4}              ;通常終了(Alt+F4)
  182.         ;その他
  183.         Default:
  184.             WinClose, ahk_id %hWnd% ;通常終了(WinClose)
  185.         }
  186.     return
  187.  
  188.     ;強制終了(Ctrl+M)
  189.     ^MButton::
  190.         MouseGetPos,,, hWnd                                                     ;マウスカーソル下のウィンドウハンドル取得
  191.         WinGet, PID, PID, ahk_id %hWnd%                                         ;PID取得
  192.         WinGetClass, ClassName, ahk_id %hWnd%                                   ;クラス名取得
  193.         if (ClassName = "Ghost")                                                ;Ghostウィンドウ
  194.             SoundPlay, *16                                                      ; エラー音
  195.         else {                                                                  ;その他
  196.             MsgBox("AutoHotkey", "強制終了しますか?`n[AT YOUR OWN RISK]", 2, 2) ; 警告メッセージ(いいえ)
  197.             IfMsgBox, Yes, Process, Close, %PID%                                ; はい   ⇒ 強制終了
  198.             IfMsgBox, No , SoundPlay, *16                                       ; いいえ ⇒ エラー音
  199.         }                                                                       ; }
  200.     return
  201.  
  202.     ;最前面(Ctrl+L)
  203.     ^LButton::
  204.         MouseGetPos,,, hWnd                                                         ;マウスカーソル下のウィンドウハンドル取得
  205.         WinGetTitle, Title, ahk_id %hWnd%                                           ;タイトル取得
  206.         WinSet, AlwaysOnTop, Toggle, ahk_id %hWnd%                                  ;最前面トグル
  207.         if isTopMost()                                                              ;最前面⇒
  208.             WinSetTitle, ahk_id %hWnd%,, %Title%[最前面]                         ; タイトル[最前面]
  209.         else                                                                        ;No最前面⇒
  210.             WinSetTitle, ahk_id %hWnd%,, % RegExReplace(Title, "[最前面]$", "")  ; タイトル
  211.     return
  212.  
  213.     ;シェード(Shift+L)
  214.     +LButton::
  215.         SetWinDelay, 0                                          ;hoge
  216.         MouseGetPos,,, hWnd                                     ;マウスカーソル下のウィンドウハンドル取得
  217.         WinGetPos, X, Y, Width, Height, ahk_id %hWnd%           ;ウィンドウポジション、サイズ取得
  218.         if (%hWnd%Height > 0) {                                 ;復元時処理
  219.             Height := %hWnd%Height                              ; 高さセット
  220.             %hWnd%Height =                                      ; 変数解放
  221.         } else {                                                ;シェード時処理
  222.             %hWnd%Height := Height                              ; 高さ保存
  223.             Height := 26                                        ; 高さセット
  224.         }                                                       ; }
  225.         WinMove, ahk_id %hWnd%,, %X%, %Y%, %Width%, %Height%    ;ウィンドウ処理
  226.     return
  227.  
  228.     ;タイトル取得(Ctrl+Shift+L)
  229.     ^+LButton::
  230.         MouseGetPos,,, hWnd                                 ;マウスカーソル下のウィンドウハンドル取得
  231.         WinGetTitle, Title, ahk_id %hWnd%                   ;タイトル取得
  232.         Clipboard := RegExReplace(Title, "[最前面]$", "")    ;クリップボードセット
  233.         ToolTip(Clipboard,,,, 1)                            ;音付ツールチップ表示(ms)
  234.     return
  235.  
  236.     ;クラス名取得(Ctrl+Shift+R)
  237.     ^+RButton::
  238.         MouseGetPos,,, hWnd                     ;マウスカーソル下のウィンドウハンドル取得
  239.         WinGetClass, ClassName, ahk_id %hWnd%   ;クラス名取得
  240.         Clipboard := ClassName                  ;クリップボードセット
  241.         ToolTip(Clipboard,,,, 1)                ;音付ツールチップ表示(ms)
  242.     return
  243. #If
  244.  
  245. ;{システムメニュー}
  246. ;#If (onTitleBar() = 3                                      ;[除外]
  247. ; && !WinActive_2(A_ScriptName " ahk_class AutoHotkey")     ;AutoHotkey メインウィンドウ
  248. ; && !WinActive("ahk_class #32770 ahk_exe AutoHotkey.exe")) ;AutoHotkey ダイアログボックス(MsgBox)
  249. ;   ;左ダブルクリック禁止
  250. ;   LButton::
  251. ;       ;Sクリック
  252. ;       if (A_PriorHotkey <> A_ThisHotkey || A_TimeSincePriorHotkey > 500) {
  253. ;           Send {LButton Down}
  254. ;           KeyWait, LButton
  255. ;           Send {LButton Up}
  256. ;       }
  257. ;   return
  258. ;#If
  259.  
  260. ;{最小化ボタン}
  261. ;#If (Acc_GetName() = "最小化" && Acc_GetRole() = "ボタン")
  262. ;#If
  263.  
  264. ;{最大化ボタン}
  265. ;#If (Acc_GetName() = "最大化" && Acc_GetRole() = "ボタン")
  266. ;#If
  267.  
  268. ;{元に戻すボタン}
  269. ;#If (Acc_GetName() = "元のサイズに戻す" && Acc_GetRole() = "ボタン")
  270. ;#If
  271.  
  272. ;{閉じるボタン}
  273. ;#If (Acc_GetName() = "閉じる" && Acc_GetRole() = "ボタン")
  274. ;#If
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement