Et que j'ai un peu modifié pour expliquer les choses...
Et il y en a plein... D'autres ! Ce qui fait que aujourd'hui... j'arrête de prospecter... Il y a 866 page d'explication du manuel de PB et je n'en ai pas lu 200...
; *********************************************************
; Auteur : Le Soldat Inconnu Version de PB : 4
; Explication du programme : Trouver le nom du programme à partir de l'ID d'une fenêtre
; ----------------------------------------------------------------------
; Structure pour recevoir les coordonnées de la souris....
; Adaptation et commenté GeBonet
; ***********************************************************
Structure Coordonnee ;{-
x.l
y.l
EndStructure ;}-
Position.Coordonnee ; Et pouvoir lire les positions x,y par lecture à l'adresse
; ***********************************************************************************
; - Procédure pour récupérer le nom de la fenêtre "WindowID"
; ***********************************************************************************
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
; ------------------------------------------------------
Parametre= #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget
If openwindow (0, 0, 0, 300, 200, "Test" , Parametre) = 0
End
EndIf
;
stickywindow (0, 1)
textgadget (0, 5, 5, 100, 20, "" ) : textgadget (4, 100, 5, 200, 20, "" )
textgadget (1, 5, 25, 290, 20, "" )
textgadget (2, 5, 55, 290, 20, "" ) ; Affiche X
textgadget (3, 45, 55, 290, 20, "" ) ; Affiche Y
textgadget (7, 5,90,300,20, " J'affiche la fenêtre ou je passe" )
textgadget (8, 5,110,300,20, " Et les positions Souris d'origines différentes" )
textgadget (5, 300-80, 200-30, 290, 20, "" ) ; Affiche X
textgadget (6, 300-40, 200-30, 290, 20, "" ) ; Affiche Y
SetTimer_ ( windowid (0), 1, 100, 0)
;
Repeat
Event = waitwindowevent ()
Select Event
Case #WM_TIMER
Select eventwparam ()
Case 1
Position\x= desktopmousex () ; Position
Position\y= desktopmousey () ; Position y
; ; WindowFromPoint_ demande le "Point" pour avoir le Handle de la fenetre
; ************************************************************
Fenetre = WindowFromPoint_ (Position\x|Position\y<<32) ; <<<<<< Forme qui remplace l'ancien ==> WindowFromPoint_(x,y)
; ************************************************************
Texte.s =ProgramfileNameFromWindow(Fenetre) ; Avec le Handle je Trouve le nom de la fentre (avec Procédure ci-dessus)
;
setgadgettext (0, str (@Position)) ; Que j'écrit dans e stringGadet(0,...) @Coordonnee
setgadgettext (1, str (Fenetre)) ; Que j'écrit dans e stringGadet(0,...)
;
setgadgettext (2, "x=" + str (Position\x)) ; Position donnéé Par DesktopMouseX()
setgadgettext (3, "y=" + str (Position\y)) ; Position donnéé Par DesktopMouseY()
;
setgadgettext (4, " Fenetre =" +Texte)
; Position donnéé l'adresse de référence mémoire @Position
setgadgettext (5, "xb=" + str ( peekl (@Position))) ; Position donnéé Par l'adresse mémoire de X
setgadgettext (6, "yb=" + str ( peekl (@Position+4))) ; Position donnéé Par l'adresse mémoire de Y
;
EndSelect
Case #PB_Event_Gadget
Select eventgadget () ; Gadgets
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
KillTimer_ ( windowid (0), 1)
End
Mais j'ai au moins "déjà" plus de 300 modules exploitables, trucs etc... que j'ai vu et trouvé utiles...
Mais, je ne sais presque plus ou ils sont, malgré le fait de les avoir organisés...
Je commence à ne plus pouvoir écrire une ligne sans me demander si je n'ai pas quelque part une réponse à ma solution,
parce qu'il me semble l'avoir vu au lieu de réfléchir à mon problème...

Et un projet qui aurais déjà du être commencé il y a un ou deux mois, est toujours là, tellement je vais de découverte en découverte... au point d'en oublier le projet !
Si on regarde en plus Droopy, CodeArchive, Gnozal et d'autres Lib... qui sont des extensions... Alors on a plus que ce qu'il ne faut pour répondre à la majorité des problèmes que l'on a pour développer... Les APIs devraient rester les ultimes voies a suivre quand il n'y a pas de réponse PB.
Je deviens un boulimique de prospection du forum...


Le pire de l'histoire, c'est que l'on va chercher souvent midi à quatorze heure...
Il y a souvent des réponses PB comme le "AddKeyboardShortcut()" que l'on a remplacé par une API...
Il est évident que à la base... On peut remplacer presque toutes les fonctions PB par les API... plus de 7000 appels et si on ajoute leurs variantes selon les paramètres que l'on passe on multiple par deux ou trois en moyenne, ça fait un autre langage à lui seul... Et ce n'est plus du PureBasic !
Les échanges d'idées doivent continuer... Mais ce code que je passe ici, je l'ai en au moins trois versions... En réalité, beaucoup sont là ! existent, ont été publiée sous des formes différentes. Ce n'est que une forme de reproductions à cheval entre SDI et NetMaestro ...
Bon, de nouveau ce n'est qu'un avis...


