2017-08-01 45 views
0

IsIconic関数を使用して、指定されたウィンドウが最小化されているかどうかをチェックします(アイコン)。IsIconic()の動作環境によって異なります

IsIconic機能

https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms633527(v=vs.85).aspx

私のコードは、特定の環境で正常に動作しますが、それは他の環境では動作しません。

Imports System.Runtime.InteropServices 


Public Class Form1 

    <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _ 
    Public Shared Function IsIconic(ByVal hWnd As IntPtr) As Long 
    End Function 

    <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _ 
    Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr 
    End Function 


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim hWnd As IntPtr = FindWindow(Nothing, "Google - Google Chrome") 

     If CBool(IsIconic(hWnd)) Then 
      Debug.WriteLine("Chrome is iconic.") 
     Else 
      Debug.WriteLine("Chrome is not iconic.") 
     End If 
    End Sub 

End Class 

64ビットWindows 7 OSで実行すると、Chromeがアイコン化されているかどうかを正しく判断できます。 しかし、32ビットWindows 7 OSで実行している場合、「Chromeは象徴的です。」 Chromeが実際にアイコン化されているかどうかに関係なく、常にイミディエイトウィンドウに表示されます。

この違いがなぜ発生するのか教えてください。 この現象はOSのビット数の違いによるものですか?または、他の何か?

+0

私はあなたの問題を解決するかどうか分かりませんが、 'IsIconic()'関数の戻り値の型が間違っています。 'As Long 'は' As Boolean'でなければなりません。 –

+0

私は[** this **](https://stackoverflow.com/a/29837548/3740093)に、Google Chromeが何らかの非表示のウィンドウを使用していることを発見しました。指定したタイトルと同じタイトルかどうかはわかりませんが、確かにIsWindowVisible()をチェックしてみてください。 –

+0

Visual Studioツールセットの「Spy ++」を使用して、あなたのマシンでChromeが作成したウィンドウを確認します。私の推測では、あなたの問題は、ChromeがそのAPIをスローする「文書化されていない」何かをしているということです。 – ahmd0

答えて

0

返品のタイプがIsIconic() functionで間違っています。

この:

Public Shared Function IsIconic(ByVal hWnd As IntPtr) As Long 

...このようになります。

Public Shared Function IsIconic(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean 

これも意味することができます(とすべきである)の変更:

If CBool(IsIconic(hWnd)) Then 
    Debug.WriteLine("Chrome is iconic.") 
Else 
    ... 

へ:

If IsIconic(hWnd) Then 
    Debug.WriteLine("Chrome is iconic.") 
Else 
    ... 
関連する問題