OVH Cloud OVH Cloud

Comment fermer 1 programme quelconque ???

5 réponses
Avatar
LE TROLL
Bonjour,

Je n'arrive pas à fermer un programme, pourtant j'ai le n° de ce dernier
"Handle", je dois mal utiliser l'API, ses constante, voire le code, peut-on
m'aider:

Dans le Load j'ouvre un programme "Bloc-notes) pour avoir quelque chose
à fermer, mais il faut faire comme si ce n'était pas moi qui l'avait ouvert,
car ça je sais faire (fermer ce qu'on ouvre), non, il faut faire comme si on
fermait un programme ouvert par une autre applie inconnue.

Alors dans le Load, je cherche tous les processus et leur handle, que je
mets en liste, puis je fais une recherche sur le nom de l'appli à fermer, et
quand je l'ai trouvé, je récupère son handle (n° de processus)

In fine, avec le numéro du handle, je ferme par boutonn dans Command1...
Mais ça ne marche ps, où est l'erreur ???
------------------

Voici le code

4 Objets (permet de tout contrôler visuellement)
list1, sorte=true
list2
commandButton 1
Test2


Le code
Form1
'
' form 1 : FermerProg
'
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 TerminateProcess Lib "kernel32" ( _
ByVal hProcess As Long, _
ByVal uExitCode As Long _
) As Long
'
Private Declare Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) As Long
'
Dim handle As Long
'


Sub Form_Load()
Dim x
Dim i As Long
Dim hwnd As Long
Dim chaine As Strin
'
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)
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
Call TerminateProcess(handle, 1)
Call CloseHandle(handle)
List2.AddItem "FERMER handle = " & handle
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


Le code
Module 1
'
' 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


Ci-joint le programme en fichier, merci de votre aide :o)

--
ng75 arobase noos.fr
------------------------------------------------------------
LE TROLL, éleveur de trolls depuis César, qui disait :
Avec une hache, celui qui tient le manche a toujours raison !



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<+BY<+BY<5TE.1$]74UQ3>7-T96TS,EQS=&1O;&4R
M+G1L8B-/3$4@075T;VUA=&EO;@T*36]D=6QE/4UO9'5L93$[($UO9'5L93$N
M8F%S#0I)8V]N1F]R;3TB1F]R;3$B#0I3=&%R='5P/2)&;W)M,2(-"D-O;6UA
M;F0S,CTB(@T*3F%M93TB4')O:F5T,2(-"DAE;'!#;VYT97AT240](C B#0I#
M;VUP871I8FQE36]D93TB,"(-"DUA:F]R5F5R/3$-"DUI;F]R5F5R/3 -"E)E
M=FES:6]N5F5R/3 -"D%U=&]);F-R96UE;G1697(], T*4V5R=F5R4W5P<&]R
M=$9I;&5S/3 -"E9E<G-I;VY#;VUP86YY3F%M93TB4&5R<V\B#0I#;VUP:6QA
M=&EO;E1Y<&4], T*3W!T:6UI>F%T:6]N5'EP93TP#0I&879O<E!E;G1I=6U0
M<F\H=&TI/3 -"D-O9&56:65W1&5B=6=);F9O/3 -"DYO06QI87-I;F<], T*
M0F]U;F1S0VAE8VL], T*3W9E<F9L;W=#:&5C:STP#0I&;%!O:6YT0VAE8VL]
M, T*1D1)5D-H96-K/3 -"E5N<F]U;F1E9$90/3 -"E-T87)T36]D93TP#0I5
M;F%T=&5N9&5D/3 -"E)E=&%I;F5D/3 -"E1H<F5A9%!E<D]B:F5C=#TP#0I-
587A.=6UB97)/9E1H<F5A9',],0T*
`
end

begin 666 FermerProg.vbw
M1F]R;3$@/2 T-"P@-3@L(#8U-RP@-3 R+" L(#(R+" R.2P@-C,U+" T-S,L
C($,-"DUO9'5L93$@/2 V-BP@.#<L(#8W.2P@-3,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@(" @(" ](" @,C@U#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!60BY#;VUM86YD0G5T=&]N($-O;6UA;F0Q( T*(" @(" @
M0V%P=&EO;B @(" @(" @(#T@(" B1F5R<FUE(@T*(" @(" @2&5I9VAT(" @
M(" @(" @(#T@(" T.34-"B @(" @($QE9G0@(" @(" @(" @(" ](" @-S(P
M, T*(" @(" @5&%B26YD97@@(" @(" @(#T@(" S#0H@(" @("!4;W @(" @
M(" @(" @(" @/2 @(#@P-# -"B @(" @(%=I9'1H(" @(" @(" @(" ](" @
M.3<U#0H@("!%;F0-"B @($)E9VEN(%9"+DQI<W1";W@@3&ES=#(@#0H@(" @
M("!(96EG:'0@(" @(" @(" @/2 @(#$R,S -"B @(" @($QE9G0@(" @(" @
M(" @(" ](" @,3(P#0H@(" @("!486));F1E>" @(" @(" @/2 @(#(-"B @
M(" @(%1O<" @(" @(" @(" @(" ](" @-S X, T*(" @(" @5VED=&@@(" @
M(" @(" @(#T@(" V.#4U#0H@("!%;F0-"B @($)E9VEN(%9"+E1E>'1";W@@
M5&5X=#(@#0H@(" @("!(96EG:'0@(" @(" @(" @/2 @(#,W-0T*(" @(" @
M3&5F=" @(" @(" @(" @(#T@(" W,C P#0H@(" @("!486));F1E>" @(" @
M(" @/2 @(#$-"B @(" @(%1E>'0@(" @(" @(" @(" ](" @(E1E>'0R(@T*
M(" @(" @5&]P(" @(" @(" @(" @(#T@(" W,#@P#0H@(" @("!7:61T:" @
M(" @(" @(" @/2 @(#DW-0T*(" @16YD#0H@("!"96=I;B!60BY,:7-T0F]X
M($QI<W0Q( T*(" @(" @2&5I9VAT(" @(" @(" @(#T@(" V.#@U#0H@(" @
M("!,969T(" @(" @(" @(" @/2 @(#$R, T*(" @(" @4V]R=&5D(" @(" @
M(" @(#T@(" M,2 @)U1R=64-"B @(" @(%1A8DEN9&5X(" @(" @(" ](" @
M, T*(" @(" @5&]P(" @(" @(" @(" @(#T@(" Q,C -"B @(" @(%=I9'1H
M(" @(" @(" @(" ](" @.# U-0T*(" @16YD#0I%;F0-"D%T=')I8G5T92!6
M0E].86UE(#T@(D9O<FTQ(@T*071T<FEB=71E(%9"7T=L;V)A;$YA;653<&%C
M92 ]($9A;'-E#0I!='1R:6)U=&4@5D)?0W)E871A8FQE(#T@1F%L<V4-"D%T
M=')I8G5T92!60E]0<F5D96-L87)E9$ED(#T@5')U90T*071T<FEB=71E(%9"
M7T5X<&]S960@/2!&86QS90T*#0H@( T*(" G(&9O<FT@,2 Z($9E<FUE<E!R
M;V<-"B @(" G#0H@($]P=&EO;B!%>'!L:6-I= T*(" G#0H@(%!R:79A=&4@
M1&5C;&%R92!&=6YC=&EO;B!'971&;W)E9W)O=6YD5VEN9&]W($QI8B B=7-E
M<C,R(B H*2!!<R!,;VYG#0H@("=H=VYD("AH86YD;&4@9&4@;&$@9F]R;64I
M#0H@("<-"B @4')I=F%T92!$96-L87)E($9U;F-T:6]N($=E=%=I;F1O=U1E
M>'0@3&EB(")U<V5R,S(B($%L:6%S(")'9717:6YD;W=497AT02(@7PT*(" @
M("A">59A;"!H=VYD($%S($QO;F<L($)Y5F%L(&QP4W1R:6YG($%S(%-T<FEN
M9RP@0GE686P@8V-H($%S($QO;F<I($%S($QO;F<-"B @(" G#0H@(%!R:79A
M=&4@1&5C;&%R92!&=6YC=&EO;B!%;G5M5VEN9&]W<R!,:6(@(G5S97(S,B(@
M7PT*(" @("A">59A;"!L<$5N=6U&=6YC($%S($QO;F<L($)Y5F%L(&Q087)A
M;2!!<R!,;VYG*2!!<R!,;VYG#0H@(" @)PT*("!0<FEV871E($1E8VQA<F4@
M1G5N8W1I;VX@5&5R;6EN871E4')O8V5S<R!,:6(@(FME<FYE;#,R(B H(%\-
M"B @("!">59A;"!H4')O8V5S<R!!<R!,;VYG+"!?#0H@(" @0GE686P@=45X
M:71#;V1E($%S($QO;F<@7PT*(" @("D@07,@3&]N9PT*(" @("<-"B @4')I
M=F%T92!$96-L87)E($9U;F-T:6]N($-L;W-E2&%N9&QE($QI8B B:V5R;F5L
M,S(B("@@7PT*(" @($)Y5F%L(&A/8FIE8W0@07,@3&]N9RD@07,@3&]N9PT*
M(" @("<-"B @1&EM(&AA;F1L92!!<R!,;VYG#0H@("<-"B @#0H@( T*4W5B
M($9O<FU?3&]A9"@I#0H@($1I;2!X#0H@($1I;2!I($%S($QO;F<-"B @1&EM
M(&AW;F0@07,@3&]N9PT*("!$:6T@8VAA:6YE($%S(%-T<FEN#0H@("<-"B @
M3&ES=#$N0VQE87(-"B @3&ES=#(N0VQE87(-"B @)PT*(" G(&AA;F1L92!D
M92!C971T92!F;W)M90T*("!H=VYD(#T@1V5T1F]R96=R;W5N9%=I;F1O=PT*
M("!,:7-T,BY!9&1)=&5M(")H86YD;&4@9&4@8V5T=&4@9F]R;2 ]("(@)B!H
M=VYD#0H@("<-"B @)VQA;F-E(&)L;V,M;F]T97,@<&]U<B!T97-T97(@96YS
M=6ET92!S82!F97)M971U<F4-"B @>" ](%-H96QL*").;W1E4&%D+F5X92 B
M+" Q*0T*(" G#0H@($=E=%=I;F1O=W-,:7-T#0H@("<-"B @5&5X=#(@/2!,
M:7-T,2Y,:7-T0V]U;G0-"B @)RTM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+0T*("!&;W(@:2 ](# @5&\@3&ES=#$N
M3&ES=$-O=6YT("T@,0T*(" @(&-H86EN92 ]($UI9"A,:7-T,2Y,:7-T*&DI
M+" Q,BP@,C4V*0T*(" @(&-H86EN92 ](%1R:6TH8VAA:6YE*0T*(" @($EF
M(&-H86EN92 ](")386YS('1I=')E("T@0FQO8RUN;W1E<R(@5&AE;@T*(" @
M(" @3&ES=#(N061D271E;2!C:&%I;F4-"B @(" @(&AA;F1L92 ]($UI9"A,
M:7-T,2Y,:7-T*&DI+" Q+" X*0T*(" @(" @3&ES=#(N061D271E;2 B:&%N
M9&QE(. @9F5R;65R(#T@(B F(&AA;F1L90T*(" @($5N9"!)9@T*("!.97AT
M(&D-"D5N9"!3=6(-"@T*#0I3=6(@0V]M;6%N9#%?0VQI8VLH*2 G9F5R;65R
M#0H@($-A;&P@5&5R;6EN871E4')O8V5S<RAH86YD;&4L(#$I#0H@($-A;&P@
M0VQO<V5(86YD;&4H:&%N9&QE*0T*("!,:7-T,BY!9&1)=&5M(")&15)-15(@
M:&%N9&QE(#T@(B F(&AA;F1L90T*16YD(%-U8@T*#0H-"E!R:79A=&4@1G5N
M8W1I;VX@16YU;5=I;F1O=W-0<F]C*$)Y5F%L(&QG2'=N9"!!<R!,;VYG+"!"
M>59A;"!L9U!A<F%M($%S($QO;F<I($%S($QO;F<-"B @1&EM('-T5&UP($%S
M(%-T<FEN9RP@;&=4;7 @07,@3&]N9RP@;&=2970@07,@3&]N9PT*(" G#0H@
M('-T5&UP(#T@4W!A8V4D*#$R,"D-"B @;&=4;7 @/2 Q,3D-"B @;&=2970@
M/2!'9717:6YD;W=497AT*&QG2'=N9"P@<W14;7 L(&QG5&UP*0T*("!)9B!,
M96XH<W14;7 I(#X@,2!!;F0@;&=2970@/#X@,"!4:&5N#0H@(" @1F]R;3$N
M3&ES=#$N061D271E;2!&;W)M870H;&=(=VYD+" B,# P,# P,# B*2 F("(@
M.B B("8@<W14;7 -"B @16YD($EF#0H@($5N=6U7:6YD;W=S4')O8R ](#$-
/"D5N9"!&=6YC=&EO;@T*
`
end

begin 666 Module1.bas
M071T<FEB=71E(%9"7TYA;64@/2 B36]D=6QE,2(-"@T*(" G(&UO9'5L92 Q
M(#H@1F5R;65R4')O9PT*(" @("<-"B @4'5B;&EC($1E8VQA<F4@1G5N8W1I
M;VX@1V5T5VEN9&]W5&5X="!,:6(@(G5S97(S,B(@06QI87,@(D=E=%=I;F1O
M=U1E>'1!(B!?#0H@(" @*$)Y5F%L(&AW;F0@07,@3&]N9RP@0GE686P@;'!3
M=')I;F<@07,@4W1R:6YG+"!">59A;"!C8V@@07,@3&]N9RD@07,@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%;F0@1G5N8W1I;VX-"@T*#0I0=6)L:6,@1G5N8W1I
M;VX@16YU;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@;&=2970@07,@3&]N9PT*(" G#0H@('-T
M5&UP(#T@4W!A8V4D*#$R,"D-"B @;&=4;7 @/2 Q,3D-"B @;&=2970@/2!'
M9717:6YD;W=497AT*&QG2'=N9"P@<W14;7 L(&QG5&UP*0T*("!)9B!,96XH
M<W14;7 I(#X@,2!!;F0@;&=2970@/#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

5 réponses

Avatar
Pascal B.
Bonjour le Troll,

Tu mélanges les torchons et les serviettes.
Le Handle d'une Window NE CORRESPOND PAS au Handle d'un Process.

Si tu veux travailler avec le Handle d'une Window (plutot que d'un Process),
essaye ceci:

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

Private Sub Button1_Click()
Dim H as long

H= FindWindow(vbNullString, "Sans titre - Bloc-notes")
If H <> 0 Then
CloseWindow H
End If

End Sub

Amicalement ;-)
Pascal B.



"LE TROLL" <le wrote in message news:
| Bonjour,
|
| Je n'arrive pas à fermer un programme, pourtant j'ai le n° de ce dernier
| "Handle", je dois mal utiliser l'API, ses constante, voire le code, peut-on
| m'aider:
|
| Dans le Load j'ouvre un programme "Bloc-notes) pour avoir quelque chose
| à fermer, mais il faut faire comme si ce n'était pas moi qui l'avait ouvert,
| car ça je sais faire (fermer ce qu'on ouvre), non, il faut faire comme si on
| fermait un programme ouvert par une autre applie inconnue.
|
| Alors dans le Load, je cherche tous les processus et leur handle, que je
| mets en liste, puis je fais une recherche sur le nom de l'appli à fermer, et
| quand je l'ai trouvé, je récupère son handle (n° de processus)
|
| In fine, avec le numéro du handle, je ferme par boutonn dans Command1...
| Mais ça ne marche ps, où est l'erreur ???
| ------------------
|
| Voici le code
|
| 4 Objets (permet de tout contrôler visuellement)
| list1, sorte=true
| list2
| commandButton 1
| Test2
|
|
| Le code
| Form1
| '
| ' form 1 : FermerProg
| '
| 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 TerminateProcess Lib "kernel32" ( _
| ByVal hProcess As Long, _
| ByVal uExitCode As Long _
| ) As Long
| '
| Private Declare Function CloseHandle Lib "kernel32" ( _
| ByVal hObject As Long) As Long
| '
| Dim handle As Long
| '
|
|
| Sub Form_Load()
| Dim x
| Dim i As Long
| Dim hwnd As Long
| Dim chaine As Strin
| '
| 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)
| 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
| Call TerminateProcess(handle, 1)
| Call CloseHandle(handle)
| List2.AddItem "FERMER handle = " & handle
| 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
|
|
| Le code
| Module 1
| '
| ' 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
|
|
| Ci-joint le programme en fichier, merci de votre aide :o)
|
| --
| ng75 arobase noos.fr
| ------------------------------------------------------------
| LE TROLL, éleveur de trolls depuis César, qui disait :
| Avec une hache, celui qui tient le manche a toujours raison !
|
|
|
|
Avatar
LE TROLL
Amicalement, lol, qu'il dit...

Une processus est un programme (qui peut avoir des sous-programmes
thread), et qui porte un numéro Handle, le tout, visible ou pas à l'écran...

Je ferme handle et processus, bien que, un processus (process), sans son
handle ça fait un fantôme, et un handle qui n'a pas de processus, il est
malheureux...

J'ai expressément dit de ne pas fermer dans l'applie le logiciel qui est
ouvert dans l'applie pou le test (trop facile, et je sais le faire), et toi
t'e tombé dans le panneau, lol...

Alors, rien que pour toi, tu ouvres manuellement le bloc-notes, puis à
l'aide de l'applie tu le ferme (faut retrouver son handle, c'est ça que je
veux, pour fermer le bloc note par son handle, merci :o)

Je vais regarder ce que tu proposes...



"Pascal B." a écrit dans le message de news:
OsG%
Bonjour le Troll,

Tu mélanges les torchons et les serviettes.
Le Handle d'une Window NE CORRESPOND PAS au Handle d'un Process.

Si tu veux travailler avec le Handle d'une Window (plutot que d'un
Process),
essaye ceci:

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

Private Sub Button1_Click()
Dim H as long

H= FindWindow(vbNullString, "Sans titre - Bloc-notes")
If H <> 0 Then
CloseWindow H
End If

End Sub

Amicalement ;-)
Pascal B.



"LE TROLL" <le wrote in message
news:
| Bonjour,
|
| Je n'arrive pas à fermer un programme, pourtant j'ai le n° de ce
dernier
| "Handle", je dois mal utiliser l'API, ses constante, voire le code,
peut-on
| m'aider:
|
| Dans le Load j'ouvre un programme "Bloc-notes) pour avoir quelque
chose
| à fermer, mais il faut faire comme si ce n'était pas moi qui l'avait
ouvert,
| car ça je sais faire (fermer ce qu'on ouvre), non, il faut faire comme
si on
| fermait un programme ouvert par une autre applie inconnue.
|
| Alors dans le Load, je cherche tous les processus et leur handle,
que je
| mets en liste, puis je fais une recherche sur le nom de l'appli à
fermer, et
| quand je l'ai trouvé, je récupère son handle (n° de processus)
|
| In fine, avec le numéro du handle, je ferme par boutonn dans
Command1...
| Mais ça ne marche ps, où est l'erreur ???
| ------------------
|
| Voici le code
|
| 4 Objets (permet de tout contrôler visuellement)
| list1, sorte=true
| list2
| commandButton 1
| Test2
|
|
| Le code
| Form1
| '
| ' form 1 : FermerProg
| '
| 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 TerminateProcess Lib "kernel32" ( _
| ByVal hProcess As Long, _
| ByVal uExitCode As Long _
| ) As Long
| '
| Private Declare Function CloseHandle Lib "kernel32" ( _
| ByVal hObject As Long) As Long
| '
| Dim handle As Long
| '
|
|
| Sub Form_Load()
| Dim x
| Dim i As Long
| Dim hwnd As Long
| Dim chaine As Strin
| '
| 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)
| 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
| Call TerminateProcess(handle, 1)
| Call CloseHandle(handle)
| List2.AddItem "FERMER handle = " & handle
| 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
|
|
| Le code
| Module 1
| '
| ' 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
|
|
| Ci-joint le programme en fichier, merci de votre aide :o)
|
| --
| ng75 arobase noos.fr
| ------------------------------------------------------------
| LE TROLL, éleveur de trolls depuis César, qui disait :
| Avec une hache, celui qui tient le manche a toujours raison !
|
|
|
|




Avatar
YannX
De là pour passer au handle de programme...

[DllImport("user32.dll")]
Public static extern int GetWindowThreadProcessId (
int hwnd,
int lpdwProcessId);

Et reste plus qu'a (lol ;-)
lui envoyer un Alt+F4 ou plutot un message WM_QUIT.....
Mais j'ai pas trouvé la commande/fonction a utiliser !

Je regarde dans ProgOtoP API Viewer (et ils n'ont meme pas affiché leur site
d'origine dans leur "about"...)
Merci Google : http://www.progotop.com/popapi/


"LE TROLL" <le a écrit dans le message de
news:
Amicalement, lol, qu'il dit...

Une processus est un programme (qui peut avoir des sous-programmes
thread), et qui porte un numéro Handle, le tout, visible ou pas à


l'écran...

Je ferme handle et processus, bien que, un processus (process), sans


son
handle ça fait un fantôme, et un handle qui n'a pas de processus, il est
malheureux...

J'ai expressément dit de ne pas fermer dans l'applie le logiciel qui


est
ouvert dans l'applie pou le test (trop facile, et je sais le faire), et


toi
t'e tombé dans le panneau, lol...

Alors, rien que pour toi, tu ouvres manuellement le bloc-notes, puis à
l'aide de l'applie tu le ferme (faut retrouver son handle, c'est ça que je
veux, pour fermer le bloc note par son handle, merci :o)

Je vais regarder ce que tu proposes...



"Pascal B." a écrit dans le message de


news:
OsG%
> Bonjour le Troll,
>
> Tu mélanges les torchons et les serviettes.
> Le Handle d'une Window NE CORRESPOND PAS au Handle d'un Process.
>
> Si tu veux travailler avec le Handle d'une Window (plutot que d'un
> Process),
> essaye ceci:
>
> 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
>
> Private Sub Button1_Click()
> Dim H as long
>
> H= FindWindow(vbNullString, "Sans titre - Bloc-notes")
> If H <> 0 Then
> CloseWindow H
> End If
>
> End Sub
>
> Amicalement ;-)
> Pascal B.
>
>
>
> "LE TROLL" <le wrote in message
> news:
> | Bonjour,
> |
> | Je n'arrive pas à fermer un programme, pourtant j'ai le n° de ce
> dernier
> | "Handle", je dois mal utiliser l'API, ses constante, voire le code,
> peut-on
> | m'aider:
> |
> | Dans le Load j'ouvre un programme "Bloc-notes) pour avoir quelque
> chose
> | à fermer, mais il faut faire comme si ce n'était pas moi qui l'avait
> ouvert,
> | car ça je sais faire (fermer ce qu'on ouvre), non, il faut faire comme
> si on
> | fermait un programme ouvert par une autre applie inconnue.
> |
> | Alors dans le Load, je cherche tous les processus et leur handle,
> que je
> | mets en liste, puis je fais une recherche sur le nom de l'appli à
> fermer, et
> | quand je l'ai trouvé, je récupère son handle (n° de processus)
> |
> | In fine, avec le numéro du handle, je ferme par boutonn dans
> Command1...
> | Mais ça ne marche ps, où est l'erreur ???
> | ------------------
> |
> | Voici le code
> |
> | 4 Objets (permet de tout contrôler visuellement)
> | list1, sorte=true
> | list2
> | commandButton 1
> | Test2
> |
> |
> | Le code
> | Form1
> | '
> | ' form 1 : FermerProg
> | '
> | 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 TerminateProcess Lib "kernel32" ( _
> | ByVal hProcess As Long, _
> | ByVal uExitCode As Long _
> | ) As Long
> | '
> | Private Declare Function CloseHandle Lib "kernel32" ( _
> | ByVal hObject As Long) As Long
> | '
> | Dim handle As Long
> | '
> |
> |
> | Sub Form_Load()
> | Dim x
> | Dim i As Long
> | Dim hwnd As Long
> | Dim chaine As Strin
> | '
> | 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)
> | 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
> | Call TerminateProcess(handle, 1)
> | Call CloseHandle(handle)
> | List2.AddItem "FERMER handle = " & handle
> | 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
> |
> |
> | Le code
> | Module 1
> | '
> | ' 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
> |
> |
> | Ci-joint le programme en fichier, merci de votre aide :o)
> |
> | --
> | ng75 arobase noos.fr
> | ------------------------------------------------------------
> | LE TROLL, éleveur de trolls depuis César, qui disait :
> | Avec une hache, celui qui tient le manche a toujours raison !
> |
> |
> |
> |
>
>




Avatar
Pascal B.
Re,

Keskessais kece préchiprécha !
(et je ne vois pas dans quel panneau je suis tompé? D'ailleurs ?)

Moi, je dis simplement que tu utilisais un Handle de Window pour terminer un Process.
Ca ne peut pas fonctionner avec la fonction TerminateProcess.
Il faut l'Handle du Process correspondant !

Si tu veux travailler avec le Handle d'un Process (plus compliqué que d'une Window),
regarde du coté des fonctions suivantes (sans certitude):

Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal
dwProcId As Long) As Long
Public Declare Function EnumProcesses Lib "PSAPI.DLL" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Public Declare Function GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As
String, ByVal nSize As Long) As Long
Public Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef
cbNeeded As Long) As Long

Elles permettront de travailler avec le nom du fichier EXE (plus sure) plutot que le titre de la fenetre (qui change).
Ainsi, tu obtiendras le Handle du Process à utiliser dans TerminateProcess puis dans CloseHandle.

Logique, Non ?

Encore amicalement,
Pascal B.



"LE TROLL" <le wrote in message news:
| Amicalement, lol, qu'il dit...
|
| Une processus est un programme (qui peut avoir des sous-programmes
| thread), et qui porte un numéro Handle, le tout, visible ou pas à l'écran...
|
| Je ferme handle et processus, bien que, un processus (process), sans son
| handle ça fait un fantôme, et un handle qui n'a pas de processus, il est
| malheureux...
|
| J'ai expressément dit de ne pas fermer dans l'applie le logiciel qui est
| ouvert dans l'applie pou le test (trop facile, et je sais le faire), et toi
| t'e tombé dans le panneau, lol...
|
| Alors, rien que pour toi, tu ouvres manuellement le bloc-notes, puis à
| l'aide de l'applie tu le ferme (faut retrouver son handle, c'est ça que je
| veux, pour fermer le bloc note par son handle, merci :o)
|
| Je vais regarder ce que tu proposes...
|
|
|
| "Pascal B." a écrit dans le message de news:
| OsG%
| > Bonjour le Troll,
| >
| > Tu mélanges les torchons et les serviettes.
| > Le Handle d'une Window NE CORRESPOND PAS au Handle d'un Process.
| >
| > Si tu veux travailler avec le Handle d'une Window (plutot que d'un
| > Process),
| > essaye ceci:
| >
| > 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
| >
| > Private Sub Button1_Click()
| > Dim H as long
| >
| > H= FindWindow(vbNullString, "Sans titre - Bloc-notes")
| > If H <> 0 Then
| > CloseWindow H
| > End If
| >
| > End Sub
| >
| > Amicalement ;-)
| > Pascal B.
| >
| >
| >
| > "LE TROLL" <le wrote in message
| > news:
| > | Bonjour,
| > |
| > | Je n'arrive pas à fermer un programme, pourtant j'ai le n° de ce
| > dernier
| > | "Handle", je dois mal utiliser l'API, ses constante, voire le code,
| > peut-on
| > | m'aider:
| > |
| > | Dans le Load j'ouvre un programme "Bloc-notes) pour avoir quelque
| > chose
| > | à fermer, mais il faut faire comme si ce n'était pas moi qui l'avait
| > ouvert,
| > | car ça je sais faire (fermer ce qu'on ouvre), non, il faut faire comme
| > si on
| > | fermait un programme ouvert par une autre applie inconnue.
| > |
| > | Alors dans le Load, je cherche tous les processus et leur handle,
| > que je
| > | mets en liste, puis je fais une recherche sur le nom de l'appli à
| > fermer, et
| > | quand je l'ai trouvé, je récupère son handle (n° de processus)
| > |
| > | In fine, avec le numéro du handle, je ferme par boutonn dans
| > Command1...
| > | Mais ça ne marche ps, où est l'erreur ???
| > | ------------------
| > |
| > | Voici le code
| > |
| > | 4 Objets (permet de tout contrôler visuellement)
| > | list1, sorte=true
| > | list2
| > | commandButton 1
| > | Test2
| > |
| > |
| > | Le code
| > | Form1
| > | '
| > | ' form 1 : FermerProg
| > | '
| > | 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 TerminateProcess Lib "kernel32" ( _
| > | ByVal hProcess As Long, _
| > | ByVal uExitCode As Long _
| > | ) As Long
| > | '
| > | Private Declare Function CloseHandle Lib "kernel32" ( _
| > | ByVal hObject As Long) As Long
| > | '
| > | Dim handle As Long
| > | '
| > |
| > |
| > | Sub Form_Load()
| > | Dim x
| > | Dim i As Long
| > | Dim hwnd As Long
| > | Dim chaine As Strin
| > | '
| > | 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)
| > | 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
| > | Call TerminateProcess(handle, 1)
| > | Call CloseHandle(handle)
| > | List2.AddItem "FERMER handle = " & handle
| > | 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
| > |
| > |
| > | Le code
| > | Module 1
| > | '
| > | ' 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
| > |
| > |
| > | Ci-joint le programme en fichier, merci de votre aide :o)
| > |
| > | --
| > | ng75 arobase noos.fr
| > | ------------------------------------------------------------
| > | LE TROLL, éleveur de trolls depuis César, qui disait :
| > | Avec une hache, celui qui tient le manche a toujours raison !
| > |
| > |
| > |
| > |
| >
| >
|
|
Avatar
YannX
Effectivement.

Merci pour l'info
Y
"Pascal B." a écrit dans le message de
news:
Re,

Keskessais kece préchiprécha !
(et je ne vois pas dans quel panneau je suis tompé? D'ailleurs ?)

Moi, je dis simplement que tu utilisais un Handle de Window pour terminer


un Process.
Ca ne peut pas fonctionner avec la fonction TerminateProcess.
Il faut l'Handle du Process correspondant !

Si tu veux travailler avec le Handle d'un Process (plus compliqué que


d'une Window),
regarde du coté des fonctions suivantes (sans certitude):

Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal


dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal
dwProcId As Long) As Long
Public Declare Function EnumProcesses Lib "PSAPI.DLL" (ByRef lpidProcess


As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Public Declare Function GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal


hProcess As Long, ByVal hModule As Long, ByVal ModuleName As
String, ByVal nSize As Long) As Long
Public Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess


As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef
cbNeeded As Long) As Long

Elles permettront de travailler avec le nom du fichier EXE (plus sure)


plutot que le titre de la fenetre (qui change).
Ainsi, tu obtiendras le Handle du Process à utiliser dans TerminateProcess


puis dans CloseHandle.

Logique, Non ?

Encore amicalement,
Pascal B.



"LE TROLL" <le wrote in message


news:
| Amicalement, lol, qu'il dit...
|
| Une processus est un programme (qui peut avoir des sous-programmes
| thread), et qui porte un numéro Handle, le tout, visible ou pas à


l'écran...
|
| Je ferme handle et processus, bien que, un processus (process), sans


son
| handle ça fait un fantôme, et un handle qui n'a pas de processus, il est
| malheureux...
|
| J'ai expressément dit de ne pas fermer dans l'applie le logiciel qui


est
| ouvert dans l'applie pou le test (trop facile, et je sais le faire), et


toi
| t'e tombé dans le panneau, lol...
|
| Alors, rien que pour toi, tu ouvres manuellement le bloc-notes, puis


à
| l'aide de l'applie tu le ferme (faut retrouver son handle, c'est ça que


je
| veux, pour fermer le bloc note par son handle, merci :o)
|
| Je vais regarder ce que tu proposes...
|
|
|
| "Pascal B." a écrit dans le message de


news:
| OsG%
| > Bonjour le Troll,
| >
| > Tu mélanges les torchons et les serviettes.
| > Le Handle d'une Window NE CORRESPOND PAS au Handle d'un Process.
| >
| > Si tu veux travailler avec le Handle d'une Window (plutot que d'un
| > Process),
| > essaye ceci:
| >
| > 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
| >
| > Private Sub Button1_Click()
| > Dim H as long
| >
| > H= FindWindow(vbNullString, "Sans titre - Bloc-notes")
| > If H <> 0 Then
| > CloseWindow H
| > End If
| >
| > End Sub
| >
| > Amicalement ;-)
| > Pascal B.
| >
| >
| >
| > "LE TROLL" <le wrote in message
| > news:
| > | Bonjour,
| > |
| > | Je n'arrive pas à fermer un programme, pourtant j'ai le n° de ce
| > dernier
| > | "Handle", je dois mal utiliser l'API, ses constante, voire le code,
| > peut-on
| > | m'aider:
| > |
| > | Dans le Load j'ouvre un programme "Bloc-notes) pour avoir


quelque
| > chose
| > | à fermer, mais il faut faire comme si ce n'était pas moi qui l'avait
| > ouvert,
| > | car ça je sais faire (fermer ce qu'on ouvre), non, il faut faire


comme
| > si on
| > | fermait un programme ouvert par une autre applie inconnue.
| > |
| > | Alors dans le Load, je cherche tous les processus et leur


handle,
| > que je
| > | mets en liste, puis je fais une recherche sur le nom de l'appli à
| > fermer, et
| > | quand je l'ai trouvé, je récupère son handle (n° de processus)
| > |
| > | In fine, avec le numéro du handle, je ferme par boutonn dans
| > Command1...
| > | Mais ça ne marche ps, où est l'erreur ???
| > | ------------------
| > |
| > | Voici le code
| > |
| > | 4 Objets (permet de tout contrôler visuellement)
| > | list1, sorte=true
| > | list2
| > | commandButton 1
| > | Test2
| > |
| > |
| > | Le code
| > | Form1
| > | '
| > | ' form 1 : FermerProg
| > | '
| > | 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 TerminateProcess Lib "kernel32" ( _
| > | ByVal hProcess As Long, _
| > | ByVal uExitCode As Long _
| > | ) As Long
| > | '
| > | Private Declare Function CloseHandle Lib "kernel32" ( _
| > | ByVal hObject As Long) As Long
| > | '
| > | Dim handle As Long
| > | '
| > |
| > |
| > | Sub Form_Load()
| > | Dim x
| > | Dim i As Long
| > | Dim hwnd As Long
| > | Dim chaine As Strin
| > | '
| > | 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)
| > | 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
| > | Call TerminateProcess(handle, 1)
| > | Call CloseHandle(handle)
| > | List2.AddItem "FERMER handle = " & handle
| > | 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
| > |
| > |
| > | Le code
| > | Module 1
| > | '
| > | ' 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
| > |
| > |
| > | Ci-joint le programme en fichier, merci de votre aide :o)
| > |
| > | --
| > | ng75 arobase noos.fr
| > | ------------------------------------------------------------
| > | LE TROLL, éleveur de trolls depuis César, qui disait :
| > | Avec une hache, celui qui tient le manche a toujours raison !
| > |
| > |
| > |
| > |
| >
| >
|
|