Bonjour à tous,
Voilà je tentes actuellement de faire quelque chose qui est sensé être très simple ...

Dans une application lors d'un click sur un bouton, je dois afficher une boîte de dialogue 'GetSelectNamesDialog' de Outlook via l'interop (Outlook 2010). Cette boîte de dialogue doit être alors amenée au premier plan.
A noter que cette boîte de dialogue ne peut être affichée que si une instance de Outlook tourne sur le poste. C'est donc bien l'application Outlook qui doit être amenée au premier plan, et par conséquent la boite de dialogue en question.

Ensuite lorsque cette boite de dialogue est fermée, je dois remettre la fenêtre de mon application au premier plan.

Le gros problème que j'ai est que la fenêtre de mon application ne semble par pouvoir reprendre la main et s'afficher au premier plan. La fenêtre clignote dans la barre des tâches ...

J'avais initialement testée avec la fonction Api SetForegroundWindows mais il semblerait que celle ci ai été modifié afin d'éviter justement le fait de pouvoir "voler" le focus ... Et que celle ci ai été modifiée par la méthode Activate()

Voici le code actuel auquel je suis arrivé, c'est à dire avec une autre fonction API

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
Dim appOutlook As Outlook.Application
            appOutlook = CType(CreateObject("Outlook.Application"), Outlook.Application)
            Dim snd As Outlook.SelectNamesDialog = appOutlook.Session.GetSelectNamesDialog()
                                    snd.SetDefaultDisplayMode(Outlook.OlDefaultSelectNamesDisplayMode.olDefaultMembers)
 
            Dim ProcessIdOutlook As IntPtr = IntPtr.Zero
 
            Dim ProcessIdApplic As IntPtr = IntPtr.Zero
 
            Dim processes As Process()
            processes = Process.GetProcesses()
            For Each proc As Process In processes
                If proc.ProcessName.ToLower.Contains("my_application") Then
                    ProcessIdApplic = proc.MainWindowHandle
                ElseIf proc.ProcessName.ToLower.Contains("outlook") Then
                    ProcessIdOutlook = proc.MainWindowHandle
                End If
 
            Next
 
            Me.TopMost = False
            If appOutlook.ActiveExplorer Is Nothing = False Then appOutlook.ActiveExplorer.Activate()
            If appOutlook.ActiveInspector Is Nothing = False Then appOutlook.ActiveInspector.Activate()
 
 
 
            If Not ProcessIdOutlook = IntPtr.Zero Then             
                SwitchToThisWindow(ProcessIdOutlook, True)              
                'SetForegroundWindow(ProcessIdOutlook)
            End If
 
 
            Dim rep As Boolean = snd.Display
            Me.TopMost = True
 
            'Me.BringToFront()
            Me.Activate()
 
            If Not ProcessIdApplic = IntPtr.Zero Then                
                SwitchToThisWindow(ProcessIdApplic, True)
                'SetForegroundWindow(ProcessIdApplic)
            End If
Auriez vous une piste à me proposer ? Car là je dosi avouer que je ne sais plus trop quoi tester ...