2006/12/09
クリップボードアクセス(未完)II
元記事は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
2006/06/23
MessageBoxクラスを使うII
元記事は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
プライバシーポリシー