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

タイトル Excelの最大化・最小化ボタン
投稿日: 2010/03/17(Wed) 11:59
投稿者はる
いつも参考にさせていただいてます。

今回VB.netからExcelを制御するシステムを作っています。
VB.NET2008です。
Excelはレイトバインディングで制御します。

そこでCreateObjectしたExcelの最大化、最小化ボタンを非表示にしたいのですが、
WindowsAPIを使用するサンプルを見つけたので実装してみたところ
非表示になりません。

以下コード

   'APIの宣言
    'ウィンドウハンドルを取得する関数
    Public Declare Function FindWindow Lib "user32" _
           Alias "FindWindowA" (ByVal lpClassName As String _
                        , ByVal lpWindowName As String) As Long

    'ウィンドウに関する情報を返す関数
    Public Declare Function GetWindowLong Lib "user32" _
                 Alias "GetWindowLongA" (ByVal hWnd As Long _
                                   , ByVal nIndex As Long) As Long


    'ウィンドウの属性を変更する関数
    Public Declare Function SetWindowLong Lib "user32" _
                      Alias "SetWindowLongA" (ByVal hWnd As Long _
            , ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

    'メニューバーを描画する関数
    Public Declare Function DrawMenuBar Lib "user32" _
                                               (ByVal hWnd As Long) As Long


    '最大化ボタン
    Public Const WS_MAXIMIZEBOX As Long = &H10000

    '最小化ボタン
    Public Const WS_MINIMIZEBOX As Long = &H20000

    'スタイルを取得する定数
    Public Const GWL_STYLE As Long = -16&

   '非表示用のコード
    Sub BoxHide()
        Dim hWnd As Long
        Dim lngWstyle As Long

        'Excelのハンドル
        hWnd = FindWindow("XLMAIN", xlApp.Caption)

        '最小化・最大化ボタンの消去
        lngWstyle = GetWindowLong(hWnd, GWL_STYLE)

        SetWindowLong(hWnd, GWL_STYLE, lngWstyle _
             And (Not WS_MAXIMIZEBOX) And (Not WS_MINIMIZEBOX))

        'メニュー表示し直し
        DrawMenuBar(hWnd)

    End Sub

上記のメソッドを

               Dim xlApp as Object = CreateObject("Excel.Application")
               Dim xlBooks as Object  = xlApp.Workbooks

                '既存のファイルを開く場合
                Dim xlBook as Object  = xlBooks.Open(xlFilePath)
                Dim xlSheets as Object  = xlBook.Worksheets
                Dim xlSheet as Object  = xlSheets.Item(1)
                xlApp.WindowState = xlNormal
                xlApp.Left = Me.Left
                xlApp.Top = (Me.Top + Me.Height) * 0.75
                xlApp.Width = Me.Width * 0.75
                xlApp.Visible = True        'Excelを表示(必ずとも表示しなくてもよい)
                BoxHide()
と一番最後に呼び出しています。

Excelのウィンドウハンドルにも値が入ってきているのですが、
表示されたExcelには最大化、最小化ボタンがついたままです。

本当にやりたいことは最大化、最小化ボタンの非表示ではなく
Excelのウィンドウのサイズをユーザーが変更できないようにしたいのですが、
その方法が見つからず、とりあえず最大化、最小化の非表示だけでもと思っています。
一番いいのはサイズ固定、またはウィンドウのサイズが変更されたイベントを拾って
サイズを戻すことなのですが。。
Excelの中のActiveWindowでは求めていることができたのですが、
Excelそのもののウィンドウがどうにもできない状態です。

ぜひご指示、ご指摘お願いいたします。

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

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