2006/12/09

元記事はhttp://winscript.s41.xrea.com/mt/archives/2005/09/post_5.htmlです。

クリップボードを扱う.NET Frameworkのクラスに、Clipboardクラスがあります。そのSetDataObjectメソッドを使うとクリップボードにテキストデータを格納できる、はずです。が、

[void] [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
[System.Windows.Forms.Clipboard]::SetDataObject("あああ")

のようなスクリプトを実行すると、

Exception calling "SetDataObject" with "1" argument(s): "OLE が呼び出される前に、現在のスレッドが Single Thread Apartment (STA) モードに設定されていなければなりません。Main 関数に STAThreadAttribute が設定されていることを確認してください。".

というエラーが出てしまいます。MSHでMain関数にSTAThreadAttributeを指定するにはどうすれば良いのでしょうか? ちなみに

[System.Threading.Thread]::CurrentThread.ApartmentState = 
[System.Threading.ApartmentState]::STA

のようにしてもSTAにはなってくれませんでした。

クリップボードアクセスは、newpopsさんが提案されている、IEのCOMコンポーネントを使う方法で可能になります。

PowerShell Memo - 文字列をクリップボードにコピーする
http://d.hatena.ne.jp/newpops/20061104/p1

元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/12/09/49650.aspx

2006/06/23

元記事はhttp://winscript.s41.xrea.com/mt/archives/2005/08/messagebox.htmlです。

# show_messagebox.ps1
[void] [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
[System.Windows.Forms.MessageBox]::Show("こんにちは") 

1行目でMessageBoxクラスのあるSystem.Windows.Forms.dllを明示的にロードしてます。 2行目でMessageBoxクラスのShowメソッドを呼んでいます。(.NETのクラスのstaticなメソッドを呼ぶときは[名前空間.クラス名]::メソッド名()のように呼ぶ)

このスクリプトはUTF-8で保存してください。日本語が化けるのを防ぐためです。と書きましたがRC1になってShift-JISでも文字化けしなくなった模様です。

LoadWithPartialNameメソッドを使って.NETアセンブリをロードする方法については Precision Computing - A Download Manager in MSH http://www.leeholmes.com/blog/ADownloadManagerInMSH.aspxを参照しました。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2006/06/23/31170.aspx


Copyright © 2005-2018 Daisuke Mutaguchi All rights reserved
mailto: mutaguchi at roy.hi-ho.ne.jp
プライバシーポリシー

Books

Twitter