LoginSignup
8
13

More than 5 years have passed since last update.

クリップボードのテキストを取り出して、VBScriptで扱う

Last updated at Posted at 2014-01-05

概要

VBScriptを使って、クリップボードからテキストを取り出したいという話。

結論としては、Clipboard.GetText メソッド (System.Windows.Forms)でクリップボードからテキストを取り出して標準出力に出し、VBScriptでそれを受けるという方法でできたようだ。

2017.08.21 追記

vbs + C#と違い、コンソールが一瞬表示されてしまうデメリットはありますが、vbs単独版(内部でpowershell利用)をつくりました。

Set exec = CreateObject("WScript.Shell").Exec("powershell.exe -sta  -Command Add-Type -Assembly System.Windows.Forms; [System.Windows.Forms.Clipboard]::GetText()")
exec.StdIn.Close
WScript.Echo exec.StdOut.ReadAll

参考

Hey, Scripting Guy! クリップボードから URL を取得し、その Web サイトをブラウザで開く方法はありますかに、Internet Explorer(COM)経由でクリップボードからテキストを取得する方法が記載されている。

この方法だと、クリップボードからテキストを取り出す程度のために毎回IEが起動するので重いし、
↓のポップアップが出てしまうので若干おいしくない。

クリップボード01.png

クリップボード→標準出力

コンソールアプリケーションで以下のコードをビルドする。
今回は、ConsoleApplication1.exeというファイルができるようにビルドした。

コンソールアプリでのクリップボードの使用について - 質問・相談ならMSN相談箱に書かれているとおり、[STAThreadAttribute]をMain関数の前に入れないと動かないようだ。

Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms; //参照設定にも追加

namespace ConsoleApplication1
{
    class Program
    {
        [STAThreadAttribute]//←デフォルトでは追加されないので注意
        static void Main(string[] args)
        {
            string str = Clipboard.GetText();
            Console.WriteLine(str);
        }
    }
}

標準出力からの取り出し

ConsoleApplication1.exeと同じフォルダ(パスが通ったフォルダ)に以下のスクリプト(test.vbs)
を作成した。

test.vbs
Dim wsh
Set wsh = CreateObject("WScript.Shell")

Dim exec
Set exec = wsh.Exec("ConsoleApplication1.exe")

str = exec.StdOut.ReadAll

WScript.Echo str

結果

test.vbsの内容をコピーして、test.vbsをダブルクリックすると、以下のポップアップが表示され、
クリップボードのテキストを取得できていることが確認できた。

クリップボード02.png

備考

コピーしたものよりも改行が多い気がする(Console.WriteLine等の影響だと思う)が、とりあえずそのままにする。

8
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
13