タイトル : Re: クリップボードに自動保存 投稿日 : 2006/03/22(Wed) 23:47 投稿者 : YAS
ツリーが長くなってきたので,見やすくなるよう,最初の投稿に返信をします。 >CreateObject("Shell.Application").ToggleDesktop() おぉ!すばらしい。いいやり方を見つけになりましたね。私は知りませんでした。 ただ,CreateObjectということはこれはCOMオブジェクトだと思いますし,Option Strict On にすると遅延バインディングが禁止になりますので,次のようにするとよいと思います。 Dim Obj As Object = Nothing Try Obj = CreateObject("Shell.Application") Obj.GetType.InvokeMember("ToggleDesktop", _ Reflection.BindingFlags.InvokeMethod, Nothing, Obj, Nothing) Catch ex As Exception If Obj IsNot Nothing Then Marshal.ReleaseComObject(Obj) End Try これでCOMオブジェクトが解放され,かつOption Strict Onでもエラーになりません。 あとは,ウィンドウが全部最小化されたことを判断すればよいのでしょうが,申し訳ありませんが, 私にはわかりません。 下のような非常に長めのウエイトをかませる位しか思いつきません。 System.Threading.Thread.Sleep(3000) >Dim iData As IDataObject = Clipboard.GetDataObject() >'クリップボードにBMPファイルがあれば >'WorkCopyPath="C:\WINDOWS\TEMP\DiskTop.jpeg"に保存 >If iData.GetDataPresent(DataFormats.Bitmap) Then >Dim img As System.Drawing.Image = iData.GetData(DataFormats.Bitmap, True) >'Jpeg 形式で保存 >img.Save(WorkCopyPath, System.Drawing.Imaging.ImageFormat.Jpeg) ここの部分の意味がよくわかりませんが,ファイルに保存するだけならクリップボードに コピーなどせず,キャプチャした直後にImageオブジェクトから直接保存したらよいのでは? |