VBScriptでクリップボードにコピーする方法

このQ&Aのポイント
  • VBScriptでクリップボードにMsgboxの出力データをコピーする方法がわかりません。
  • ネット検索結果によると、VBScriptやWSHでは直接クリップボードを操作することはできないようです。
  • しかし、Internet Explorerを使用することでクリップボードの操作が可能なようです。
回答を見る
  • ベストアンサー

VBScriptでクリップボードにコピーする方法

VBScriptでクリップボードにMsgboxの出力データをコピーする方法がわかりません。 ちなみにMsgboxの出力データは変数で、処理の流れとしてMsgboxのすぐ後に クリップボード上に変数をコピーをするようにしたいと考えています。 ネットで検索した結果、下記内容がありましたが、1年前くらいにまったく同じ目的のVBScriptを作成したことがあり、その時は特に制限なく目的のVBScriptが作成できたので、どうも納得できません。 その時のを残しておけばよかったと今になって後悔。。。しかもどうやったか忘れた。。。。 ===ネット検索結果=== WSH と VBScript のいずれにもクリップボードを操作する機能はありません。どちらを使用しても、クリップボードにデータをコピーしたりクリップボードからデータを貼り付けたりすることはできません。一方、Internet Explorer ではクリップボードを操作することができます。 他にもネット上で、とりあえずInputBoxに出力してコピーするような流れの内容がありましたが、今回の目的(見栄えとして)として、どうしてもMsgboxのすぐ後で処理させたいのでわかる方おりましたら宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

VBScriptはクリップボードを直接扱うことはできませんが、 コマンドを実行することはできます。 だから、クリップボードを操作するコマンドをVBScriptから 実行すればいいのです。 http://atl.blog.shinobi.jp/Entry/386/ を参考にしてください。 clip.exeかmshta.exeをVBScriptから起動すれば、 クリップボードに書き込みできます。

haimumk
質問者

お礼

ご回答ありがとうございます。 作業PCはXPなのでXP側を参考にさせていただきます。 また明日動作確認してみます。

その他の回答 (1)

回答No.1

いくつかのやり方がありますが、最初に言っておく必要があります。 頭を柔軟にすること。 何々の言語じゃないとだめとか、これでやりたいとか、は、捨ててください。機能を達成する事が目的な、はずです。 そのために共通インターフェースCOM等が開発されています。また、フレームワークと称して提供されています。 まず、最も簡単なのが ActiveX つまりCOMですね。 http://search.yahoo.co.jp/search?p=%22new+ActiveX+Internet.Application%22&aq=-1&oq=&ei=UTF-8&fr=ie8sc&n=10&x=wrt などでIEを起動し、そこから行う。 次にHTAを使う方法。これは前述の欠点を補います。もっとも推奨されます。 http://msdn.microsoft.com/ja-jp/library/ms536496(v=vs.85).aspx 次に、エクセル等のVBAを使う。 これは、同じくActiveXでCOMとして、VBSから操作してもいい。 なお、ローカルデーター、又は、システムにアクセスする場合、Vista 以降では UAC に引っかかります。これを意識していないと、自分のマシンではできたのに、他人ではできない。できる、できないが、わからない。なんてことになります。 VBSは昔から在る仕組みなので、必ずしもUAC等に100%、対応できているかと言えば、できていない事が多い。例えば、VBSからWMIを使うと、UACが有効な場合、何のエラーも出ずに、成功しているかのように見えるが、実は設定されていない。 コマンドプロンプトを「管理者で実行」で起動してから、cscriptで実行しやると、設定されている。 あれ、これ、前にも回答したな??? 4月になると、毎年同じ質問がでてくるが、気のせいか? 本題に戻り、 あとは同じくActiveXだが、 shell.application つまりShell(エクスプローラー)のCOMを使う方法がある。(なのでUACを一部、クリアーにできる操作がある。) VBSなどは、オブジェクト指向として初期の物です。すでに、開発は終わっていて、機能追加は、COM等で行われており、また、それらは、プログラミングとしては正常進化で、もっとも可能性があるものです。それを使わない手は、ないですね。

haimumk
質問者

お礼

ご回答ありがとうございます。 本件については暗号・復号化スクリプトの処理過程で必要になり質問させていただきました。 暗号・復号化の処理は正常に動作しているので、すでに9割できていることや過去にできていたこともありVBSに固執してしまいました。 確かに目的達成が一番重要ですね。

関連するQ&A

  • VBScriptで計算して出た値をクリップボードに貼り付ける方法

    VBScriptで、文字型変数を扱っています。 A="おはよう" B="元気?" C=A+B この文字変数”C”の内容をクリップボードに貼り付ける方法を教えてください。

  • クリップボードからの貼り付けのフック

    VB.net、C#、.net framework2005で、 クリップボード拡張ソフトを開発しております。 クリップボードへの入出力が起こる直前にフックをかけたいです。 コピー・切り取り操作(ClipBoardへの入力)については クリップボードチェーンに自分を加え、WM_DRAWCLIPBOARDをハンドルすることで解決できました。 貼り付け(ClipBoardからの出力)についてはどのようにすれば実現できますでしょうか? 貼り付けイベントが起こった時に、チェーン内のプログラムにそれを通知するようなWindowsメッセージがあるかと思い、それらしいものを探してみたのですが、利用できそうなものがありませんでした… 具体的には、 ・入力時に、データを加工して仮想クリップボードに格納 ・出力時に、仮想クリップボード内のデータを再度加工して出力(貼り付け) という処理を実現したいです。 宜しくお願い致します。

  • VB6でDBからクリップボード経由でExcelへ出力する際にクリップボードが開けなくなる

    VB6でOracle9iのDBから変数へ格納し、データを一気に貼り付けられるようにクリップいボードへ一旦コピーしてからExcelへ貼り付けています。 ごくたまにですが、Excelに空白の欄が出てしまい、うまくコピー&ペーストができていない様子です。 調べていくうちにいくつか原因を特定しました。 ・メモリ不足 ・DBからデータが取得できていない ・クリップボードが開けない メモリ不足かと思いましたが、CPU使用率は処理中の最大60%程度で、仮想メモリもかなり余裕あると思います。 データが取得できてないかとも思いましたが検討はずれ。 最後にクリップボードが開けないというメッセージが出ていることに気づきました。 他アプリケーションソフトが立ち上がっている場合はクリップボードへアクセスされている可能性があって、うまくコピー&ペーストができていないと予想されました。 しかし、他アプリケーションはDB操作ツールのObjectBrowser、メモ帳、Excelで、同時にdmpをエクスポートしていました。 クリップボードへアクセスするようなアプリではないように思いますが、これらは端末で操作していなくても定期的にクリップボードへアクセスするようなアプリなのでしょうか?

  • 「クリップボードにコピーされているデータが多すぎます。」について

    大量なExcelデータを複写してAccessのテーブルに貼り付けてテーブルを 閉じたら以下のメッセージが表示されました。 「クリップボードにコピーされているデータが多すぎます。 データをクリップボードにコピーすると、オブジェクトに対する参照だけがコピーされます。 ソース ドキュメントを閉じると、ソースからすべてのデータが貼り付けられます。 データに量によっては、時間がかかる場合もあります。 このデータをクリップボードに保存しますか?」 どういう事で言っているのでしょうか? 説明して下さい。 宜しくお願いします。

  • クリップボードにデータを送る(コピーする)には?

    vbaでクリップボードにデータを送る(コピーする)には? エクセルです。 Sub Macro() Selection.Copy End Sub で、クリップボードにデータを送ってることになりますよね? 「どこかのセルをコピーする」ではなく、例えば「abc」という文字をコピーさせて、 いつでも貼り付けられる状態にしたいのですが、vbaでそういうことは可能ですか? Sub Macro() "abc"をクリップボードに送る End Sub 的な事がしたいです。

  • 「ソースをクリップボードにコピー」

    無料のカレンダー自動作成ソフトがネット上で提供されていまして、 「ソースをクリップボードにコピー」というボタンをクリックすると、 文字通り、ソースがクリップボードにコピーされているのでしょうけれど、 「スタート」⇒「アクセサリ」⇒「システムツール」⇒「クリップボードビューア」という箇所までたどり着いたのですが、 ここから先、どうすればいいのか分かりません。 こちらとしては、 「HTMLソースがどこかに記載されているはずだから、 それを、右クリックでコピーして、希望の場所へ貼り付けよう!!」 と考えていたのですが、 上記のようにその先の作業が分かりません。 どうすればHTMLソースをコピーして貼り付けることが出来るのですか?

  • クリップボードを排他的に利用する方法

    自アプリケーションが起動している間、他アプリケーションからクリップボードを利用できないようにしたい、 あるいは他のアプリケーションがクリップボードに保存したデータと混ざらないように区別して自アプリケーションがデータを保存しこれを利用できるようにしたい と希望しています。 具体的には、 一定間隔毎に、画面をキャプチャしクリップボードに送り、これをピクチャーボックスに表示する処理を繰り返すプログラムを作成していますが、 この処理の間、たとえばWordなどの他アプリケーションで、コピーや貼り付けの操作を行えないようにしたい あるいはWordなどでコピーしたデータとは完全に区別して保存しこれを独占的に利用したいと希望しています。 このようなことはできるのでしょうか。もしも可能でしたら、どのように記述すればよいのでしょうか。 恐れ入りますが具体的にサンプルコードなどで教えていただければ大変ありがたく存じます。 恐れ入りますが、何卒ご教授いただきたくお願いいたします。 ちなみによくは分からないのですが、EmptyClipboard()関数を使って、クリップボードの所有権を取得できるとの記述を見たのですが、 (http://www.vbvbvb.com/jp/gtips/0051/gEmptyClipboard.html) たとえば、上記のサンプルプログラムで ' クリップボードの所有権を持つウィンドウハンドルを取得 lngClipboardOwner = GetClipboardOwner ' クリップボードの所有権が自フォームと同じときは If lngClipboardOwner = Me.hwnd Then   ' 画面のスナップをクリップボードに送り?   ’またクリップボードのデータの取得を行う? End If といったような感じで指示することは可能なのでしょうか。 もしも可能であれば申し訳ございませんが、上記If文部分の具体的な記述方法をご教授ください。宜しくお願いいたします。

  • EXCEL/VBA 変数の値をクリップボードにコピーする方法

    EXCEL/VBAで、変数Xの値をクリップボードにコピーする方法を教えて貰えませんか。下記のように変数Xを一度セルに代入すると出来ますが、変数Xを直接クリップボードにコピーする方法が分かりません。 宜しく、お願いします。 Range("a1") = X Range("a1").Copy

  • EXCEL2010のクリップボード

    (1)セルに書かれている東京を選択しコピー命令をだし、これをある位置に貼り付けます (2)セルに書かれている大阪を選択しコピー命令をだし、これをある位置に貼り付けます この操作の後、クリップボードを開いてみると、大阪のみが残っています。 一方 クリップボードを開いた状態にして、(1)(2)の操作をすると、大阪と東京の両方がクリップボードに残っています。 これは、正常な状態なのでしょうか? コピーをする前から、クリップボードに沢山(全部で24個?)残しながらコピーをしてゆこうなどと予測して(したがって予めクリップボードを開いた状態で)作業することなど無いように思いますので、とても理解に苦しみます。

  • シートのデータをクリアしてクリップボードの内容を貼り付ける方法

    シートのデータをクリアしてからクリップボードのデータを貼り付けるマクロを作成しています。 ■処理内容 Sheets("Sheet1").Cells.Clear Sheets("Sheet1").Paste 別アプリのデータをクリップボードに保存した場合は問題ないのですが、同一のエクセルウィンドウ内にあるセルデータをコピーした場合、Cells.Clearを実行した時点でシートのデータだけでなくクリップボード内のデータも消えてしまう為、張り付けることができません。 ※クリップボード内のデータを消さずにシートの内容をクリアする方法はありますか? よろしくお願いします。