2012-06-08 4 views
1

내 서버에서 특정 확인 대화 상자를 찾는 winforms 타이머가 있습니다 (메모리가 부족한 타사 응용 프로그램에서 확인을 클릭 한 다음 다시 시작합니다 - 주변에는 다른 작업이 없습니다). 따라서 원격 데스크톱과 서버를 원격 데스크톱 창이 활성화되어있을 때 (실제 원격 데스크톱 창이 활성화되어 있으며 클릭해야하는 확인 창이 아닙니다.) OK, 작동), 프로그램은 정상적으로 작동합니다. OK의 창을 찾은 다음 OK 버튼을 누릅니다. 원격 데스크톱이 없거나 원격 데스크톱 창이 활성화되지 않았거나 선택되어있는 경우 창을 찾고 확인 버튼을 찾았지만 확인 버튼을 클릭 할 수 없습니다. 이것에 대해WinAPI 확인을 클릭하십시오. 원격 데스크톱은 창이 활성화되어있을 때만 작동합니다.

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 
+0

입력 잠금 및 대부분의 입력 메커니즘은 세션이 잠겨 있거나 로그 아웃 할 때 작동하지 않습니다. 나는 이것에 대한 소스가 없지만 ClickYes 및 다른 유틸리티로 발생하는 것을 보았습니다. – Deanna

+0

부모에게 직접 BN_CLICKED 알림을 보냅니다. –

답변

0

무엇을 : 그래서 여기

내가 확인을 클릭하여 내 타이머에서 사용하고 무엇인가?

dim control1 as Control = Control.FromHandle(hwnd) 
dim button1 as Button = TryCast(control1, Button) 
If button1 IsNot Nothing Then button1.PerformClick() 

편집 : 프로젝트에 속하는 Windows.Forms.Button에 ButtonClick을 수행하도록 가정 (그렇지 않으면 Control.FromHandle도 유효한 핸들 아무 것도 반환하지 않습니다).

+0

아니요, 타사 응용 프로그램입니다. 그것은 내 프로젝트에 속하지 않습니다. API는 원격 데스크톱이 활성 상태 일 때 작동합니다 (로그인). – tonytux

관련 문제