VBScriptで特定のタイトルが付いているアプリを移動する
概要
VBScriptで特定のタイトルがついたウィンドウを移動します。
小さいディスプレイだと起動時からはみ出してしまうアプリの操作に使える・・・という狭い範囲向けの情報です。
ただ、たいていのケース、キーボードで移動させればなんとかなります。
キーボードによるウィンドウの移動
- 移動させたいウィンドウをアクティブな状態にします。
- キーボードの[Alt]キーと[Space]キーを同時に押します。
- キーボードの[M]キーを押します。(あるいは、マウスで「移動」を選択します。)
- カーソルキーを押します。
要点
WordのTasks/Taskオブジェクトを利用します。
Tasksオブジェクトで特定のタイトルがついたアプリのTaskオブジェクトを得て、そのTopとLeftを操作します。
Python(pywin32)でWordを操作する[6] - 特定のタイトルが付いているウィンドウの操作 - Qiitaも参照
上方向の移動のみに限定した要点コードは以下です。見つけたいタイトルはapp_name
に設定しています。
- Window_OnLoadで
CreateObject("Word.Application")
・・・裏でWordが起動するので若干重い - Upで
objWord.Tasks.Exists(app_name)
でアプリの存在確認をする -
Set tsk = objWord.Tasks(app_name)
でTaskオブジェクトを取得する -
tsk.Top
に値を入れて移動する - Window_OnUnloadで.htaクローズ時に起動したWordを終了する・・・これを忘れると裏にWordが残る。残ったらタスクマネージャなどで強制的に終了する
<!DOCTYPE html>
<html>
<head><title>ウィンドウ↑移動スクリプト</title></head>
<body><button type="button" onclick="Up()">↑</button></body>
<script language="vbscript">
Dim app_name : app_name = "メモ帳"
Dim objWord : Set objWord = Nothing
Sub Window_OnLoad
Window.ResizeTo 320,200
Set objWord = CreateObject("Word.Application")
End Sub
Sub Window_OnUnload
objWord.Quit()
Set objWord = Nothing
End Sub
Sub Up
If objWord.Tasks.Exists(app_name) Then
Set tsk = objWord.Tasks(app_name)
tsk.Top = tsk.Top - 10
End If
End Sub
</script>
</html>
上下左右移動コード
上下左右操作用のボタン+若干のエラーハンドリングのコードをつけています。
なお、objWord.Tasks.Exists(app_name)
とobjWord.Tasks(app_name)
は「部分一致」です。
完全に一致させたい場合は、部分一致させたあとにNameプロパティを使えば完全一致させることが可能です。
さらに、まったく同じタイトルのアプリが複数いるとNameプロパティでも区別できないので別の工夫が必要になります。
<!DOCTYPE html>
<html>
<head>
<title>ウィンドウ移動スクリプト</title>
</head>
<body>
<table>
<tr>
<td></td>
<td><button type="button" onclick="Up()">↑</button></td>
<td></td>
</tr>
<tr>
<td><button type="button" onclick="Left()">←</button></td>
<td></td>
<td><button type="button" onclick="Right()">→</button></td>
</tr>
<tr>
<td></td>
<td><button type="button" onclick="Down()">↓</button></td>
<td></td>
</tr>
</table>
<div id="status"></div>
</body>
<script language="vbscript">
Dim app_name : app_name = "メモ帳"
Dim objWord : Set objWord = Nothing
Sub Window_OnLoad
Window.ResizeTo 320,200
Set objWord = CreateObject("Word.Application")
End Sub
Sub Window_OnUnload
objWord.Quit()
Set objWord = Nothing
End Sub
Sub Up
If objWord.Tasks.Exists(app_name) Then
Set tsk = objWord.Tasks(app_name)
tsk.Top = tsk.Top - 10
document.GetElementById("status").innerText = tsk.Name & ": Y = " & tsk.Top
Else
document.GetElementById("status").innerText = app_name & " が見つかりませんでした"
End If
End Sub
Sub Down
If objWord.Tasks.Exists(app_name) Then
Set tsk = objWord.Tasks(app_name)
tsk.Top = tsk.Top + 10
document.GetElementById("status").innerText = tsk.Name & ": Y = " & tsk.Top
Else
document.GetElementById("status").innerText = app_name & " が見つかりませんでした"
End If
End Sub
Sub Left
If objWord.Tasks.Exists(app_name) Then
Set tsk = objWord.Tasks(app_name)
tsk.Left = tsk.Left - 10
document.GetElementById("status").innerText = tsk.Name & ": X = " & tsk.Left
Else
document.GetElementById("status").innerText = app_name & " が見つかりませんでした"
End If
End Sub
Sub Right
If objWord.Tasks.Exists(app_name) Then
Set tsk = objWord.Tasks(app_name)
tsk.Left = tsk.Left + 10
document.GetElementById("status").innerText = tsk.Name & ": X = " & tsk.Left
Else
document.GetElementById("status").innerText = app_name & " が見つかりませんでした"
End If
End Sub
</script>
</html>
Author And Source
この問題について(VBScriptで特定のタイトルが付いているアプリを移動する), 我々は、より多くの情報をここで見つけました https://qiita.com/int_main_void/items/185987018baf0579280f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .