[.NET 2] APi : Recupérer titre de la fenetre active
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008
-
7 avril 2007 à 12:26
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008
-
8 avril 2007 à 10:29
Bonjour,
Je voudrais récupérer le titre de la fentre windows active mais j'ai une erreur :
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByRef hwnd As Long, ByRef lpString As String, ByRef cch As Long) As Long
Dim a As Long = GetForegroundWindow
Dim Titre As String = ""
Dim L As Long = GetWindowText(a, Titre, 256) 'L retourne la longueur de la chaîne,Titre retourne le titre de la fenêtre.
Mais dans la variable "Titre", y'a un string en chinois !
De plus, j'ai modifier la déclaration de l'API avec des Byref au lieu des Byval car sinon j'ai :
Un appel à la fonction PInvoke 'Copy Files!Copy_Files.Form1::GetWindowText' a déséquilibré la pile. Cela peut se produire, car la signature PInvoke managée ne correspond pas à la signature cible non managée. Vérifiez que la convention d'appel et les paramètres de la signature PInvoke correspondent à la signature non managée cible.
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008 7 avril 2007 à 17:47
Non c'est pas GetWindowsDirectory car ca c'est pour récupérer le path de la fenetre qui s'execute en ce moment (donc mon programme) or moi je veux le path de la fenetre qui à le focus ! donc en fonction de son Handle.... et je trouve toujours pas le bon API ...
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008 7 avril 2007 à 21:08
ok merci ca marche now je voudrais savoir pour cette API GetModuleFileNameEx qu'est ce que je dois mettre en Byval et en ByRef... De plus, pourrais tu m'expliquer la différence ?
Merci
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 7 avril 2007 à 21:22
ByVal on passe la valeur, ByRef on passe l'adresse. Sera donc ByRef quand la fonction DLL attend un pointeur.
GetModuleFileName suffisant, pas besoin de la version Ex.
Mets GetModuleFileName dans la zone de recherche plus haut et tu trouveras des exemples.
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008 7 avril 2007 à 23:49
Salut,
J'ai un problème GetModuleFileName retourne 0 et j'ai rien dans le string....
Code :
'Déclaration :
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Integer, ByRef lpdwProcessId As Integer) As Integer
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer
Const PROCESS_QUERY_INFORMATION As Integer = &H400
Const PROCESS_VM_READ As Integer = &H10
Const PROCESS_ALL_ACCESS As Integer = &H1F0FFF
Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Integer, ByVal lpFileName As String, ByVal nSize As Integer) As Integer
Dim a As Integer = GetForegroundWindow 'récupère le handle de la fenetre
Dim result As New Integer
GetWindowThreadProcessId(a, result) 'récupère dans "result" l'ID du process
Dim hprocess As Integer = OpenProcess(PROCESS_ALL_ACCESS, CInt(False), result) 'ouvre le process
Dim XXX As String
XXX = Space(200)
GetModuleFileName(hprocess, XXX, 1024) 'récupère le chemin de la fenetre
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008 8 avril 2007 à 10:29
Re,
Je suis en VB.NET donc c'est bien des Integer (je m'etais deja fait avoir ^^)
SInon idem ca amrche pas avec GetModuleFileNameEx mais j'ai une erreur cette fois :
Exception runtime levée : System.EntryPointNotFoundException - Impossible de trouver le point d'entrée 'GetModuleFileNameEx' dans la DLL 'PSAPI.DLL'.
Code :
Dim XXX As String
XXX = Space(200)
GetModuleFileNameEx(hprocess, 0, XXX, 1024) 'récupère le chemin de la fenetre
Si j'inverse le 0 et le hprocess, c'est pareil j'ai une erreur... De plus, hprocess n'est pas nul...