« スクリプトでクリックボードを使う。 | トップページ | PowerShellで、自分のコンソールウィンドウを最小化、最大化、元に戻す。 »

2007年8月 8日 (水)

スクリプトからコンソールウィンドウの「すべて選択」「コピー」「貼り付け」

コンソールウィンドウの編集メニューをスクリプトから操作するには?

コンソールウィンドウに、SendKeys "Alt+ "しても効きません。

そこで、Excelを使って、Win32APIのSendMessageを呼び出します。

ConsoleCopy.VBS [ウィンドウタイトル]

ウィンドウタイトルで指定したコンソールウィンドウで、
「すべて選択」してクリップボードに「コピー」します。

Set Application=CreateObject("Excel.Application")
If WScript.Arguments.Count() Then
  Title=WScript.Arguments.Item(0)
End If
Do
  If Title<>"" Then
    hwnd=Application.ExecuteExcel4Macro("CALL(""user32"",""FindWindowA"",""JCC"",""ConsoleWindowClass"","""&Title&""")")
  Else
    hwnd=Application.ExecuteExcel4Macro("CALL(""user32"",""FindWindowA"",""JCJ"",""ConsoleWindowClass"",0)")
  End If
  If hwnd Then
    Application.ExecuteExcel4Macro( "CALL(""user32"",""SendMessageA"",""JJJJJ""," & hwnd & ",273,65525,0)")
    Application.ExecuteExcel4Macro( "CALL(""user32"",""SendMessageA"",""JJJJJ""," & hwnd & ",273,65520,0)")
    Exit Do
  End If
  Title=InputBox("ウィンドウが見つかりません。",WScript.ScriptName,Title)
Loop Until IsEmpty(Title)

ConsolePaste.VBS [ウィンドウタイトル]

ウィンドウタイトルで指定したコンソールウィンドウに、
クリップボードから「貼り付け」ます。

ウィンドウタイトルを省略すると、最初に見つかったコンソールウィンドウを
操作します。

コンソールウィンドウが見つからない場合、ウィンドウタイトルを
プロンプトします。

Set Application=CreateObject("Excel.Application")
If WScript.Arguments.Count() Then
  Title=WScript.Arguments.Item(0)
End If
Do
  If Title<>"" Then
    hwnd=Application.ExecuteExcel4Macro("CALL(""user32"",""FindWindowA"",""JCC"",""ConsoleWindowClass"","""&Title&""")")
  Else
    hwnd=Application.ExecuteExcel4Macro("CALL(""user32"",""FindWindowA"",""JCJ"",""ConsoleWindowClass"",0)")
  End If
  If hwnd Then
    Application.ExecuteExcel4Macro( "CALL(""user32"",""SendMessageA"",""JJJJJ""," & hwnd & ",273,65521,0)")
    Exit Do
  End If
  Title=InputBox("ウィンドウが見つかりません。",WScript.ScriptName,Title)
Loop Until IsEmpty(Title)

« スクリプトでクリックボードを使う。 | トップページ | PowerShellで、自分のコンソールウィンドウを最小化、最大化、元に戻す。 »