2017-01-04 2 views
0

VBA에서 Outlook에 응용 프로그램을 작성 했으므로 이제 VB.net에서 다시 작성하여 독립 응용 프로그램으로 만들려고합니다. 특정 문제가 있습니다. 답변을 찾을 수 없습니다. Outlook Express 탐색기에서 탐색하려면 탐색기를 활성화하고 키를 보내고 양식을 다시 활성화하는 절차를 작성했습니다. Visual Studio에서 응용 프로그램을 시작할 때이 절차는 완벽하게 작동하지만 VS를 종료하고 단일 EXE를 실행하면 Outlook 탐색기가 활성화되지 않습니다 - 작업 표시 줄에서만 깜박이고 다음에 보내기 키가 작동하지 않고 다음 전자 메일이 선택되지 않습니다. 다음은 코드입니다.VB.net에서 창 활성화

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

     Dim app As Type = Type.GetTypeFromProgID("Outlook.Application") 
     Dim oApp As Object = Activator.CreateInstance(app) 

     oApp.ActiveExplorer.Activate() 

     SendKeys.Send("{Down}") 

     Me.Activate() 

    End Sub 

아무도 도와 줄 수 있습니까?

+0

당신은 그것에게 시간을 좀하려고 한 예에 Thread.sleep은'Activate' 후 일부 금액을 검색 하시나요? –

답변

0

Visual Studio 내에서 디버그 메뉴의 "디버깅하지 않고 시작"을 시도하십시오. 이것은 실행 파일을 실행하는 것과 동일해야하지만 시작할 때 디버거 ("디버그 메뉴에 Attach to Process")를 붙이면 단서가 생기는 지 알 수 있습니다 .....

+0

아니요, 문제없이 작동합니다. VS 실행 및 단일 exe 응용 프로그램을 시작할 때 그것을 완벽하게 작동하는 것으로 나타났습니다. VS가 실행되지 않는 경우에만 문제가 발생합니다. – dexter910

+0

약간의 시간 동안 'Thread.Sleep'을 사용하려고 했습니까? –

+0

오늘 시도했지만 작동하지 않았습니다. 나는 코드의 시작 부분에서 Outlook을 최소화 할 때 작업 (thread.sleep도 없음)이 작동 함을 발견했습니다. 그러면 Outlook 탐색기가 활성화됩니다. 이 창이 최소화되지 않은 경우 응용 프로그램은 활성 상태라고 가정하여 다시 활성화 할 필요가 없습니다. – dexter910

0

해냈어. 단서

Dim p As Process 
    Dim window_name As String 

    For Each p In Process.GetProcessesByName("outlook") 
     window_name = p.MainWindowTitle.ToString 
    Next 

    AppActivate(window_name) 

    Thread.Sleep(100) 

    SendKeys.Send("{Up}") 

    Me.Activate() 

감사); 아래 코드)