Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

API -> Récupérer Handle de fenêtre ouverte par ShellExecute().

18 réponses
Avatar
teddy
Bonjour à tous,

Comme indiqué en objet, je cherche à récupérer le handle de la fenêtre ouverte par ShellExecute() qui m'ouvre en fait l'application
associée à un document (par exemple : pour un fichier CSV, ShellExecute() ouvre Excel sur mon poste).

D'abord je ne suis pas sûr du code retour de ShellExecute() en cas de succès : est-ce bien le N° d'instance de l'application lancée
ou bien est-ce un simple code d'erreur ?
Je sais qu'avec le N° d'instance, on peut trouver le handle de la fenêtre avec GetWindowThreadProcessId()

Des idées ?
Merci beaucoup pour vos suggestions.

Teddy

10 réponses

1 2
Avatar
Christian Hugoud
Une autre idée : tu peux scruter toutes les fenêtres ouvertes via leur
caption, et identifier avec celui-ci celle qui t'intéresse.

Christian

" teddy" a écrit dans le message de news:
%
Bonjour à tous,

Comme indiqué en objet, je cherche à récupérer le handle de la fenêtre
ouverte par ShellExecute() qui m'ouvre en fait l'application associée à un
document (par exemple : pour un fichier CSV, ShellExecute() ouvre Excel
sur mon poste).

D'abord je ne suis pas sûr du code retour de ShellExecute() en cas de
succès : est-ce bien le N° d'instance de l'application lancée ou bien
est-ce un simple code d'erreur ?
Je sais qu'avec le N° d'instance, on peut trouver le handle de la fenêtre
avec GetWindowThreadProcessId()

Des idées ?
Merci beaucoup pour vos suggestions.

Teddy



Avatar
LE TROLL
Bonjour,

Tiens, peut être que ça peut faire l'affaire ?

OUVERTURE D'UNE APPLICATION
FERMETURE DE L'APPLICATION DEPUIS LE PROGRAMME QUI L'A LANCE
************************************************************
Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId 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
'
Private Const PROCESS_TERMINATE = &H1
Dim NumProcess As Long
Dim RC As Long
Dim hProcess As Long
'
Sub ouvrir()
NumProcess = Shell(Nom_fic, 1)
End sub
Sub fermer()
hProcess = OpenProcess(PROCESS_TERMINATE, -1&, NumProcess)
RC = TerminateProcess(hProcess, 0&)
RC = CloseHandle(hProcess)
End Sub

-------------
OU ÇA
-------------

Private Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal
lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String,
ByVal nShowCmd As Long) As Long

Dim Site As String
Site = "http://www.irolog.free.fr"
ShellExecute Me.hwnd, "Open", Site, "", App.Path, 1

HWND a peut être le processus, je crois...

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------



" teddy" a écrit dans le message de news:
%
| Bonjour à tous,
|
| Comme indiqué en objet, je cherche à récupérer le handle de la fenêtre
ouverte par ShellExecute() qui m'ouvre en fait l'application
| associée à un document (par exemple : pour un fichier CSV, ShellExecute()
ouvre Excel sur mon poste).
|
| D'abord je ne suis pas sûr du code retour de ShellExecute() en cas de
succès : est-ce bien le N° d'instance de l'application lancée
| ou bien est-ce un simple code d'erreur ?
| Je sais qu'avec le N° d'instance, on peut trouver le handle de la fenêtre
avec GetWindowThreadProcessId()
|
| Des idées ?
| Merci beaucoup pour vos suggestions.
|
| Teddy
|
Avatar
teddy
Je sais qu'on peut le faire avec FindWindow() mais je ne connais pas forcément à l'avance le nom de la fenêtre.


"Christian Hugoud" a écrit dans le message de news:%23PYsJ$
Une autre idée : tu peux scruter toutes les fenêtres ouvertes via leur caption, et identifier avec celui-ci celle qui t'intéresse.

Christian

" teddy" a écrit dans le message de news: %
Bonjour à tous,

Comme indiqué en objet, je cherche à récupérer le handle de la fenêtre ouverte par ShellExecute() qui m'ouvre en fait
l'application associée à un document (par exemple : pour un fichier CSV, ShellExecute() ouvre Excel sur mon poste).

D'abord je ne suis pas sûr du code retour de ShellExecute() en cas de succès : est-ce bien le N° d'instance de l'application
lancée ou bien est-ce un simple code d'erreur ?
Je sais qu'avec le N° d'instance, on peut trouver le handle de la fenêtre avec GetWindowThreadProcessId()

Des idées ?
Merci beaucoup pour vos suggestions.

Teddy







Avatar
teddy
Je dois utiliser ShellExecute() pour pouvoir lancer l'application associée à l'ouverture d'un fichier sur le poste de travail
concerné.
En effet, cette application dépend du poste de travail (son paramétrage) et peut être totalement différente sur un autre poste.
Merci quand même.


"LE TROLL" <le a écrit dans le message de news:eqqiBK%
Bonjour,

Tiens, peut être que ça peut faire l'affaire ?

OUVERTURE D'UNE APPLICATION
FERMETURE DE L'APPLICATION DEPUIS LE PROGRAMME QUI L'A LANCE
************************************************************
Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId 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
'
Private Const PROCESS_TERMINATE = &H1
Dim NumProcess As Long
Dim RC As Long
Dim hProcess As Long
'
Sub ouvrir()
NumProcess = Shell(Nom_fic, 1)
End sub
Sub fermer()
hProcess = OpenProcess(PROCESS_TERMINATE, -1&, NumProcess)
RC = TerminateProcess(hProcess, 0&)
RC = CloseHandle(hProcess)
End Sub

-------------
OU ÇA
-------------

Private Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal
lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String,
ByVal nShowCmd As Long) As Long

Dim Site As String
Site = "http://www.irolog.free.fr"
ShellExecute Me.hwnd, "Open", Site, "", App.Path, 1

HWND a peut être le processus, je crois...

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------



" teddy" a écrit dans le message de news:
%
| Bonjour à tous,
|
| Comme indiqué en objet, je cherche à récupérer le handle de la fenêtre
ouverte par ShellExecute() qui m'ouvre en fait l'application
| associée à un document (par exemple : pour un fichier CSV, ShellExecute()
ouvre Excel sur mon poste).
|
| D'abord je ne suis pas sûr du code retour de ShellExecute() en cas de
succès : est-ce bien le N° d'instance de l'application lancée
| ou bien est-ce un simple code d'erreur ?
| Je sais qu'avec le N° d'instance, on peut trouver le handle de la fenêtre
avec GetWindowThreadProcessId()
|
| Des idées ?
| Merci beaucoup pour vos suggestions.
|
| Teddy
|




Avatar
LE TROLL
Bonjour,

Mais... "à la fin" du texte, tu as "aussi" shelleExecute en exemple,
avec dans l'api une variable "hwnd As Long", qui je présume capture le
processus...

Dim Site As String
Site = "http://www.irolog.free.fr"


ShellExecute Me.hwnd, "Open", Site, "", App.Path, 1

C'est pas ça que tu veux ???

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
" teddy" a écrit dans le message de news:
O1m$gIA%
| Je dois utiliser ShellExecute() pour pouvoir lancer l'application associée
à l'ouverture d'un fichier sur le poste de travail
| concerné.
| En effet, cette application dépend du poste de travail (son paramétrage)
et peut être totalement différente sur un autre poste.
| Merci quand même.
|
|
| "LE TROLL" <le a écrit dans le message de
news:eqqiBK%
| > Bonjour,
| >
| > Tiens, peut être que ça peut faire l'affaire ?
| >
| > OUVERTURE D'UNE APPLICATION
| > FERMETURE DE L'APPLICATION DEPUIS LE PROGRAMME QUI L'A LANCE
| > ************************************************************
| > Private Declare Function OpenProcess Lib "kernel32" ( _
| > ByVal dwDesiredAccess As Long, _
| > ByVal bInheritHandle As Long, _
| > ByVal dwProcessId 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
| > '
| > Private Const PROCESS_TERMINATE = &H1
| > Dim NumProcess As Long
| > Dim RC As Long
| > Dim hProcess As Long
| > '
| > Sub ouvrir()
| > NumProcess = Shell(Nom_fic, 1)
| > End sub
| > Sub fermer()
| > hProcess = OpenProcess(PROCESS_TERMINATE, -1&, NumProcess)
| > RC = TerminateProcess(hProcess, 0&)
| > RC = CloseHandle(hProcess)
| > End Sub
| >
| > -------------
| > OU ÇA
| > -------------
| >
| > Private Declare Function ShellExecute Lib "shell32.dll" Alias
| > "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal
| > lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As
String,
| > ByVal nShowCmd As Long) As Long
| >
| > Dim Site As String
| > Site = "http://www.irolog.free.fr"
| > ShellExecute Me.hwnd, "Open", Site, "", App.Path, 1
| >
| > HWND a peut être le processus, je crois...
| >
| > --
| > Romans, logiciels, email, site personnel
| > http://irolog.free.fr/joe.htm
|
> ------------------------------------------------------------------------------------
| >
| >
| >
| > " teddy" a écrit dans le message de news:
| > %
| > | Bonjour à tous,
| > |
| > | Comme indiqué en objet, je cherche à récupérer le handle de la fenêtre
| > ouverte par ShellExecute() qui m'ouvre en fait l'application
| > | associée à un document (par exemple : pour un fichier CSV,
ShellExecute()
| > ouvre Excel sur mon poste).
| > |
| > | D'abord je ne suis pas sûr du code retour de ShellExecute() en cas de
| > succès : est-ce bien le N° d'instance de l'application lancée
| > | ou bien est-ce un simple code d'erreur ?
| > | Je sais qu'avec le N° d'instance, on peut trouver le handle de la
fenêtre
| > avec GetWindowThreadProcessId()
| > |
| > | Des idées ?
| > | Merci beaucoup pour vos suggestions.
| > |
| > | Teddy
| > |
| >
| >
|
Avatar
LE TROLL
Tiens, testé, là j'ouvre le bloc-notes + un fichier test.txt, et j'ai en
retour le n° du handle:

' exp appel sh avec processus
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As
String, _
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal
nShowCmd As Long) _
As Long

Sub Form_Load()
Dim p01a As Long
ChDrive App.Path
ChDir App.Path
Form1.AutoRedraw = True
FontName = "courier new"
FontSize = 20
CurrentX = 100
CurrentY = 100
p01a = FreeFile
Open "test.txt" For Output As p01a
Print #p01a, "test du fichier text.txt"
Close p01a
ShellExecute Me.hwnd, "Open", "NotePad.exe", "test.txt", App.Path, 1
Print hwnd
End Sub

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
" teddy" a écrit dans le message de news:
%
| Bonjour à tous,
|
| Comme indiqué en objet, je cherche à récupérer le handle de la fenêtre
ouverte par ShellExecute() qui m'ouvre en fait l'application
| associée à un document (par exemple : pour un fichier CSV, ShellExecute()
ouvre Excel sur mon poste).
|
| D'abord je ne suis pas sûr du code retour de ShellExecute() en cas de
succès : est-ce bien le N° d'instance de l'application lancée
| ou bien est-ce un simple code d'erreur ?
| Je sais qu'avec le N° d'instance, on peut trouver le handle de la fenêtre
avec GetWindowThreadProcessId()
|
| Des idées ?
| Merci beaucoup pour vos suggestions.
|
| Teddy
|
Avatar
parci
On Thu, 7 Aug 2008 10:08:36 +0200, "LE TROLL" <le
wrote:

Tiens, testé, là j'ouvre le bloc-notes + un fichier test.txt, et j'ai en
retour le n° du handle:

' exp appel sh avec processus
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As
String, _
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal
nShowCmd As Long) _
As Long

Sub Form_Load()
Dim p01a As Long
ChDrive App.Path
ChDir App.Path
Form1.AutoRedraw = True
FontName = "courier new"
FontSize = 20
CurrentX = 100
CurrentY = 100
p01a = FreeFile
Open "test.txt" For Output As p01a
Print #p01a, "test du fichier text.txt"
Close p01a
ShellExecute Me.hwnd, "Open", "NotePad.exe", "test.txt", App.Path, 1
Print hwnd
End Sub



Le hWnd de ton formulaire (Me est implicite).
Avatar
parci
On Wed, 6 Aug 2008 22:14:27 +0200, " teddy" wrote:

Je sais qu'on peut le faire avec FindWindow() mais je ne connais pas forcément à l'avance le nom de la fenêtre.



ShellExecuteEx peut retourner un hProcess si un nouveau process est
vraiment lancé. Si c'est le cas tu peux retrouver ensuite le nom de
l'exécutable par exemple.
Qu'est ce que tu voudrais faire avec un handle de fenêtre ?
Avatar
LE TROLL
Mais n'est-ce pas ça la question, d'ouvrir une application et son fichier
avec shellexecut, et d'en récupérer le handel ???

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"parci" a écrit dans le message de news:

| On Thu, 7 Aug 2008 10:08:36 +0200, "LE TROLL" <le
| wrote:
|
| >Tiens, testé, là j'ouvre le bloc-notes + un fichier test.txt, et j'ai en
| >retour le n° du handle:
| >
| >' exp appel sh avec processus
| > Option Explicit
| > Private Declare Function ShellExecute Lib "shell32.dll" Alias
| >"ShellExecuteA" _
| > (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As
| >String, _
| > ByVal lpParameters As String, ByVal lpDirectory As String, ByVal
| >nShowCmd As Long) _
| > As Long
| >
| >Sub Form_Load()
| > Dim p01a As Long
| > ChDrive App.Path
| > ChDir App.Path
| > Form1.AutoRedraw = True
| > FontName = "courier new"
| > FontSize = 20
| > CurrentX = 100
| > CurrentY = 100
| > p01a = FreeFile
| > Open "test.txt" For Output As p01a
| > Print #p01a, "test du fichier text.txt"
| > Close p01a
| > ShellExecute Me.hwnd, "Open", "NotePad.exe", "test.txt", App.Path, 1
| > Print hwnd
| >End Sub
|
| Le hWnd de ton formulaire (Me est implicite).
|
Avatar
parci
On Fri, 8 Aug 2008 01:05:19 +0200, "LE TROLL" <le
wrote:

Mais n'est-ce pas ça la question, d'ouvrir une application et son fichier
avec shellexecut, et d'en récupérer le handel ???



C'est la question (en gros, parce que le handle de l'application?)
mais pas ta réponse.
1 2