Fermer l'explorateur windows... (ouvert grâce à Shell ) VBA - Access

philou4283 Messages postés 4 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 1 août 2005 - 29 juil. 2005 à 20:23
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 1 août 2005 à 19:19
Hello evelibody !


Bon, alors j'ai un petit pb:


Mon but est de fermer l'explorateur windows ouvert par :

ProcessId = Shell("explorer ""M:""", vbMinimizedNoFocus)

J'ai essayé :

AppActivate ProcessId
SendKeys "%{F4}", True

Mais non, apparement, le handle n'est pas reconnu... J'ai aussi essayé avec une fonction TeminateProcess trouvée ici :
http://66.102.7.104/search?q=cache:Jv6m34x5O40J:longre.free.fr/pages/api/terminaison.htm+api+terminaison+vba+excel&hl=fr

Toujours pas...

HEEEEEEEEEEEELP

PS : à la base, mon pb est que j'ai une base access sur un poste dont certaines tables sont reliées à une base access d'un autre poste du reseau. Et cette autre table distante est localisée par un Network Drive (le truc de windows). Or de tps en tps, à l'ouverture de la premiere base, windows me dis que le chemin M:\ n'est pas valide alors que l'autre ordi est allumé et que j'ai bien coché la case login à chaque démarrage lors de la création du Network drive. Dsl, c pas simple à expliquer. Si quelqu'un a compris ça, d'abord bravo ! et ensuite une solution ????

Merci !

4 réponses

PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
30 juil. 2005 à 16:33
ProcessId = Shell("explorer ""M:""", vbHide) ne te convient pas?

sinon,
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

const WM_DESTROY as Long = &H2

PCPT
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
30 juil. 2005 à 19:29
Salut,

A la place de "m:\...." pourquoi ne met-tu pas le chemin réseau : "[file://serveur/..... \\serveur\.....]" ?
Explik : une lettre logique (m:) pour identifier un chemin réseau peut être différente suivant les postes connectés au lan. Donc le mieux est de n'utiliser que le vrai chemin réseau.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
philou4283 Messages postés 4 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 1 août 2005
1 août 2005 à 18:28
Hello, merci pour vos réponse !

PCPT : ProcessId = Shell("explorer ""M:""", vbHide) ne fait pas ce que j'ai envie de faire... Il faut vraiment que j'ouvre l'explorateur pour charger le network drive apparement.
Sinon, pourrais-tu expliquer un peu ta solution, je l'ai juste inséré dans les déclarations mais je ne sais pas comment m'en servir... merci.

CanisLupus : en fait un truc m'a obligé à faire un network drive...

Lieon
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
1 août 2005 à 19:19
salut,
bin le problème, c'est que je suis sous VB(6), je ne sais pas si çà fonctionne de la même manière pour VBA...

et pour bien faire, je t'ai un peu mené sur une fausse piste. (l'idée était là, mais pas tout à fait complet)

voici testé sous XP et VB6, fonctionnel :

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long

Const WM_CLOSE = &H10


Dim ShareName As String
Dim ShareLetter As String
Dim ShareIP As String 'contient les côtes ['']

'
'
Private Sub Form_Load()
ShareName = "tests" 'nom de mon dossier partagé
ShareLetter = "T:"
'lettre du partage
ShareIP = "'192.168.0.1'"
'IP propriétaire du dossier "tests"
End Sub

'
'
Private Sub Command1_Click()
Call Shell("explorer " & ShareLetter & "", vbMinimizedNoFocus)
End Sub

'
'
Private Sub Command2_Click()
Dim BrowsH As Long
'il faut trouver le nom exact de la fenêtre, variables initialisées au Form_Load
BrowsH = FindWindow(vbNullString, ShareName & " sur " & ShareIP & " (" & ShareLetter & ")")
If BrowsH <> 0 Then Call PostMessage(BrowsH, WM_CLOSE, 0&, 0&) Else MsgBox "Fenêtre non-trouvée", 32, "UnFound Explorer"
End Sub

y'a plus qu'à adapter
bon courage
PCPT
0