Page 1 sur 1

Qui peut me renseigner ??

Publié : dim. 06/juin/2004 17:03
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 :)

Publié : dim. 06/juin/2004 17:05
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.

Publié : dim. 06/juin/2004 17:21
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 :)

Publié : dim. 06/juin/2004 17:36
par fweil
ben l'exécutable temporaire c'est lui qui lance la fenêtre ... non ?

Publié : dim. 06/juin/2004 17:43
par Heis Spiter
a côté de la plaque Fweil ;) :lol:

Publié : dim. 06/juin/2004 18:13
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.

Publié : dim. 06/juin/2004 18:36
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 :)

Publié : dim. 06/juin/2004 18:53
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

Publié : dim. 06/juin/2004 18:59
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 :)