DOBON.NET DOBON.NETプログラミング掲示板過去ログ

GetWindowRectをVB.netで使用時のエラー

環境/言語:[Visual Basic.net 2002]
分類:[.NET]

こんにちは、いつもお世話になっております。
プログラムからFindWindowで取得したハンドルを使用してWindowsAPIのGetWindowRectを使用すると
System.NullReferenceException
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」
と言うメッセージが出てしまいます。

[API宣言部分]
' 長方形の左上隅と右下隅の座標を定義する構造体
<StructLayout(LayoutKind.Sequential)> _
Structure RECT
Public left As Long
Public top As Long
Public right As Long
Public bottom As Long
End Structure
' ウィンドウの境界長方形の寸法を取得する関数の宣言
Declare Function GetWindowRect Lib "user32.dll" _
(ByVal hWnd As Long, ByVal lpRect As RECT) As Long
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

[実行部]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim strWindowClassName As String
Dim lngWindowHandle As Long
Dim udtWindowRect As RECT
Dim lngWin32apiResultCode As Long
strWindowClassName = "Notepad"
lngWindowHandle = FindWindow(strWindowClassName, vbNullString)
' ウィンドウの境界長方形の寸法を取得
lngWin32apiResultCode = GetWindowRect(lngWindowHandle, udtWindowRect)
' ウィンドウの境界長方形の寸法を表示
With udtWindowRect
Debug.WriteLine("(" & .left & "," & .top & ")-" & "(" & .right & "," & .bottom & ")")
End With

End Sub

ちなみにハンドルは、値が入っております。GetWindowTextなどはこのハンドルで
うまく動きますのでRectに問題がありそうな気がするのですが……


どなたか原因のわかる方がおられましたら、ご教唆くださいますようお願い致します。
次のように修正すると期待通り動作するようです。

' .NETでLongは64ビットなので、
' Long -> Int32
Structure RECT
Public left As Int32
Public top As Int32
Public right As Int32
Public bottom As Int32
End Structure

' .NETでLongは64ビットなので、
' Long -> Int32
' RECTのアドレス渡しをするために
' ByVal lpRect As RECT -> ByRef lpRect As RECT
Declare Function GetWindowRect Lib "user32.dll" _
(ByVal hWnd As Int32, ByRef lpRect As RECT) As Int32
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Int32
おお!
申し訳ありません。金曜日からの案件です。大変ありがとうございました。
ByRef見逃しながら、Long Integer intPtrなどに代えてパニクってました。
不勉強この上なく申し訳ありません。

かつどん拝 _(__)_[貢物]
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板