2017-01-04 8 views
0

私はVBAでOutlookにアプリケーションを書きましたが、今度は別のアプリケーションにするためにVB.netで再度書きたいと思います。 私は答えを見つけることができなかった特定の問題があります - Outlookのエクスプローラで移動するにはエクスプローラを起動し、キーを送信してフォームを再びアクティブ化する手順を書いたのです。 Visual Studioでアプリケーションを起動すると、この手順は完璧に動作しますが、VSを閉じてEXEを実行すると、Outlookエクスプローラがアクティブにならず、タスクバーで点滅しているだけで、sendkeyが機能せず、次の電子メールが選択されません。コードは次のとおりです。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では、[デバッグなし]で[デバッグなし]を実行してください。これは実行可能ファイルを実行するのと同じでなければなりませんが、起動後にデバッガをアタッチして(デバッグメニューの「プロセスにアタッチ」)、手がかりにつながるかどうかを確認できます.....

+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() 

おかげで);以下のコードで)

関連する問題