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

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian Hugoud
Le #16483941
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" %
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



LE TROLL
Le #16489841
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" %
| 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
|
teddy
Le #16491401
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"
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"
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







teddy
Le #16491391
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"
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" %
| 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
|




LE TROLL
Le #16493111
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" 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" 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" | > %
| > | 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
| > |
| >
| >
|
LE TROLL
Le #16493311
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" %
| 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
|
parci
Le #16499231
On Thu, 7 Aug 2008 10:08:36 +0200, "LE TROLL" 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).
parci
Le #16499221
On Wed, 6 Aug 2008 22:14:27 +0200, " 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.



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 ?
LE TROLL
Le #16500961
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"
| On Thu, 7 Aug 2008 10:08:36 +0200, "LE TROLL" | 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).
|
parci
Le #16506421
On Fri, 8 Aug 2008 01:05:19 +0200, "LE TROLL" 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.
Publicité
Poster une réponse
Anonyme