Qui peut me renseigner ??

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Qui peut me renseigner ??

Message par Chris »

J'ai fait un petit code, parce que je ne comprends pas un truc:

En principe, la fonction suivante:

Code : Tout sélectionner

GetWindowModuleFileName_(Handle,@Buffer, MaxChar)
devrait retourner le nom de l'éxécutable qui a lancé la fenêtre correspondant au handle, et là, ce n'est pas le cas !

Quelqu'un sait pourquoi ?

J'ai fait ce petit code pour tester:

Code : Tout sélectionner

#jaPBe = 1
#PureBasic = 2

Buffer.s = Space(#MAX_PATH)
Titre.s = Space(128)

;- Choix de l'éditeur
;Editeur = #jaPBe                  ; Si on utilise jaPBe
Editeur = #PureBasic              ; Si on utilise PureBasic

If Editeur = #jaPBe
  Class.s = "WindowClass_7"
  Title.s = "jaPBe"
ElseIf Editeur = #PureBasic
  Class.s = "WindowClass_0"
  Title.s = "PureBasic - <New>"
EndIf

; Détection du Handle de la fenêtre principale
hMain = FindWindow_(Class,Title)

; Pour vérifier que le handle correspond à la bonne fenêtre, on récupère
; le titre, on le change pendant 1 seconde, puis on remet le titre d'origine
GetWindowText_(hMain,@Titre,128)  ; Récupère le titre
SetWindowText_(hMain,"Coucou")    ; Le change
Delay(1000)                       ; Attends 1 seconde
SetWindowText_(hMain,Titre)       ; Remet le titre d'origine

; On récupère le nom de l'éxécutable correspondant à la fenêtre
GetWindowModuleFileName_(hMain,@Buffer,#MAX_PATH)

Debug hMain   ; Handle de l'éditeur
Debug Buffer  ; Nom de l'éxécutable
Pour tester que je trouve bien le bon handle, celui de la fenêtre, je change le titre pendant une seconde, et ça fonctionne.
Donc, pourquoi je ne récupères pas le nom de l'executable qui crée la fenêtre, c'est à dire celui de l'éditeur utilisé, mais le nom du fichier temporaire créé par le programme? :?

Chris :)
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Le programme qui est lancé est bien le temporaire et pas autre chose. C'est pour ça que tu obtiens cette réponse.
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

fweil a écrit :Le programme qui est lancé est bien le temporaire et pas autre chose. C'est pour ça que tu obtiens cette réponse.
Ben oui, ça, j'avais remarqué!
The GetWindowModuleFileName function retrieves the full path and file name of the module associated with the specified window handle.
La fonction GetWindowModuleFileName retrouve le chemin complet et le nom de fichier du module associé au handle de la fenêtre spécifiée.

La question, c'est Pourquoi la fonction me renvoie le chemin du fichier temporaire, alors que je lui donne le handle de la fenêtre de l'éditeur?

Chris :)
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

ben l'exécutable temporaire c'est lui qui lance la fenêtre ... non ?
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

a côté de la plaque Fweil ;) :lol:
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Nan pas à côté de la plaque ...

Je regarde toutes les manières possibles, mais si je pointe l'éditeur avec un GetWindowFromPoint et que je regarde le GetModuleFileName ou le GetWindowModuleFileName, ça me donne toujours nu exécutable en cours dans PureBasic\Compilers\ ... j'y peux rien mais c'est comme ça.

Il faudrait sans doute retrouver le handle de PureBasic.exe à partir de son PID. Mais là j'ai pas la réponse toute faite.
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Je viens d'essayer en creant un executable sur le bureau, avec un messagerequester(). C'est pareil!

Ca change bien le titre de l'éditeur, ce qui prouve que le handle est bien celui de la fenêtre, mais l'adresse retournée est celle de l'exe sur le bureau. :x

C'est bizarre, ce truc !

Chris :)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

j'ai fait ceci et je n'est aucune réponse

Code : Tout sélectionner

RunProgram("notepad.exe")
Delay(1000)
WinID = GetForegroundWindow_()

Texte.s = Space(255)
GetWindowModuleFileName_(WinID, @Texte.s, 255)
MessageRequester("", Texte, 0)
d'ou la suggestion suivante, il y aurait pas encore un sal..erie de protection à la microsoft qui empêche la fonction de marcher sur un autre programme qui celui qui appelle ?
c'est déjà le cas sur beaucoup de fonction ... à ça à le don de m'énerver d'ailleurs, voir des abérations pareilles pfffff
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Non, je ne crois pas. Quand il y a des droits d'accès, c'est indiqué dans le sdk. (En principe, mais bon..., on ne peut pas être sûr non plus!)

Chris :)
Répondre