tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルノートバッドの最大化を取得する
記事No11004
投稿日: 2013/01/11(Fri) 09:59
投稿者佐藤hs
ノートバッドが最大化しているかを取得したいのですが、下のコードを実行すると
ノートバッドが起動していれば、最小化していても、最大化されていますと表示されます。
原因はわかるでしょうか?
VB2005、Windows7です。
やりたいのは、リモートデスクトップで画面を最大化しているときに、VB2005で作成したフォームが表示されないようにしたくて、とりあえず、ノートバッドの最大化が取得出来るかを試しているところです。宜しくお願い致します。

    Declare Function IsZoomed Lib "user32" (ByVal hwnd As Long) As Long
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' プロセス名 notepad のものを探す
        ' プロセス名によっては複数見つかることもあるので気をつけること
        For Each p As Process In Process.GetProcessesByName("notepad")
            ' notepad.exeが最大化されているかどうかを取得する
            Dim bRet As Boolean
            ' IsZoomedの引数にウインドウハンドルを指定する
            bRet = IsZoomed(p.MainWindowHandle)
            If bRet = True Then
                MessageBox.Show("最大化されています")
            Else
                MessageBox.Show("最大化されていません")
            End If
        Next
    End Sub

[ツリー表示へ]
タイトルRe: ノートバッドの最大化を取得する
記事No11005
投稿日: 2013/01/11(Fri) 10:34
投稿者VBレスキュー(花ちゃん)
>     Declare Function IsZoomed Lib "user32" (ByVal hwnd As Long) As Long

    Declare Function IsZoomed Lib "user32" (ByVal hwnd As IntPtr) As Boolean

Win32 API の宣言が間違っているからです。

[ツリー表示へ]
タイトルRe^2: ノートバッドの最大化を取得する
記事No11006
投稿日: 2013/01/11(Fri) 14:34
投稿者佐藤hs
ご回答大変有り難う御座いました。
お陰様でノートバッドは取得出来ました。

リモートデスクトップ画面が最大になっているかを知りたかったので
For Each p As Process In Process.GetProcessesByName("notepad")
のnotepadをmstscに変えて実行してみましたが、どうもリモートデスクトップは
最大化が取得出来ない様です。
結果ご報告まで
大変有り難う御座いました。

[ツリー表示へ]
タイトルRe^3: ノートバッドの最大化を取得する
記事No11007
投稿日: 2013/01/16(Wed) 12:37
投稿者shu
> リモートデスクトップ画面が最大になっているかを知りたかったので
> For Each p As Process In Process.GetProcessesByName("notepad")
> のnotepadをmstscに変えて実行してみましたが、どうもリモートデスクトップは
> 最大化が取得出来ない様です。
リモートデスクトップを動かしているPCでは取得出来ると思います。
リモートデスクトップの接続先でプログラムを実行されていませんか?

[ツリー表示へ]
タイトルRe^4: ノートバッドの最大化を取得する
記事No11009
投稿日: 2013/01/16(Wed) 18:41
投稿者佐藤hs
出来るはずと言うご回答頂き、再度確認しましたら、出来ました。
大変有り難うございました。
タイマー5秒として、ボタンを押した後に、リモートデスクトップを最大画面にしてメッセージを待つ事で確認しました。

Declare Function IsZoomed Lib "user32" (ByVal hwnd As IntPtr) As Boolean
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        max_chk()
        Timer1.Enabled = False
    End Sub

    Private Sub max_chk()
        ' プロセス名 notepad のものを探す
        ' プロセス名によっては複数見つかることもあるので気をつけること
        For Each p As Process In Process.GetProcessesByName("mstsc") 'notepad mstsc
            ' notepad.exeが最大化されているかどうかを取得する
            Dim bRet As Boolean
            ' IsZoomedの引数にウインドウハンドルを指定する
            bRet = IsZoomed(p.MainWindowHandle)
            If bRet = True Then
                MessageBox.Show("最大化されています")
            Else
                MessageBox.Show("最大化されていません")
            End If
        Next
    End Sub

[ツリー表示へ]