C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: Excelのメッセージボックスを閉じたい


(過去ログ 121 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■72455 / inTopicNo.1)  Excelのメッセージボックスを閉じたい
  
□投稿者/ KML (1回)-(2014/06/10(Tue) 10:00:41)

分類:[.NET 全般] 

お世話になります。
Excelより出力されたメッセージボックスをVB.NETで監視し、それを閉じるプログラムを作成したいのですが、
以下のコードでExcelのメッセージボックスらしきものを取得することができるのですが、
そこから閉じることができません。

        Dim colWindows As Collection
        colWindows = GetAllWindows()

        Dim strProcess As New System.Text.StringBuilder
        Dim bytClass As Byte()
        Dim bytTitle As Byte()
        Dim bytSpace As Byte()

        ' 親ウィンドウ毎のコレクションループ
        For i = 1 To colWindows.Count
            ' 子コントロール毎のコレクション取得
            Dim colChilds As Collection
            colChilds = colWindows.Item(i)
            If colChilds.Count > 1 Then         ' 子コントロールを持つ物のみ対象
                For j = 1 To colChilds.Count
                    bytSpace = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes(New String(" ", 50))

                    ' コレクションからクラス名取得
                    bytClass = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes(colChilds.Item(j)(1))
                    If bytClass.Length < 30 Then
                        Dim p As Integer = bytClass.Length
                        ReDim Preserve bytClass(bytClass.Length + bytSpace.Length - 1)
                        Array.Copy(bytSpace, 0, bytClass, p, bytSpace.Length)
                        ReDim Preserve bytClass(30 - 1)
                    End If
                    Dim strClass As String = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(bytClass)

                    ' コレクションから文字列取得
                    bytTitle = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes(colChilds.Item(j)(2))
                    If bytTitle.Length < 50 Then
                        Dim p As Integer = bytTitle.Length
                        ReDim Preserve bytTitle(bytTitle.Length + bytSpace.Length - 1)
                        Array.Copy(bytSpace, 0, bytTitle, p, bytSpace.Length)
                        ReDim Preserve bytTitle(50 - 1)
                    End If
                    Dim strTitle As String = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(bytTitle)

                Next

            End If

        Next

参考でもよろしいのでなにか御教示いただけませんでしょうか。

引用返信 編集キー/
■72557 / inTopicNo.2)  Re[1]: Excelのメッセージボックスを閉じたい
□投稿者/ 魔界の仮面弁士 (34回)-(2014/06/17(Tue) 12:14:12)
No72455 (KML さん) に返信
> 以下のコードでExcelのメッセージボックスらしきものを取得することができるのですが、
> そこから閉じることができません。

そもそも、このコードの肝は
> Dim colWindows As Collection
> colWindows = GetAllWindows()
の部分ですよね。

その中で、どういったコードで取得しているのか(WM_INITDIALOG で捉えているとか、
EnumWindows API で列挙しているなど)分かりませんし、そもそも、その Collection に
何が格納されているのかも説明されていませんので、修正案を出しようが無かったりします。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -