|
| Sélectionner un fichier dnas l'explorateur Windows |
| Iniciado por jonathan, 04,jun. 2008 10:33 - 9 respuestas |
| |
| | | |
|
| |
| Publicado el 04,junio 2008 - 10:33 |
Bonjour,
J'ai une table qui contient la liste des fichiers d'un répertoire. L'objectif est, en faisant un double clic sur le nom d'un fichier, d'ouvrir l'explorateur windows et de sélectionner le fichier.
J'ai fait quelques tests mais sans succès pour l'instant.
Je sais que LanceAppliAssociée(<NomDuRépertoire>) permet d'ouvrir le répertoire dans l'explorateur de Windows.
Mais comment donner l'ordre à Windows de sélectionnner un fichier?
Merci et bon dev. |
| |
| |
| | | |
|
| | |
| |
| Publicado el 04,junio 2008 - 11:43 |
Bonjour,
> Mais comment donner l'ordre à Windows de sélectionnner un fichier?
Utilises les options de la ligne de commande de l'explorateur.
Par exemple :
LanceAppli("Explorer.exe /e, /select,C:\WinDev 12\Programmes\WinDev12.exe")
Regardes sur :
http://support.microsoft.com/kb/152457
pour plus de détails sur les options de l'explorateur.
A+ -- Francis MOREL |
| |
| |
| | | |
|
| | |
| |
| Publicado el 04,junio 2008 - 12:11 |
Jonathan a écrit dans le message de news <d1b04dc2fbc03a353a88a02ade9b433a@news.pcsoft> :
Bonjour,
J'ai une table qui contient la liste des fichiers d'un répertoire. L'objectif est, en faisant un double clic sur le nom d'un fichier, d'ouvrir l'explorateur windows et de sélectionner le fichier.
J'ai fait quelques tests mais sans succès pour l'instant.
Je sais que LanceAppliAssociée(<NomDuRépertoire>) permet d'ouvrir le répertoire dans l'explorateur de Windows.
Mais comment donner l'ordre à Windows de sélectionnner un fichier?
Merci et bon dev.
Bonjour
Regarde les fonctions sélecteur dans l'aide
bonne journée Tophe |
| |
| |
| | | |
|
| | |
| |
| Publicado el 04,junio 2008 - 12:49 |
Ok merci pour ton aide
Francis MOREL wrote in news message <9899d58701a656feae220b3f6c967de0@news.pcsoft>:
Bonjour, Mais comment donner l'ordre à Windows de sélectionnner un fichier?
Utilises les options de la ligne de commande de l'explorateur. Par exemple : LanceAppli("Explorer.exe /e, /select,C:\WinDev 12\Programmes\WinDev12.exe") Regardes sur : http://support.microsoft.com/kb/152457pour plus de détails sur les options de l'explorateur. A+ -- Francis MOREL |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 87 mensajes |
|
| Publicado el 26,febrero 2019 - 13:30 |
Bonjour,
Dans votre exemple, on va donc ouvrir le répertoire "C:\WinDev 12\Programmes\" et sélectionner "WinDev12.exe". Si l'on exécute 2 fois cette ligne de code, on ouvrira donc 2 Explorateurs Windows.
Connaissez-vous un moyen d'exécuter ce code uniquement si un Explorateur Windows n'est pas déjà ouvert à ce chemin de répertoire? Peut-on savoir que "Explorer.exe C:\WinDev 12\Programmes" est déjà ouvert?
Cordialement,
Nicolas
--
NR |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 356 mensajes |
|
| Publicado el 27,febrero 2019 - 15:06 |
Bonjour Nicolas,
Malheureusement "Explorer Windows" est une application un peu particulière qui même lancée depuis une application parente ne conserve généralement pas son identification (comme toutes les autres), ni la ligne de commande du lancement.
Il existe cependant une possibilité simple si le paramétrage de l'explorateur a été fait en affichant l'intégralité du chemin dans les titres de la fenêtre. Avec par exemple un code de ce genre :SI SysFenHandle("C:\WinDev 23\Programmes")<>0 ALORS Info("Déjà lancé") SINON Info("Pas encore lancé") FIN En plus compliqué (si l'explorateur n'a pas été paramétré comme indiqué ci-dessus) on peut en listant les process en exécution par "ExeListeProcessus" par exemple, puis en repérant les instances de l'Explorer et sur chacun parcourir (par API) les fenêtres/champs fils pour chercher une correspondance avec le répertoire à identifier. Je n'ai pas directement ce code sous la main mais ça ne devrait pas être trop compliqué. Si tu es intéressé je devrais pouvoir l'écrire au besoin.
A+
-- Francis MOREL http://www.SoftProtect.fr |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 87 mensajes |
|
| Publicado el 27,febrero 2019 - 17:13 |
Bonjour,
Tout d'abord merci. En effet, ça n'est pas aussi simple qu'il y parait.
La solution de l'affichage du chemin complet dans le titre de la fenêtre est intéressante mais nous avons trop de clients pour pouvoir être sûr qu'ils conserveront cette configuration.
Je n'ai pas encore trouvé de solutions pour répondre à mon besoin mais le code suivant donne pas mal d'informations sur les processus alors je le met à disposition: cela pourrait intéresser du monde.
J'ai utilisé le code suivant pour remplir un champ table "TABLE_Processus" (contient une seule colonne "COL_MODELE").
CONSTANT user32_dll = "user32.dll" kernel32_dll = "kernel32.dll" netapi32_dll = "netapi32.dll" wsock32_dll = "wsock32.dll" icmp_dll = "icmp.dll" iphlpapi_dll = "iphlpapi.dll" advapi32_dll = "advapi32.dll" psapi_dll = "psapi.dll" AvecPid = True SansPid = NOT AvecPid SC_MANAGER_CONNECT = 0x0001 SC_MANAGER_CREATE_SERVICE = 0x0002 SC_MANAGER_ENUMERATE_SERVICE = 0x0004 SC_MANAGER_LOCK = 0x0008 SC_MANAGER_QUERY_LOCK_STATUS = 0x0010 SC_MANAGER_MODIFY_BOOT_CONFIG = 0x0020 GENERIC_READ = 0x80000000 ERROR_INSUFFICIENT_BUFFER = 0x0000007A ERROR_INVALID_HANDLE = 0x00000006 ERROR_INVALID_PARAMETER = 0x00000057 ERROR_MORE_DATA = 0x000000EA SHERB_NOCONFIRMATION = 0x00000001 SHERB_NOPROGRESSUI = 0x00000002 SHERB_NOSOUND = 0x00000004 SHERB_SILENT = 0x00000007 PROCESS_VM_READ = 0x00000010 PROCESS_QUERY_INFORMATION = 0x00000400 PROCESS_READINFO = 0x00000410 FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100 FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000 LANG_NEUTRAL = 0x00 SUBLANG_DEFAULT = 0x01 END
Procedure ListeDesProcessus(tab_iexeTypeInformation est un tableau de chaînes) sResultat est une chaîne i est un entier oScript est un objet automation "MSScriptControl.ScriptControl" sScriptVBS est une chaîne sParam est une chaîne sParamAAjouter est une chaîne
POUR i=1 _A_ tab_iexeTypeInformation..Occurrence SI tab_iexeTypeInformation[i]<>"" ALORS sParamAAjouter="objProcess."+tab_iexeTypeInformation[i] sParamAAjouter+=" & vbTab & " sParam+=sParamAAjouter FIN FIN
sParam +="vbNewLine"+RC
sScriptVBS=[ Function ListeDesProcessus() Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2") Set colProcesses = objWMIService.ExecQuery( "Select * from Win32_Process Where Name != 'WScript.exe'", , 48) Dim strReport For Each objProcess in colProcesses ' skip current script, and display the rest strReport = strReport & %1 Next ListeDesProcessus = strReport End Function ]
sScriptVBS =ChaîneConstruit(sScriptVBS,sParam)
oScript>>Language("VBScript") oScript>>Reset() oScript>>AddCode(sScriptVBS) oScript>>Timeout(-1)
sResultat =oScript>>Run("ListeDesProcessus")
RENVOYER(sResultat)
sMesProcessus est une chaîne sUnProcessus est une chaîne sUnParametre est une chaîne
tab_sListeParametres est un tableau de chaînes nIncProcessus est un entier nIncParametre est un entier nNbParametres est un entier
sTitreColonne est une chaîne
sNomColonneTri est une chaîne
Sablier(Vrai) tab_sListeParametres=["ProcessId",... "Caption",... "CommandLine",... "ExecutablePath",... "ParentProcessId",... "CreationClassName",... "CreationDate",... "CSCreationClassName",... "CSName",... "Description",... "ExecutionState",... "Handle",... "HandleCount",... "InstallDate",... "KernelModeTime",... "MaximumWorkingSetSize",... "MinimumWorkingSetSize",... "Name",... "OSCreationClassName",... "OSName",... "OtherOperationCount",... "OtherTransferCount",... "PageFaults",... "PageFileUsage",... "PeakPageFileUsage",... "PeakVirtualSize",... "PeakWorkingSetSize",... "Priority",... "PrivatePageCount",... "QuotaNonPagedPoolUsage",... "QuotaPagedPoolUsage",... "QuotaPeakNonPagedPoolUsage",... "QuotaPeakPagedPoolUsage",... "ReadOperationCount",... "ReadTransferCount",... "SessionId",... "Status",... "TerminationDate",... "ThreadCount",... "UserModeTime",... "VirtualSize",... "WindowsVersion",... "WorkingSetSize",... "WriteOperationCount",... "WriteTransferCount"]
nIncParametre=0 nNbParametres=tab_sListeParametres..Occurrence POUR TOUT sUnParametre de tab_sListeParametres nIncParametre++ sTitreColonne="COL_"+nIncParametre SI PAS ChampExiste("TABLE_Processus."+sTitreColonne) ALORS ChampClone(COL_MODELE,sTitreColonne) {"TABLE_Processus.COL_"+nIncParametre,indChamp}..Visible=Vrai FIN sTitreColonne=sUnParametre {"TABLE_Processus.COL_"+nIncParametre,indChamp}..Libellé =sTitreColonne SI sUnParametre~="Caption" ALORS sNomColonneTri="COL_"+nIncParametre FIN FIN TABLE_Processus.COL_MODELE..Visible=Faux
sMesProcessus=ListeDesProcessus(tab_sListeParametres)
TableSupprimeTout(TABLE_Processus) nIncProcessus=0 nIncParametre=0 POUR TOUTE chaîne sUnProcessus de sMesProcessus SEPAREE PAR RC SI sUnProcessus<>"" ALORS nIncProcessus++ nIncParametre=0 TableAjouteLigne(TABLE_Processus) POUR TOUTE chaîne sUnParametre de sUnProcessus SEPAREE PAR TAB nIncParametre++ SI nIncParametre<=nNbParametres ALORS {"TABLE_Processus.COL_"+nIncParametre,indChamp}[nIncProcessus]..Valeur =sUnParametre FIN FIN FIN FIN
TableAjuste(TABLE_Processus)
SI sNomColonneTri<>"" ALORS TableTrie(TABLE_Processus,sNomColonneTri) FIN
Sablier(Faux)
Ce script en VB me permet de retrouver les explorer.exe mais je n'ai que leur PID pour les distinguer mais rien ne permet de retrouver le chemin du répertoire ouvert malheureusement.
Cordialement,
--
NR |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 356 mensajes |
|
| Publicado el 28,febrero 2019 - 16:05 |
Bonjour Nicolas
Ci-joint une procédure (issu de Windev 12) qui permet de lister les fenêtres/champs filles d'une fenêtre principale.
Procedure EnumChilds(hwnd est un entier ,iLParam est un entier = Null)
Lg32 est un entier Ret32 est un entier lpstring est une chaîne fixe sur 255 szType est une chaîne ASCIIZ sur 250 cchType est un entier sans signe sur 2 = 250 iLen est un entier sans signe sur 2
Lg32=AppelDLL32("User32", "GetWindowTextLengthA", hwnd) Ret32=AppelDLL32("User32", "GetWindowTextA", hwnd, &lpstring, Lg32+1) iLen=AppelDLL32("User32", "RealGetWindowClassA", hwnd, &szType,cchType)
TableAjoute("TABLE_Childs",NumériqueVersChaîne(hwnd)+TAB+szType+TAB+lpstring[[1 À Lg32]])
RENVOYER Vrai lpstring[[1 À Lg32 contient dans ce cas les titres des champs dont celui que tu cherches sur un des champs.
L'appel se fait par hwnd est un entier système lParam est un entier AppelDLL32("User32", "EnumChildWindows", hwnd, &EnumChilds, lParam) ou hwnd est le handle de cette fenêtre.
Pour les explications sur chaque API je te laisse regarder sur MSDN : https://msdn.microsoft.com/fr-fr/
Bon dev. A+
-- Francis MOREL http://www.SoftProtect.frMensaje modificado, 28,febrero 2019 - 16:09 |
| |
| |
| | | |
|
| | |
| |
| Publicado el 12,febrero 2020 - 19:13 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 324 mensajes |
|
| Publicado el 13,febrero 2020 - 09:13 |
Peut-on savoir que "Explorer.exe C:\WinDev 12\Programmes" est déjà ouvert? <
Si ExeLance("explorer.exe") alors retour 
Après y'a surement moyen de récupérer le titre de la fenêtre en utilisant les fonctions de base de windev qui liste les processus (ExeListeProcessus) un truc du genre, et de la on doit pouvoir récupérer le "titre" de la fenêtre de l'explorer sans passer par 24 dll, et déclarations ^^, de mémoire, ca fait longtemps que je ne l'ai pas fais.Mensaje modificado, 13,febrero 2020 - 09:15 |
| |
| |
| | | |
|
| | | | |
| | |
|