Page 1 sur 1
handle de l'editeur purebasic
Publié : sam. 11/déc./2010 0:29
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
Re: handle de l'editeur purebasic
Publié : sam. 11/déc./2010 0:59
par Backup
....................
Re: handle de l'editeur purebasic
Publié : sam. 11/déc./2010 1:03
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.
Re: handle de l'editeur purebasic
Publié : sam. 11/déc./2010 3:17
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.
Re: handle de l'editeur purebasic
Publié : sam. 11/déc./2010 16:09
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 )
@+
Re: handle de l'editeur purebasic
Publié : sam. 11/déc./2010 16:27
par Backup
sur mon escargot de nc10, j'ai pas besoin de temporiser !

Re: handle de l'editeur purebasic
Publié : sam. 11/déc./2010 19:39
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
Re: handle de l'editeur purebasic
Publié : sam. 11/déc./2010 23:29
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
Re: handle de l'editeur purebasic
Publié : dim. 12/déc./2010 0:21
par falsam
Un exemple plus complet (Boite à outils Police) en cliquant sur ce post
http://www.purebasic.fr/french/viewtopi ... =6&t=11290