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 !
|
|
|
|
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 troll@paris.fr> wrote in message
news:utT3Yl50EHA.2568@TK2MSFTNGP11.phx.gbl...
| 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 !
|
|
|
|
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 !
|
|
|
|
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 à
Je ferme handle et processus, bien que, un processus (process), sans
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
ouvert dans l'applie pou le test (trop facile, et je sais le faire), et
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
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)
> 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)
> | 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
> | 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)
> | 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 !
> |
> |
> |
> |
>
>
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 à
Je ferme handle et processus, bien que, un processus (process), sans
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
ouvert dans l'applie pou le test (trop facile, et je sais le faire), et
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." <Pascbr@hotmail_ANTISPASM_.com> a écrit dans le message de
OsG%23xX70EHA.3364@TK2MSFTNGP12.phx.gbl...
> 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)
> 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 troll@paris.fr> wrote in message
> news:utT3Yl50EHA.2568@TK2MSFTNGP11.phx.gbl...
> | 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)
> | 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
> | 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)
> | 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 !
> |
> |
> |
> |
>
>
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 à
Je ferme handle et processus, bien que, un processus (process), sans
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
ouvert dans l'applie pou le test (trop facile, et je sais le faire), et
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
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)
> 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)
> | 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
> | 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)
> | 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 !
> |
> |
> |
> |
>
>
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
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
regarde du coté des fonctions suivantes (sans certitude):
Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal
dwProcId As Long) As Long
Public Declare Function EnumProcesses Lib "PSAPI.DLL" (ByRef lpidProcess
Public Declare Function GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal
String, ByVal nSize As Long) As Long
Public Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess
cbNeeded As Long) As Long
Elles permettront de travailler avec le nom du fichier EXE (plus sure)
Ainsi, tu obtiendras le Handle du Process à utiliser dans TerminateProcess
Logique, Non ?
Encore amicalement,
Pascal B.
"LE TROLL" <le wrote in message
| 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 à
|
| Je ferme handle et processus, bien que, un processus (process), sans
| 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
| ouvert dans l'applie pou le test (trop facile, et je sais le faire), et
| 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
| 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
| 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)
| > 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
| > 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
| > si on
| > | fermait un programme ouvert par une autre applie inconnue.
| > |
| > | Alors dans le Load, je cherche tous les processus et leur
| > 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
| > | '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
| > | '
| > | 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
| > | 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
| > | '
| > | 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
| > 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 !
| > |
| > |
| > |
| > |
| >
| >
|
|
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
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
regarde du coté des fonctions suivantes (sans certitude):
Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal
dwProcId As Long) As Long
Public Declare Function EnumProcesses Lib "PSAPI.DLL" (ByRef lpidProcess
Public Declare Function GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal
String, ByVal nSize As Long) As Long
Public Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess
cbNeeded As Long) As Long
Elles permettront de travailler avec le nom du fichier EXE (plus sure)
Ainsi, tu obtiendras le Handle du Process à utiliser dans TerminateProcess
Logique, Non ?
Encore amicalement,
Pascal B.
"LE TROLL" <le troll@paris.fr> wrote in message
| 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 à
|
| Je ferme handle et processus, bien que, un processus (process), sans
| 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
| ouvert dans l'applie pou le test (trop facile, et je sais le faire), et
| 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
| veux, pour fermer le bloc note par son handle, merci :o)
|
| Je vais regarder ce que tu proposes...
|
|
|
| "Pascal B." <Pascbr@hotmail_ANTISPASM_.com> a écrit dans le message de
| OsG%23xX70EHA.3364@TK2MSFTNGP12.phx.gbl...
| > 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)
| > 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 troll@paris.fr> wrote in message
| > news:utT3Yl50EHA.2568@TK2MSFTNGP11.phx.gbl...
| > | 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
| > 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
| > si on
| > | fermait un programme ouvert par une autre applie inconnue.
| > |
| > | Alors dans le Load, je cherche tous les processus et leur
| > 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
| > | '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
| > | '
| > | 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
| > | 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
| > | '
| > | 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
| > 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 !
| > |
| > |
| > |
| > |
| >
| >
|
|
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
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
regarde du coté des fonctions suivantes (sans certitude):
Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal
dwProcId As Long) As Long
Public Declare Function EnumProcesses Lib "PSAPI.DLL" (ByRef lpidProcess
Public Declare Function GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal
String, ByVal nSize As Long) As Long
Public Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess
cbNeeded As Long) As Long
Elles permettront de travailler avec le nom du fichier EXE (plus sure)
Ainsi, tu obtiendras le Handle du Process à utiliser dans TerminateProcess
Logique, Non ?
Encore amicalement,
Pascal B.
"LE TROLL" <le wrote in message
| 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 à
|
| Je ferme handle et processus, bien que, un processus (process), sans
| 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
| ouvert dans l'applie pou le test (trop facile, et je sais le faire), et
| 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
| 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
| 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)
| > 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
| > 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
| > si on
| > | fermait un programme ouvert par une autre applie inconnue.
| > |
| > | Alors dans le Load, je cherche tous les processus et leur
| > 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
| > | '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
| > | '
| > | 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
| > | 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
| > | '
| > | 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
| > 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 !
| > |
| > |
| > |
| > |
| >
| >
|
|