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
Auriez vous une piste à me proposer ? Car là je dosi avouer que je ne sais plus trop quoi tester ...
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
Partager