Poste de travail

Programmation d'applications complexes
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Poste de travail

Message 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 ?
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Je préfére la deuximèe méthode. Si tu pouvais filer le bout de code :D
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre