handle de l'editeur purebasic

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

handle de l'editeur purebasic

Message par falsam »

Je souhaite lancer un outil personnalisé depuis le menu outil de l'éditeur Pure Basic.

Est t'il possible de connaitre le handle de l'éditeur au moment ou je lance cet outil ?

J'utilise le code ci-dessous mais qui s’avère non fiable si par exemple mon explorateur internet affiche un sujet PureBasic.

Code : Tout sélectionner

hWnd.l = FindWindow_( 0, 0 ) 
chaine.s = Space(256) 

While hWnd <> 0 
  If GetWindowLong_(hWnd, #GWL_STYLE) & #WS_VISIBLE = #WS_VISIBLE 
     GetWindowText_(hWnd,@chaine,256)    
    If FindString(chaine,"PureBasic",0)<>0 
      Debug Str(hwnd)+" = "+chaine
    EndIf
  EndIf 
  hWnd = GetWindow_(hWnd, #GW_HWNDNEXT) 
Wend
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: handle de l'editeur purebasic

Message par Backup »

....................
Dernière modification par Backup le dim. 20/mars/2011 13:20, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: handle de l'editeur purebasic

Message par falsam »

je suis d'accord sur ton code mais le problème est que le titre de l’éditeur Pure Basic peut changer en fonction des versions.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: handle de l'editeur purebasic

Message par falsam »

J'ai trouvé ma réponse dans l'utilisation de la variable PB_TOOL_MainWindow qui donne l'identifiant système (Handle) de la fenêtre principale de l'IDE Pure Basic ainsi que dans l'utilisation de la variable PB_TOOL_Scintilla qui me donne l'identifiant système (Handle) du composant d'édition de code Scintilla pour le source en cours.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: handle de l'editeur purebasic

Message par PAPIPP »

@DOBRO
Intéressant ce code, J’ai voulu intégrer l'exécution du prg calc «Calculatrice»
Mais il faut temporiser pour que le système puisse détecter le Handle

Code : Tout sélectionner

RunProgram("calc")
While hwincalc=0
Delay(10)
hWinCalc = FindWindow_ (vbNullString, "Calculatrice" )
Debug hWinCalc 
Wend
Delay(1000) ; Pour avoir le temps de voir le déplacement
; CallDebugger
xw=100
yw=300
SetWindowPos_ (hWinCalc, -1, xw, yw, 0, 0, #SWP_NOSIZE )
@+
Dernière modification par PAPIPP le sam. 11/déc./2010 22:37, modifié 1 fois.
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: handle de l'editeur purebasic

Message par Backup »

sur mon escargot de nc10, j'ai pas besoin de temporiser ! :roll: :lol:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: handle de l'editeur purebasic

Message par Le Soldat Inconnu »

avec ce code, on peut trouver le nom du programme à partir du Handle d'une fenêtre. Il reste plus qu'a trouvé la fenêtre qui correspond à PureBasic.exe

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4.5
;
; Explication du programme :
; Trouver le nom du programme à partir de l'ID d'une fenêtre

Procedure.s ProgramfileNameFromWindow(WindowID)
  Protected ProcessID, Process32, Snapshot, ProcessEntry.PROCESSENTRY32, ProgramfileName.s
  GetWindowThreadProcessId_(WindowID, @ProcessID)
  
  Process32 = OpenLibrary (#PB_Any, "kernel32.dll") 
  If Process32
    Snapshot = CallFunction (Process32, "CreateToolhelp32Snapshot", #TH32CS_SNAPPROCESS, 0) 
    If Snapshot 
      ProcessEntry\dwSize = SizeOf(PROCESSENTRY32) 
      If CallFunction (Process32, "Process32First", Snapshot, @ProcessEntry) 
        Repeat
          If ProcessID = ProcessEntry\th32ProcessID 
            ProgramfileName = PeekS(@ProcessEntry\szExeFile)
            Break
          EndIf
        Until CallFunction (Process32, "Process32Next", Snapshot, @ProcessEntry) = 0
      EndIf    
      CloseHandle_(Snapshot) 
    EndIf 
    CloseLibrary(Process32) 
  EndIf 
  ProcedureReturn ProgramfileName
EndProcedure






; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 30, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
  End
EndIf

StickyWindow(0, 1)

TextGadget(0, 5, 5, 290, 20, "")

AddWindowTimer(0, 1, 100)

Repeat
  Event = WaitWindowEvent()
  
  Select Event
    Case #PB_Event_Timer
      Select EventTimer()
        Case 1
          Fenetre = WindowFromPoint_(DesktopMouseX() | DesktopMouseY() << 32)
          Texte.s =ProgramfileNameFromWindow(Fenetre)
          SetGadgetText(0, Texte)
      EndSelect
      
    Case #PB_Event_Gadget
      Select EventGadget() ; Gadgets
          
      EndSelect
  EndSelect
  
Until Event = #PB_Event_CloseWindow

KillTimer_(WindowID(0), 1)

End

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)]
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: handle de l'editeur purebasic

Message par falsam »

L'objectif est de cet exemple est de codé un outils personnalisé pour l'éditeur Pure Basic.

L'outils va renvoyer une valeur au point d'insertion du curseur de l'éditeur Pure Basic.

Enregistrer et créer un exécutable de l'exemple (sans intérêt) ci-dessous et installer le comme outils personnalisé pour voir le résultat.

Code : Tout sélectionner

Enumeration
  #MainForm
  #Insert
EndEnumeration

;Handle du composant d'édition de code Scintilla pour le source en cours
Global HandleIDESci.l

OpenWindow(#MainForm, 0, 0, 300, 200, "Outils personnalisé")
ButtonGadget(#Insert, 200, 20, 80, 22, "Inserer")

Repeat
  Select WaitWindowEvent()
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Insert
          ;Récupération du handle du source en cours d'édition (composant Scintilla)
          SetClipboardText("Résultat renvoyé par l'outils personnalisé")
          HandleIDESci=Val(GetEnvironmentVariable("PB_TOOL_Scintilla"))
          SendMessage_(HandleIDESci, #WM_PASTE,0,0) 
         
      EndSelect
    
    Case #PB_Event_CloseWindow
      End
      
  EndSelect
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: handle de l'editeur purebasic

Message par falsam »

Un exemple plus complet (Boite à outils Police) en cliquant sur ce post http://www.purebasic.fr/french/viewtopi ... =6&t=11290
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre