Page 1 sur 1

Poste de travail

Publié : mer. 24/mars/2004 13:21
par Heis Spiter
Bon, j'aimerais connaitre l'adresse du poste de travail afin de pouvoir l'ouvrir à l'aide d'un RunProgram. La mienne :
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
Mais je suis pas sur que ce soit la meme partout... Comment la retrouver ?

Publié : jeu. 25/mars/2004 9:12
par Le Soldat Inconnu
ben, soit tu fais un raccourci vers le poste de travail et après, tu le lances avec shellexecute.

je te remet le poste que j'avais déjà écrit :
exemple :
Code:
ShellExecute_(WindowID(), 0, GetFilePart(Fichier), GetPathPart(Fichier), #SW_SHOWNORMAL)


Attention, shellexecute, c'est du windows donc y'a des bugs dont celui ci que j'ai mis du temps à trouver (sous XP) :
si tu lances avec shellexecute un fichier dont on retrouve le même nom sur le bureau, il va te sortir une boite de dialogue de téléchargement (le truc de téléchargement de iexplore avec ouvrir, enregistrer et impossible de toujours faire ouvrir car pour lui, la source n'est pas sur) en clair, il veut télécharger le fichier qui est présent sur ton ordi
exemple :
si tu as sur le bureau un fichier "explorateur.lnk" et que tu veut lancer le raccourci "c:\Truc\Explorateur.lnk" et bien ça va planter comme je l'ai expliquer ci dessus. On dit quoi à windows ?
l'astuce est de copier le *.lnk sous un nom tordu du type, "je n'aime pas windows.lnk" puis de lancer ce raccourci et le supprimer. Génial

une autre solution, tu ouvres l'explorateur et tu lui envoie dans la barre d'adresse "Poste de travail"
Tu mets "Poste de travail" dans le clipboard
Alt + D
Ctrl + V
Return
ça je peux te passer le code si cette solution t'intéresse

Publié : jeu. 25/mars/2004 11:53
par Heis Spiter
Je préfére la deuximèe méthode. Si tu pouvais filer le bout de code :D

Publié : jeu. 25/mars/2004 12:40
par Le Soldat Inconnu
je te prépare ça :D

...

Finis, le résultat, et qui marche en plus :

Code : Tout sélectionner

Procedure KeyBoardEvent(Touche, ToucheSpecial)
  ; WindowID : fenêtre qui va recevoir la touche
  ; Touche : Touche appuyée, voir constantes PB dans l'aide de AddKeyboardShortcut()
  ; ToucheSpecial :
  ; = 1 si touche Control appuyée
  ; = 2 si touche Alt appuyée
  ; = 0 sinon
  
  SetForeGroundWindow_(WindowID)
  
  If OpenLibrary(0, "user32.dll")
    
    Select ToucheSpecial
      Case 1
        CallFunction(0, "keybd_event", #VK_CONTROL, 0, 0, 0)
      Case 2
        CallFunction(0, "keybd_event", #VK_MENU, 0, 0, 0)
    EndSelect
    
    CallFunction(0, "keybd_event", Touche, 0, 0, 0)
    Delay(10)
    CallFunction(0, "keybd_event", Touche, 0, #KEYEVENTF_KEYUP, 0)
    
    Select ToucheSpecial
      Case 1
        CallFunction(0, "keybd_event", #VK_CONTROL, 0, #KEYEVENTF_KEYUP, 0)
      Case 2
        CallFunction(0, "keybd_event", #VK_MENU, 0, #KEYEVENTF_KEYUP, 0)
    EndSelect
    
    CloseLibrary(0)
  EndIf
EndProcedure

NewList Liste_Fenetres()
Procedure.l RunProgramEx(NomFichier$, Parametre$, RepertoireCourant$)
  ClearList(Liste_Fenetres())
  
  ; Fenêtre au premier plan
  WindowID = GetForegroundWindow_()
  
  ; On liste les fenêtres ouvertes
  hWnd.l = FindWindow_( 0, 0 )
  While hWnd <> 0
    If GetwindowLong_(Hwnd, #GWL_STYLE) & #WS_VISIBLE = #WS_VISIBLE
        AddElement(Liste_Fenetres())
        Liste_Fenetres() = hWnd
    EndIf
    hWnd = GetWindow_(hWnd, #GW_HWNDNEXT)
  Wend

  ; On lance le programme
  RunProgram(NomFichier$, Parametre$, RepertoireCourant$)
  
  ; On cherche l'ID du la fenêtre créée
  Time = GetTickCount_()
  Repeat
    LastWindowID = GetForegroundWindow_()
    If GetTickCount_() - Time > 5000
      ProcedureReturn 0
    EndIf
    If LastWindowID <> 0 And LastWindowID <> WindowID
      ; On compare avec la liste des fenêtres qui étaient ouvertes
      ResetList(Liste_Fenetres()) 
      While NextElement(Liste_Fenetres()) 
        If LastWindowID = Liste_Fenetres()
          WindowID = LastWindowID
        EndIf
      Wend
    EndIf
  Until LastWindowID <> 0 And LastWindowID <> WindowID And GetwindowLong_(LastWindowID, #GWL_STYLE) & #WS_VISIBLE = #WS_VISIBLE
  
  ProcedureReturn LastWindowID ; On renvoie l'ID de la dernière fenêtre créé
EndProcedure




; Debut du test

SetClipboardText("Poste de travail") ; on met "Poste de travail" dans le presse papier

WindowExploreur = RunProgramEx("explorer.exe", "/n,/e", "") ; on lance l'explorateur window
; les paramètres signifie :
; /n : ouvre dans le volets d'exploration les dossiers
; /e : ouvre obligatoirement une nouvelle fenêtre de l'explorateur windows
KeyBoardEvent(#PB_Shortcut_D, 2) ; Envoie la touche Alt + D, cela permet d'aller dans la barre d'adresse
KeyBoardEvent(#PB_Shortcut_V, 1) ; Envoie la touche Ctrl + V, pour copier le texte du presse papier dans la barre d'adresse
KeyBoardEvent(#PB_Shortcut_Return, 0) ; Envoie la touche Entrée, pour valider