サーバー上で特定の [OK] ダイアログを探すタイマーが winforms にあります (メモリ不足のサード パーティ製アプリケーションで [OK] をクリックしてから再起動します。他に回避策はありません)。したがって、サーバーとリモートデスクトップウィンドウをリモートデスクトップすると、アクティブになります(実際のリモートデスクトップウィンドウはアクティブであり、クリックする必要がある[OK]を持つ実際のウィンドウではありません。 OK、動作します)、プログラムは正常に動作します。OKのウィンドウを見つけたら、OKボタンをクリックします。リモート デスクトップではない場合、またはリモート デスクトップ ウィンドウがアクティブでない (または選択されていない) 場合、ウィンドウが検出され、[OK] ボタンが表示されますが、[OK] ボタンをクリックできません。
そこで、タイマーで [OK] をクリックするために使用しているものを次に示します。
Private Sub TimerCloseOK_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerCloseOK.Tick
Dim dialogBoxText As String = "My Program - Application Error"
Dim hwnd As IntPtr = FindWindow("#32770", dialogBoxText)
Dim WindowID As String = hwnd.ToString
Dim buttonTitle As String
buttonTitle = "OK"
Dim dialogButtonHandle As IntPtr = FindWindowEx(hwnd, IntPtr.Zero, "Button", "OK")
If Len(WindowID) > 0 And Integer.Parse(WindowID) <> 0 Then
'CLICK OK
SendMessage(dialogButtonHandle, BM_CLICK, 1, 0)
mbCounter = mbCounter + 1
Application.DoEvents()
lCount.Text = mbCounter
End If
End Sub