エラー API関数DLLの実行時エラーを回避する
※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。
※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。
'GetActiveWindow 関数(Windows API) Declare Function GetActiveWindow Lib "user32" () As Long 'GetWindowRect 関数(Windows API) Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, _ lpRect As RECT) As Long 'ウィンドウを構成している四角形の各辺の長さを 'RECT データ構造体に設定します。 '無効なハンドルを渡すとエラーが発生します。 Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Const ERROR_INVALID_WINDOW_HANDLE As Long = 1400 Const ERROR_INVALID_WINDOW_HANDLE_DESCR As String _ = "無効なウィンドウ ハンドルです。" Sub PrintWindowCoordinates(hwnd As Long) ' ウィンドウの左、右、上、下の位置を ' ピクセル単位で出力します。 Dim rectWindow As RECT ' ウィンドウ ハンドルと空のデータ構造体を渡します。 ' 関数が 0 を返す場合は、エラーが発生しています。 If GetWindowRect(hwnd, rectWindow) = 0 Then ' 無効なハンドルを渡したことにより、エラーが発生した場合は ' LastDLLError を調べ、ダイアログ ボックスを表示します。 Debug.Print "1." & Err.LastDllError If Err.LastDllError = ERROR_INVALID_WINDOW_HANDLE Then MsgBox ERROR_INVALID_WINDOW_HANDLE_DESCR, _ Title:="エラー !" Debug.Print "2." & ERROR_INVALID_WINDOW_HANDLE_DESCR End If Else Debug.Print "Top:" & rectWindow.Top Debug.Print "Right:" & rectWindow.Right Debug.Print "Bottom:" & rectWindow.Bottom Debug.Print "Left:" & rectWindow.Left End If End Sub Private Sub APIGetError() Dim GAW As Long '正常処理 'アクティブ ウィンドウの座標を取得する 'GetActiveWindow 関数(Windows API) GAW = GetActiveWindow Debug.Print "アクティブウィンドウ座標:" & GAW Call PrintWindowCoordinates(GAW) 'アクティブウィンドウ座標:13175122 'Top:-4 'Right:1028 'Bottom:742 'Left:-4 Call PrintWindowCoordinates(GAW + 1) '1.1400 '2.無効なウィンドウ ハンドルです。 End Sub |
|
エラー情報の取得
|