thonyboy
Messages postés165Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention16 février 2011
-
8 juil. 2009 à 12:48
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
8 juil. 2009 à 14:37
Bonjour
Voila je galere depuis 2 jours a tenter de mettre l'appli outlook en avant plan et lui donner le focus
Voici ce que j'ai écrit et qui malheureusement ne fonctionne pas. (Mon appli perd le focus, mais outlook n'est pas affiché au premier plan)
Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal IntPtr) As Boolean
Declare Auto Function FindWindow Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Sub activeappli()
Dim fenetre As IntPtr
Dim ok As Boolean
' On recherche tous les process de l'utilisateur
For Each proc In Process.GetProcesses
Debug.Print(proc.ProcessName)
' Si le nom du process est outlook
If LCase(proc.ProcessName) = "outlook" Then
' On recupere le handle de la fenetre a partir du titre de la fenetre
fenetre = FindWindow(Nothing, proc.MainWindowTitle)
' je n'ai pas trop compris si c'était nécéssaire....
Call SetWindowPos(fenetre, HWND_TOPMOST, 0, 0, 800, 600, FLAGS)
' On passe l'appli en premier plan NE MARCHE PAS
ok = SetForegroundWindow(fenetre)
' ??
SetWindowPos(fenetre, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
End If
Next
End sub
Donc voila, si quelqu'un pouvait me donner un coup de pouce avant que je ne me jete par la fenetre....
Ha oui, je suis obligé de passer par la logique du process car le titre de la fentre outlook n'est pas forcément connu et dépend du dossier outlook qui est ouvert
(ex Outlook - Boîte de réception ou Outlook - Tâches etc)
Donc mon idée est
1/ Je liste les process en cours
2/ Si le process est égal outlook je recupere le nom de la fenetre
3/ J'active cette fenetre
thonyboy
Messages postés165Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention16 février 2011 8 juil. 2009 à 14:26
Je répond à moi-meme
Le probleme semble venir des déclarations
Si je déclare ainsi
Declare Function SetActiveWindow Lib "user32" Alias "SetActiveWindow" (ByVal hwnd As Long) As Long
Declare Function ShowWindow Lib "user32" Alias "ShowWindow" ( ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long
Mon code fonctionne. J'ai un peu de mal a comprendre pourquoi dans l'aide de visual studio ils disent de déclarer avec des Intptr alors que ca ne fonctionne pas....
Bref et j'ai réécri mon code pour l'optimiser
Dim Outlook() As Process = Process.GetProcessesByName("Outlook")
If Outlook.Length > 0 Then
SetActiveWindow(Outlook(0).MainWindowHandle)
SetForegroundWindow(Outlook(0).MainWindowHandle)
End If
thonyboy
Messages postés165Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention16 février 2011 8 juil. 2009 à 14:36
Ha mais non
Si je fais comme toi
Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal IntPtr) As Boolean
Ca ne fonctionne pas ! Outlook ne vient pas au premier plan
Si je fais comme ca
Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long
Ca fonctionne !
Je ne comprends toujours pas pourquoi il existe tant de déclarations differentes que ce soit dans l'aide, sur msdn, ou des sites et forums spécialisés.