Page 1 sur 1

[OK] Bizarre!!.

Publié : jeu. 03/nov./2016 21:08
par celtic88

Code : Tout sélectionner

tpoint.POINT
Repeat
  Delay(1000)
  Debug GetActiveWindow_()
  Debug GetFocus_()
  GetCursorPos_(tpoint)
  Debug WindowFromPoint_(tpoint)
ForEver
Slt :D ,
quand je fais un appel à ces api la ,le code de retour est toujour zéro.?.....
merci de me répondre :)

Image

Re: Bizarre!!.

Publié : jeu. 03/nov./2016 22:43
par nico
Pour les deux premiers debug, c'est apparemment normal, tu n'auras des valeurs que pour tes propres controle, car ils font référence au thead de ton propre programme.
pour le troisième debug il faut faire:
WindowFromPoint_(tpoint\x + tpoint\y<<32)

Si je ne dis pas de bêtise, l'explication est la suivante, pour certaines api window, la structure comme argument doit être passé par valeur et non par adresse or avec PureBasic toutes les structures sont passées par adresses, voilà pourquoi. (Merci a Denis qui m'avait expliqué cela a l'époque).

Prend getforegroundwindow a la place de getactivewindow:

Code : Tout sélectionner

tpoint.POINT
Repeat
  Delay(1000)
  Debug "------------------"
  Debug GetForegroundWindow_()
  GetCursorPos_(tpoint)
  Debug WindowFromPoint_(tpoint\x + tpoint\y<<32)
ForEver
Pour avoir des infos sur le controle qui possède le focus, tu dois passer par l'API GetGUIThreadInfo (je n'ai pas le temps tout de suite de te faire un exemple)

Re: Bizarre!!.

Publié : jeu. 03/nov./2016 23:14
par nico
J'ai pris le temps pour le faire finalement:

Code : Tout sélectionner

lpgui.GUITHREADINFO
tpoint.POINT
lpdwProcessId.l
ForegroundWindow.i
idThread.l
handlepoint.i

Repeat
  Delay(3000)
  Debug "------------------"
  Debug "------------------"
  
  ForegroundWindow = GetForegroundWindow_()
  Debug "Handle de la fenêtre activée (premier plan)"
  Debug ForegroundWindow
  
  GetCursorPos_(tpoint)
  handlepoint = WindowFromPoint_(tpoint\x + tpoint\y<<32)
  Debug "Handle sous le curseur (Fenêtre ou controle)"
  Debug handlepoint
  
  idThread = GetWindowThreadProcessId_(handlepoint, @lpdwProcessId)
  lpgui\cbSize=SizeOf(GUITHREADINFO)
  GetGUIThreadInfo_(idThread, @lpgui.GUITHREADINFO)
  
  Debug "Handle fenêtre active (Handle de la fenêtre si curseur sur un controle)"; si le curseur pointe sur la barre de titre alors on aura la même valeur que handlepoint
  Debug lpgui\hwndActive
  
  Debug "Handle focus (Controle ayant le focus ou fenêtre)"
  Debug lpgui\hwndFocus
ForEver

Re: Bizarre!!.

Publié : ven. 04/nov./2016 11:42
par celtic88
ahhh oui c est vrais 8O ,,,merci pour ces éclaircissements

"ça fait longtemps que j 'ai pas programmé"

Re: [OK] Bizarre!!.

Publié : sam. 05/nov./2016 14:12
par Ollivier
Il y a ce code aussi.