tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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オブジェクトから直接保存したらよいのでは?

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。