QA@IT

VB.netで外部から最大化で起動されても通常のサイズに戻したい

6859 PV

Visual Studio 2013のVB.netでアプリを作成しています。
最大化を出来ないようにしたいのですが、外部(VBScript)から最大化でEXEを実行されてしまうと最大化表示されてしまいます。
これを無効にすることは出来ないでしょうか?

'テスト用に作成したVB.netのアプリ
'デザイナ上で MaximizeBox を False
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.MaximumSize = Me.Size
    End Sub

    Private Sub Form1_SizeChanged(sender As Object, e As EventArgs) Handles Me.SizeChanged
        If Me.WindowState = FormWindowState.Maximized Then
            Me.WindowState = FormWindowState.Normal
        End If
    End Sub
End Class
'テスト用に作成したアプリを起動するVBScript
Const vbMaximizedFocus = 3

Dim objWShell
Set objWShell = CreateObject("WScript.Shell")
objWShell.Run "WindowsApplication1.exe", vbMaximizedFocus, False
Set objWShell = Nothing

【2018/04/12 追記】
外部から最大化で起動するスクリプトは、私の方で作成しているのではなく別業者が作成しています。
最大化で起動しないよう言ってはいますが返事が良くなく、こちらで対応できればと質問しました。
【2018/04/12 解決】
MaximumSizeを設定するでもなく、LoadイベントにFormWindowState.Normalを書くだけで解決しました。

'テスト用に作成したVB.netのアプリ
'デザイナ上で MaximizeBox を False
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.WindowState = FormWindowState.Normal
    End Sub
End Class

回答

1.Loadイベント時点でのサイズ変更だと NG
2.Changeイベントには入らない NG

なので

1.デザイナ上でMaximunSizeに固定値を指定
2.Loadイベントより前のイベントでサイズ指定
ex)

   Private Sub Form1_HandleCreated(sender As Object, e As System.EventArgs) Handles Me.HandleCreated
        Me.MaximumSize = Me.Size
   End Sub

どちらかかな?

編集 履歴 (0)
  • 回答して頂いた内容で最大化しなくなりましたがフォームが中央表示にできません。
    デザイナ上でStartPositionをCenterScreenにしても
    HandleCreatedイベントでLocationを指定しても位置が左上固定で表示されます。
    中央表示にすることは可能でしょうか?
    -
  • 呼び出しにvbMaximizedFocusを指定している意味がよくわからなくなっていますが
    vbNormalFocus ではだめなのでしょうか
    -
  • 私の方で呼び出しているのではなく別業者が呼び出しています。
    最大化で呼び出さないで欲しい。と言ってはいるのですが返事がはっきりしません。
    こちらのアプリで対応できるのなら対応したいと思い質問しました。
    -
  • 一応ActivatedイベントでLocation変わるところまでは確認したのですが
    これだと、フォームがActiveになるたびにLocation変更が動作してしまいますね!
    -
  • Timerコントロールを追加して1秒後にLocationを変更しても変わりませんでした。
    でも、Me.WindowState = FormWindowState.Normalにすると中央表示になりました!
    それと、LoadイベントにMe.WindowState = FormWindowState.Normalを書くだけでも最大化を防げました!
    -
  • 助言をありがとうございました、無事に対応できました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。