2017-07-20 17 views
0

Visual Studio 2015を使用してOutlook 2016用のアドインを作成しています。ビルトインの[新規メール]タブにボタンを追加しました。クリックすると、件名の末尾に「unencrypt」という単語が追加され、電子メールが送信されます。VB .NET Outlook 2016アドインの件名行

これは、ユーザーが件名を入力した後に件名フィールドのタブを外していれば問題ありません。しかし、あなたが件名を入力してすぐにボタンをクリックすると、それは件名を抹消し、それを「暗号解除」に置き換えます。

しかし、私はデバッグでステップスルーすればうまくいきます - それは、件名からタブアウトしていなくても既存のテキストを保持します。私はメールアイテムのサブジェクトプロパティを更新するのに何らかの遅延があると考えましたが、手動で20秒の遅延を入れました。デバッグ時にステップスルーしていなければ、件名を一掃しました。

私はここに迷っています。件名のテキストボックス自体を確認する方法はありますか?ユーザーがタブを外していない場合でもテキストを取得するための他の方法はありますか?

助けていただけたら幸いです!

Private Sub Button1_Click(sender As Object, e As RibbonControlEventArgs) Handles Button1.Click 
    ' Get the Application object 
    Dim application As Outlook.Application = Globals.ThisAddIn.Application 

    ' Get the active Inspector object and check if is type of MailItem 
    Dim inspector As Outlook.Inspector = application.ActiveInspector() 
    Dim mailItem As Outlook.MailItem = TryCast(inspector.CurrentItem, Outlook.MailItem) 
    If mailItem IsNot Nothing Then 
     If mailItem.EntryID Is Nothing Then 
      If Not IsNothing(mailItem.Subject) AndAlso ((mailItem.Subject.Contains(" unencrypt")) OrElse (mailItem.Subject.Contains("unencrypt "))) Then 
       mailItem.Subject = mailItem.Subject 
      'ElseIf IsNothing(mailItem.Subject) Then 
       'System.Threading.Thread.Sleep(20000) 
       'mailItem.Subject = mailItem.Subject + " unencrypt" 
      Else 
       mailItem.Subject = mailItem.Subject + " unencrypt" 
      End If 
      If Not IsNothing(mailItem.To) AndAlso mailItem.To.ToString().Trim <> "" Then 
       mailItem.Send() 
      Else 
       MessageBox.Show("We need to know who to send this to. Make sure you enter at least one name.", "Microsoft Outlook", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) 
      End If 
     End If 
    End If 
End Sub 

編集:私は、必要な場所 ドミトリーの答えは私を得たが、WindowsのAPIに精通していない他の誰のために、私は以下のコードを追加して、単純に代わりmailItemを使用しての私の元のコードからGetSubject機能と呼ばれます。 Subjectプロパティ。

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ 
Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, _ 
             ByVal childAfter As IntPtr, _ 
             ByVal lclassName As String, _ 
             ByVal windowTitle As String) As IntPtr 
End Function 
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ 
Private Shared Function FindWindow(ByVal lclassName As String, _ 
            ByVal lWindowName As String) As IntPtr 
End Function 
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ 
Private Shared Function GetWindowText(ByVal hWnd As IntPtr, _ 
             ByVal lpString As StringBuilder, _ 
             ByVal nMaxCount As Integer) As Integer 
End Function 
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ 
Private Shared Function GetWindowTextLength(ByVal hwnd As IntPtr) As Integer 
End Function 

Private Function GetSubject(inspector As Outlook.Inspector) As String 
    Try 
     Dim inspectorHandle As IntPtr = FindWindow("rctrl_renwnd32", inspector.Caption) 
     Dim windowLevel2Handle As IntPtr = FindWindowEx(inspectorHandle, IntPtr.Zero, "AfxWndW", "") 
     Dim windowLevel3Handle As IntPtr = FindWindowEx(windowLevel2Handle, IntPtr.Zero, "AfxWndW", "") 
     Dim windowLevel4Handle As IntPtr = FindWindowEx(windowLevel3Handle, IntPtr.Zero, "#32770", "") 
     Dim SubjectHandle As IntPtr = FindWindowEx(windowLevel4Handle, IntPtr.Zero, "Static", "S&ubject") 
     Dim SubjectTextBoxHandle As IntPtr = FindWindowEx(windowLevel4Handle, SubjectHandle, "RichEdit20WPT", "") 
     Dim length As Integer = GetWindowTextLength(SubjectTextBoxHandle) 
     Dim sb As New StringBuilder(length + 1) 
     GetWindowText(SubjectTextBoxHandle, sb, sb.Capacity) 

     Return sb.ToString() 
    Catch 
     Return "" 
    End Try 

End Function 

答えて

0

重要な部分は、OOMが変更を認識するために、対象の編集ボックスがフォーカスを失う必要があることです。

アクセシビリティAPIまたはraw Windows APIを使用してエディットボックスの内容にアクセスすることも、メッセージ本文エディタなどの他のインスペクタコントロールにフォーカスを当てることもできます。

+0

私はWindows APIの完全な初心者ですが、Spy ++は私に必要なものを手に入れることができました。ポインタありがとう! –

関連する問題