OVH Cloud OVH Cloud

Nom de fenêtres "commençant par" ...

4 réponses
Avatar
Gloops
Bonjour tout le monde,

Je cherche le numéro d'une (ou des) fenêtre(s) dont le nom commence par
un intitulé donné. Cela peut donc donner lieu à deux séries de réponses.

En effet, ce à quoi je pense est l'appel de EnumWindows, en comparant
les débuts des noms de fenêtres reçus à l'intitulé fourni.

La première façon d'envisager le problème consiste à une descente dans
les entrailles de VB, en fait dans les questions de cours, pour trouver
la façon la plus élégante de passer une chaîne de caractères à la
fonction callback. La doc indique explicitement que la signature,
c'est-à-dire le nombre d'arguments et leur type, doit correspondre
exactement à la déclaration de EnumWindows, donc a priori pour les
arguments ça s'annonce mal, j'ai donc pensé initialiser une variable
globale dans le module. On pourrait incorporer l'appel à la callback
dans une fonction qui peut très bien avoir le début de nom de fenêtre en
argument, qui le passe en variable globale au module où se trouve la
callback et qui fait l'appel à la callback ensuite. Le but de ma
question est donc, d'abord de savoir si je viens de dire une bêtise plus
grosse que moi, puis de savoir si quelqu'un s'est déjà risqué à ce type
de gymnastique et aurait des points de repère pour éviter des bêtises en
route.

La deuxième façon d'envisager le problème est de recourir à une solution
moins capillotractée, malheureusement pour le moment je n'imagine pas le
début de cette solution. Pourtant, vu comme le problème est courant, si
une solution existe quelqu'un a bien dû la trouver.

4 réponses

Avatar
X
Bonjour,

Heu, je ne sais pas si j'ai compris, je comprends rarement, mais... j'ai
fait jadis un truc qui permet d'identifier et de fermer les processus (donc
les fenêtres), si ça peut te servir, ci-joint en fichier...

Le truc lance volontairement le bloc-notes, afin de pouvoir en démo le
fermer par le programme...

Et voici le code
-------------------------------

' form 1 : FermerProg
'
'OBJETS
' form 1 = list1 + text1 + list2 + text2 + commandButton1
' module 1
'
Option Explicit
'
Private Declare Function GetForegroundWindow Lib "user32" () As Long
'hwnd (handle de la forme)
'
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA"
_
(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As
Long
'
Private Declare Function EnumWindows Lib "user32" _
(ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
'
Private Declare Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) As Long
'
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'
Private Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As
Long
'
Dim handle As Long
'


Sub Form_Load()
Dim x As Long
Dim i As Long
Dim hwnd As Long
Dim chaine As String
'
List1.Clear
List2.Clear
'
' handle de cette forme
hwnd = GetForegroundWindow
List2.AddItem "handle de cette form = " & hwnd
'
'lance bloc-notes pour tester ensuite sa fermeture
x = Shell("NotePad.exe ", 1)
'
GetWindowsList
'
Text2 = List1.ListCount
'------------------------------------------------
For i = 0 To List1.ListCount - 1
chaine = Mid(List1.List(i), 12, 256)
chaine = Trim(chaine)
Text1 = Text1 & List1.List(i) & vbCrLf
If chaine = "Sans titre - Bloc-notes" Then
List2.AddItem chaine
handle = Mid(List1.List(i), 1, 8)
List2.AddItem "handle à fermer = " & handle
End If
Next i
End Sub


Sub Command1_Click() 'fermer
Dim H As Long
H = FindWindow(vbNullString, "Sans titre - Bloc-notes")
CloseWindow H
List2.AddItem "FERMER handle = " & H
End Sub


Private Function EnumWindowsProc(ByVal lgHwnd As Long, ByVal lgParam As
Long) As Long
Dim stTmp As String, lgTmp As Long, lgRet As Long
'
stTmp = Space$(120)
lgTmp = 119
lgRet = GetWindowText(lgHwnd, stTmp, lgTmp)
If Len(stTmp) > 1 And lgRet <> 0 Then
Form1.List1.AddItem Format(lgHwnd, "00000000") & " : " & stTmp
End If
EnumWindowsProc = 1
End Function


'MODULE
'
' module 1 : FermerProg
'
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA"
_
(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As
Long
'
Public Declare Function EnumWindows Lib "user32" _
(ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
'


Public Function GetWindowsList()
Dim lgRep As Long
'
stGetWindowsList = vbNullString
lgRep = EnumWindows(AddressOf EnumWindowsProc, 0)
End Function


Public Function EnumWindowsProc(ByVal lgHwnd As Long, ByVal lgParam As Long)
As Long
Dim stTmp As String, lgTmp As Long, lgRet As Long
'
stTmp = Space$(120)
lgTmp = 119
lgRet = GetWindowText(lgHwnd, stTmp, lgTmp)
If Len(stTmp) > 1 And lgRet <> 0 Then
Form1.List1.AddItem Format(lgHwnd, "00000000") & " : " & stTmp
End If
EnumWindowsProc = 1
End Function


--
Site ROMANS édités
http://www.manuscritdepot.com/a.joseph-attila-pusztay.1.htm
Site LOGICIELS
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
"Gloops" a écrit dans le message de news:

Bonjour tout le monde,

Je cherche le numéro d'une (ou des) fenêtre(s) dont le nom commence par
un intitulé donné. Cela peut donc donner lieu à deux séries de réponses.

En effet, ce à quoi je pense est l'appel de EnumWindows, en comparant
les débuts des noms de fenêtres reçus à l'intitulé fourni.

La première façon d'envisager le problème consiste à une descente dans
les entrailles de VB, en fait dans les questions de cours, pour trouver
la façon la plus élégante de passer une chaîne de caractères à la
fonction callback. La doc indique explicitement que la signature,
c'est-à-dire le nombre d'arguments et leur type, doit correspondre
exactement à la déclaration de EnumWindows, donc a priori pour les
arguments ça s'annonce mal, j'ai donc pensé initialiser une variable
globale dans le module. On pourrait incorporer l'appel à la callback
dans une fonction qui peut très bien avoir le début de nom de fenêtre en
argument, qui le passe en variable globale au module où se trouve la
callback et qui fait l'appel à la callback ensuite. Le but de ma
question est donc, d'abord de savoir si je viens de dire une bêtise plus
grosse que moi, puis de savoir si quelqu'un s'est déjà risqué à ce type
de gymnastique et aurait des points de repère pour éviter des bêtises en
route.

La deuxième façon d'envisager le problème est de recourir à une solution
moins capillotractée, malheureusement pour le moment je n'imagine pas le
début de cette solution. Pourtant, vu comme le problème est courant, si
une solution existe quelqu'un a bien dû la trouver.




begin 666 FermerProg.vbp
M5'EP93U%>&4-"D9O<FT]1F]R;3$N9G)M#0I2969E<F5N8V4]*EQ'>S P,#(P
M-#,P+3 P,# M,# P,"U#,# P+3 P,# P,# P,# T-GTC,BXP(S C+BY<+BY<
M+BY<+BY<+BY<+BY<+BY<5TE.1$]74UQS>7-T96TS,EQS=&1O;&4R+G1L8B-/
M3$;VUA=&EO;@T*36]D=6QE/4UO9'5L93$[($UO9'5L93$N8F%S#0I)
M8V]N1F]R;3TB1F]R;3$B#0I3=&%R='5P/2)&;W)M,2(-"D-O;6UA;F0S,CTB
M(@T*3F%M93TB4')O:F5T,2(-"DAE;'!#;VYT97AT240](C B#0I#;VUP871I
M8FQE36]D93TB,"(-"DUA:F]R5F5R/3$-"DUI;F]R5F5R/3 -"E)EþS:6]N
M5F5R/3 -"D%U=&]);F-R96UE;G1697(], T*4V5RõR4W5P<&]R=$9I;&5S
M/3 -"E9E<G-I;VY#;VUP86YY3F%M93TB4&5R<VB#0I#;VUP:6QA=&EO;E1Y
M<&4], T*3W!T:6UI>F%T:6]N5'EP93TP#0I&879O<E!E;G1I=6U0<FH=&TI
M/3 -"D-O9&56:65W1&5B=6=);F9O/3 -"DYO06QI87-I;F<], T*0F]U;F1S
M0VAE8VL], T*3W9E<F9L;W=#:&5C:STP#0I&;%!O:6YT0VAE8VL], T*1D1)
M5D-H96-K/3 -"E5N<F]U;F1E9$90/3 -"E-T87)T36]D93TP#0I5;F%T=&5N
M9&5D/3 -"E)E=&%I;F5D/3 -"E1H<F5A9%!E<D]B:F5C=#TP#0I-87A.=6UB
M97)/9E1H<F5A9',],0T*#0I;35,@5')A;G-A8W1I;õR70T*075T
,;U)E9G)E<V@],0T*
`
end

begin 666 FermerProg.vbw
M1F]R;3$@/2 T-"@L(# R+" L(#(R+" ,U+" T-S,L
C($,-"DUO9'5L93$@/2 #<L(#,Q+"!:#0H`
`
end

begin 666 Form1.frm
M5D524TE/3B U+C P#0I"96=I;B!60BY&;W)M($9O<FTQ( T*(" @0V%P=&EO
M;B @(" @(" @(#T@(" B1F]R;3$B#0H@("!#;&EE;G1(96EG:'0@(" @/2 @
M(#@V,C4-"B @($-L:65N=$QE9G0@(" @(" ](" @,#0H@("!#;&EE;G14
M;W @(" @(" @/2 @(#4W, T*(" @0VQI96YT5VED=&@@(" @(#T@(" X-#,P
M#0H@("!,:6YK5&]P:6,@(" @(" @/2 @(")&;W)M,2(-"B @(%-C86QE2&5I
M9VAT(" @(" ](" @.#8R-0T*(" @4V-A;&57:61T:" @(" @(#T@(" X-#,P
M#0H@("!"96=I;B!60BY497AT0F]X(%1E>'0Q( T*(" @(" @0F5G:6Y0<F]P
M97)T>2!&;VYT( T*(" @(" @(" @3F%M92 @(" @(" @(" @(#T@(" B0V]U
M<FEE<B!.97<B#0H@(" @(" @("!3:7IE(" @(" @(" @(" @/2 @(#D-"B @
M(" @(" @($-H87)S970@(" @(" @(" ](" @, T*(" @(" @(" @5V5I9VAT
M(" @(" @(" @(#T@(" T,# -"B @(" @(" @(%5N9&5R;&EN92 @(" @(" ]
M(" @," @("=&86QS90T*(" @(" @(" @271A;&EC(" @(" @(" @(#T@(" P
M(" @)T9A;'-E#0H@(" @(" @("!3=')I:V5T:')O=6=H(" @/2 @(# @(" G
M1F%L<V4-"B @(" @($5N9%!R;W!E<G1Y#0H@(" @("!(96EG:'0@(" @(" @
M(" @/2 @(#,Q,S4-"B @(" @($QE9G0@(" @(" @(" @(" ](" @,3(P#0H@
M(" @("!-=6QT:4QI;F4@(" @(" @/2 @("TQ(" G5')U90T*(" @(" @4V-R
M;VQL0F%R<R @(" @(#T@(" R(" G5F5R=&EC86P-"B @(" @(%1A8DEN9&5X
M(" @(" @(" ](" @- T*(" @(" @5&5X=" @(" @(" @(" @(#T@(" B1F]R
M;3$N9G)X(CHP,# P#0H@(" @("!4;W @(" @(" @(" @(" @/2 @(#,W,C -
M"B @(" @(%=I9'1H(" @(" @(" @(" ](" @.# U-0T*(" @16YD#0H@("!"
M96=I;B!60BY#;VUM86YD0G5T=&]N($-O;6UA;F0Q( T*(" @(" @0V%P=&EO
M;B @(" @(" @(#T@(" B1F5R<FUE(@T*(" @(" @2&5I9VAT(" @(" @(" @
M(#T@(" T.34-"B @(" @($QE9G0@(" @(" @(" @(" ](" @-S(P, T*(" @
M(" @5&%B26YD97@@(" @(" @(#T@(" S#0H@(" @("!4;W @(" @(" @(" @
M(" @/2 @(#@P-# -"B @(" @(%=I9'1H(" @(" @(" @(" ](" @.3<U#0H@
M("!%;F0-"B @($)E9VEN(%9"+DQI<W1";W@@3&ES=#(@#0H@(" @("!(96EG
M:'0@(" @(" @(" @/2 @(#$R,S -"B @(" @($QE9G0@(" @(" @(" @(" ]
M(" @,3(P#0H@(" @("!486));F1E>" @(" @(" @/2 @(#(-"B @(" @(%1O
M<" @(" @(" @(" @(" ](" @-S X, T*(" @(" @5VED=&@@(" @(" @(" @
M(#T@(" V.#4U#0H@("!%;F0-"B @($)E9VEN(%9"+E1E>'1";W@@5&5X=#(@
M#0H@(" @("!(96EG:'0@(" @(" @(" @/2 @(#,W-0T*(" @(" @3&5F=" @
M(" @(" @(" @(#T@(" W,C P#0H@(" @("!486));F1E>" @(" @(" @/2 @
M(#$-"B @(" @(%1E>'0@(" @(" @(" @(" ](" @(E1E>'0R(@T*(" @(" @
M5&]P(" @(" @(" @(" @(#T@(" W,#@P#0H@(" @("!7:61T:" @(" @(" @
M(" @/2 @(#DW-0T*(" @16YD#0H@("!"96=I;B!60BY,:7-T0F]X($QI<W0Q
M( T*(" @(" @2&5I9VAT(" @(" @(" @(#T@(" S,S<U#0H@(" @("!,969T
M(" @(" @(" @(" @/2 @(#$R, T*(" @(" @4V]R=&5D(" @(" @(" @(#T@
M(" M,2 @)U1Rd-"B @(" @(%1A8DEN9&5X(" @(" @(" ](" @, T*(" @
M(" @5&]P(" @(" @(" @(" @(#T@(" Q,C -"B @(" @(%=I9'1H(" @(" @
M(" @(" ](" @.# U-0T*(" @16YD#0I%;F0-"D%T=')I8G5T92!60E].86UE
M(#T@(D9O<FTQ(@T*071T<FEBqE(%9"7T=L;V)A;$YA;653<&%C92 ]($9A
M;'-E#0I!='1R:6)U=&)?0W)E871A8FQE(#%L<V4-"D%T=')I8G5T
M92!60E]0<F5D96-L87)E9$ED(#')U90T*071T<FEBqE(%9"7T5X<&]S
M960@/2!&86QS90T*#0H@( T*(" G(&9O<FT@,2 Z($9E<FUE<E!R;V<-"B @
M)PT*(" G3T)*1513#0H@("<@9F]R;2 Q(#T@;&ES=#$@*R!T97AT,2 K(&QI
M<W0R("L@=&5X=#(@*R!C;VUM86YD0G5T=&]N,0T*(" G(&UO9'5L92 Q#0H@
M(" @)PT*("!/<'1I;;&EC:70-"B @)PT*("!0<FEV871E($1E8VQA
M;]R96=R;W5N9%=I;F1O=R!,:6(@(G5S97(S,B(@
M*",@3&]N9PT*(" G:'=N9" H:&%N9&QE(&1E(&QA(&9O<FUE*0T*(" G
M#0H@(%!R:79A=&&5C;&%R92!&=6YC=&EO;B!'9717:6YD;WI7AT($QI
M8B B=7-E<C,R(B!!;&EA<R B1V5T5VEN9&]W5&5X=$$B(%-"B @(" H0GE6
M86P@:'=N9"!!<R!,;VYG+"!">59A;"!L<%-T<FEN9R!!<R!3=')I;F<L($)Y
M5F%L(&-C:"!!<R!,;VYG*2!!<R!,;VYG#0H@(" @)PT*("!0<FEV871E($1E
M8VQA;;5=I;F1O=W,@3&EB(")U<V5R,S(B(%-"B @
M(" H0GE686P@;'!%;G5M1G5N8R!!<R!,;VYG+"!">59A;"!L4&%,@
M3&],@3&]N9PT*(" @("<-"B @4')I=F%T92!$96-L87)E($9U;F-T
M:6]N($-L;W-E2&%N9&QE($QI8B B:V5R;F5L,S(B("@@7PT*(" @($)Y5F%L
M(&A/,@3&],@3&]N9PT*(" @("<-"B @4')I=F%T92!$
M96-L87)E($9U;F-T:6]N($9I;F17:6YD;W<@3&EB(")U<V5R,S(B($%L:6%S
M(")&:6YD5VEN9&]W02(@*$)Y5F%L(&QP0VQA<W-.86UE($%S(%-T<FEN9RP@
M0GE686P@;'!7:6YD;W=.86UE($%S(%-T,@3&]N9PT*(" G#0H@
M(%!R:79A=&&5C;&%R92!&=6YC=&EO;B!#;&]S95=I;F1O=R!,:6(@(G5S
M97(S,B(@*$)Y5F%L(&AW;,@3&],@3&]N9PT*(" G#0H@($1I
M;2!H86YD;&,@3&]N9PT*(" G#0H@( T*(" -"E-U8B!&;W)M7TQO860H
M*0T*("!$:6T@>"!!<R!,;VYG#0H@($1I;2!I($%S($QO;F<-"B @1&EM(&AW
M;,@3&]N9PT*("!$::6YE($%S(%-T<FEN9PT*(" G#0H@($QI
M<W0Q+D-L96%R#0H@($QI<W0R+D-L96%R#0H@("<-"B @)R!H86YD;&&4@
M8V5T=&]R;64-"B @:'=N9" ]($=E=$9O<F5G<F]U;F17:6YD;W<-"B @
M3&ES=#(N061D271E;2 B:&%N9&QE(&1E(&-E='1E(&9O<FT@/2 B("8@:'=N
M9 T*(" G#0H@("=L86YC92!B;&]C+6YO=&5S('!O=7(@=&5S=&5R(&5N<W5I
M=&4@<V$@9F5R;65T=7)E#0H@('@@/2!3:&5L;"@B3F]T95!A9"YE>&4@(BP@
M,2D-"B @)PT*("!'9717:6YD;W=S3&ES= T*(" G#0H@(%1E>'0R(#&ES
M=#$N3&ES=$-O=6YT#0H@("<M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2T-"B @1F]R(&D@/2 P(%1O($QI<W0Q+DQI
M<W1#;W5N=" M(#$-"B @("!C:&%I;F4@/2!-:60H3&ES=#$N3&ES="AI*2P@
M,3(L(#(U-BD-"B @("!C:&%I;F4@/2!4<FEM*&-H86EN92D-"B @("!497AT
M,2 ](%1E>'0Q("&ES=#$N3&ES="AI*2 F('9B0W),*(" @($EF(&-H
M86EN92 ](")386YS('1I=')E(";W1E<R(@5&AE;@T*(" @(" @
M3&ES=#(N061D271E;2!C:&%I;F4-"B @(" @(&AA;F1L92 ]($UI9"A,:7-T
M,2Y,:7-T*&DI+" Q+" X*0T*(" @(" @3&ES=#(N061D271E;2 B:&%N9&QE
M(. @9F5R;65R(#T@(B F(&AA;F1L90T*(" @($5N9"!)*("!.97AT(&D-
M"D5N9"!3=6(-"@T*#0I3=6(@0V]M;6%N9#%?0VQI8VLH*2 G9F5R;65R#0H@
M($1I;2!(($%S($QO;F<-"B @2" ]($9I;F17:6YD;W<H=F).=6QL4W1R:6YG
M+" B4V%N<R!T:71R92 M($)L;V,M;F]T97,B*0T*("!#;&]S95=I;F1O=R!(
M#0H@($QI<W0R+D%D9$ET96T@(D9%4DU%4B!H86YD;&4@/2 B(" T*16YD
M(%*#0H-"E!R:79A=&;;5=I;F1O=W-0<F]C*$)Y
M5F%L(&QG2'=N9"!!<R!,;VYG+"!">59A;"!L9U!A<F%M($%S($QO;F<I($%S
M($QO;F<-"B @1&EM('-T5&UP($%S(%-T<FEN9RP@;&=4;7 @07,@3&]N9RP@
M;&),@3&]N9PT*(" G#0H@('-T5&UP(#!A8V4D*#$R,"D-"B @
M;&=4;7 @/2 Q,3D-"B @;&)70@/2!'9717:6YD;WI7AT*&QG2'=N9"P@
M<W14;7 L(&QG5&UP*0T*("!)9B!,96XH<W14;7 I(#X@,2!!;F0@;&)70@
M/#X@,"!4:&5N#0H@(" @1F]R;3$N3&ES=#$N061D271E;2!&;W)M870H;&=(
M=VYD+" B,# P,# P,# B*2 F("(@.B B("8@<W14;7 -"B @16YD($EF#0H@
F($5N=6U7:6YD;W=S4')O8R ](#$-"D5N9"!&=6YC=&EO;@T*#0H`
`
end

begin 666 Form1.frx
&!51E>'0Q
`
end

begin 666 Module1.bas
M071T<FEBqE(%9"7TYA;64@/2 B36]D=6QE,2(-"@T*(" G(&UO9'5L92 Q
M(#;65R4')O9PT*(" @("<-"B @4'5B;&EC($1E8VQA
M;&]W5&5X="!,:6(@(G5S97(S,B(@06QI87,@(D=E=%=I;F1O
M=U1E>'1!(B!?#0H@(" @*$)Y5F%L(&AW;,@3&]@;'!3
M=')I;F<@07,@4W1R:6YG+"!">59A;"!C8V@@07,@3&],@3&]N9PT*
M(" @(" @)PT*("!0=6)L:6,@1&5C;&%R92!&=6YC=&EO;B!%;G5M5VEN9&]W
M<R!,:6(@(G5S97(S,B(@7PT*(" @("A">59A;"!L<$5N=6U&=6YC($%S($QO
M;F<L($)Y5F%L(&Q087)A;2!!<R!,;VYG*2!!<R!,;VYG#0H@(" @)PT*#0H-
M"E!U8FQI8R!&=6YC=&EO;B!'9717:6YD;W=S3&ES="@I#0H@($1I;2!L9U)E
M<"!!<R!,;VYG#0H@("<-"B @<W1'9717:6YD;W=S3&ES=" ]('9B3G5L;%-T
M<FEN9PT*("!L9U)E<" ]($5N=6U7:6YD;W=S*$%D9')E<W-/9B!%;G5M5VEN
M9&]W<U!R;V,L(# I#0I%;;VX-"@T*#0I0=6)L:6,@1G5N8W1I
M;;5=I;F1O=W-0<F]C*$)Y5F%L(&QG2'=N9"!!<R!,;VYG+"!">59A
M;"!L9U!A<F%M($%S($QO;F<I($%S($QO;F<-"B @1&EM('-T5&UP($%S(%-T
M<FEN9RP@;&=4;7 @07,@3&]N9RP@;&),@3&]N9PT*(" G#0H@('-T
M5&UP(#!A8V4D*#$R,"D-"B @;&=4;7 @/2 Q,3D-"B @;&)70@/2!'
M9717:6YD;WI7AT*&QG2'=N9"P@<W14;7 L(&QG5&UP*0T*("!)9B!,96XH
M<W14;7 I(#X@,2!!;F0@;&)70@/#X@,"!4:&5N#0H@(" @1F]R;3$N3&ES
M=#$N061D271E;2!&;W)M870H;&=(=VYD+" B,# P,# P,# B*2 F("(@.B B
M("8@<W14;7 -"B @16YD($EF#0H@($5N=6U7:6YD;W=S4')O8R ](#$-"D5N
.9"!&=6YC=&EO;@T*#0H`
`
end
Avatar
François Picalausa
Hello,

Gloops wrote:
La première façon d'envisager le problème consiste à une descente dans
les entrailles de VB, en fait dans les questions de cours, pour trouver
la façon la plus élégante de passer une chaîne de caractères à la
fonction callback. La doc indique explicitement que la signature,
c'est-à-dire le nombre d'arguments et leur type, doit correspondre
exactement à la déclaration de EnumWindows, donc a priori pour les
arguments ça s'annonce mal,



Même si en VB, pour des raisons assez obscures, on a tendances à ne
pas l'utiliser, tu as toujours le lParam qui sert précisément à
passer des données "utilisateur" aux fonctions callback. (on pourrait
par exemple passer un pointeur vers la chaine de caractère et adapter
la procédure callback pour obtenir la chaine directement... )

j'ai donc pensé initialiser une variable
globale dans le module. On pourrait incorporer l'appel à la callback
dans une fonction qui peut très bien avoir le début de nom de fenêt re en
argument, qui le passe en variable globale au module où se trouve la
callback et qui fait l'appel à la callback ensuite.



C'est effectivement la méthode la lus utilisée. Il faut par contre
faire attention a avoir des accesseurs bien définis à cete variable
(privée d'un module et pas globale de préférence, donc), afin
d'éviter les problèmes du type "tiens, j'ai réécrit la valeur, je
ne sais pas où, et faute d'accesseurs corrects, je ne sais pas le
tracer facilement".

Le but de ma
question est donc, d'abord de savoir si je viens de dire une bêtise plus
grosse que moi, puis de savoir si quelqu'un s'est déjà risqué à c e type
de gymnastique et aurait des points de repère pour éviter des bêtis es en
route.



Je me suis déjà "risqué" (il n'y a pas de grands risques, mis à
part de planter VB), à ce genre de choses sur l'énumération de
ressources dans un fichier (EnumResourceNames et autres) avec variables
privée d'un module pour maintenir quelques informations. Ce doit être
globalement la même chose.

François Picalausa
Avatar
Gloops
Le 11/09/2006 16:08, François Picalausa a écrit :
Hello,

Gloops wrote:
La première façon d'envisager le problème consiste à une descente dans
les entrailles de VB, en fait dans les questions de cours, pour trouver
la façon la plus élégante de passer une chaîne de caractères à la
fonction callback. La doc indique explicitement que la signature,
c'est-à-dire le nombre d'arguments et leur type, doit correspondre
exactement à la déclaration de EnumWindows, donc a priori pour les
arguments ça s'annonce mal,



Même si en VB, pour des raisons assez obscures, on a tendances à ne
pas l'utiliser, tu as toujours le lParam qui sert précisément à
passer des données "utilisateur" aux fonctions callback. (on pourrait
par exemple passer un pointeur vers la chaine de caractère et adapter
la procédure callback pour obtenir la chaine directement... )



Ah, oui, un pointeur long vers une chaîne de caractères.
ça doit bien me rappeler quelque chose, ça. Plus en C qu'en VB, mais en
cherchant bien ...


j'ai donc pensé initialiser une variable
globale dans le module. On pourrait incorporer l'appel à la callback
dans une fonction qui peut très bien avoir le début de nom de fenêtre en
argument, qui le passe en variable globale au module où se trouve la
callback et qui fait l'appel à la callback ensuite.



C'est effectivement la méthode la lus utilisée.



Ah, une sorte de tendance générale, donc ...

Il faut par contre
faire attention a avoir des accesseurs bien définis à cete variable
(privée d'un module et pas globale de préférence, donc), afin
d'éviter les problèmes du type "tiens, j'ai réécrit la valeur, je
ne sais pas où, et faute d'accesseurs corrects, je ne sais pas le
tracer facilement".



Effectivement, après on a beau dire "ceci n'est pas une pipe", ça n'est
pas forcément convaincant à tous les coups.

Donc, j'imagine que tu me conseilles les joujous du type SetProperty,
comme on fait pour les modules de classe.


Le but de ma
question est donc, d'abord de savoir si je viens de dire une bêtise plus
grosse que moi, puis de savoir si quelqu'un s'est déjà risqué à ce type
de gymnastique et aurait des points de repère pour éviter des bêtises en
route.



Je me suis déjà "risqué" (il n'y a pas de grands risques, mis à
part de planter VB),



ainsi que le mentionne la doc, effectivement.

Remarque, une fois qu'on en est à dire que ce n'est pas grave de planter
VB, on peut se lancer.

à ce genre de choses sur l'énumération de
ressources dans un fichier (EnumResourceNames et autres) avec variables
privée d'un module pour maintenir quelques informations. Ce doit être
globalement la même chose.



Effectivement ça doit ressembler.

Merci pour ces infos.
Avatar
Gloops
Le 11/09/2006 15:54, X a écrit :
Bonjour,

Heu, je ne sais pas si j'ai compris, je comprends rarement, mais...



Hum, dans ce cas dois-je passer du temps à comprendre ce que tu dis ? ;)

Je regarderai quand même, si il y a une idée géniale c'est dommage de
passer à côté.

Normalement je me plonge là-dedans demain ou après-demain.

En tout cas merci de t'être intéressé à la question.