FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» number_mouse_up
Fenêtre ouverte dans Windows Emptypar jjn4 Aujourd'hui à 11:59

» Aide de PANORAMIC
Fenêtre ouverte dans Windows Emptypar jjn4 Aujourd'hui à 11:16

» trop de fichiers en cours
Fenêtre ouverte dans Windows Emptypar lepetitmarocain Aujourd'hui à 10:43

» Je teste PANORAMIC V 1 beta 1
Fenêtre ouverte dans Windows Emptypar papydall Aujourd'hui à 4:17

» select intégrés
Fenêtre ouverte dans Windows Emptypar jjn4 Hier à 18:33

» PANORAMIC V 1
Fenêtre ouverte dans Windows Emptypar Klaus Hier à 9:53

» bouton dans autre form que 0
Fenêtre ouverte dans Windows Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Fenêtre ouverte dans Windows Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
Fenêtre ouverte dans Windows Emptypar Klaus Lun 6 Mai 2024 - 10:23

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Fenêtre ouverte dans Windows Emptypar Froggy One Jeu 2 Mai 2024 - 11:16

» @Jack
Fenêtre ouverte dans Windows Emptypar Jack Mar 30 Avr 2024 - 20:40

» Une calculatrice en une ligne de programme
Fenêtre ouverte dans Windows Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Fenêtre ouverte dans Windows Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Fenêtre ouverte dans Windows Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Fenêtre ouverte dans Windows Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -40%
Tefal Ingenio Emotion – Batterie de cuisine 10 ...
Voir le deal
59.99 €

 

 Fenêtre ouverte dans Windows

Aller en bas 
3 participants
AuteurMessage
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Fenêtre ouverte dans Windows Empty
MessageSujet: Fenêtre ouverte dans Windows   Fenêtre ouverte dans Windows EmptyVen 18 Fév 2022 - 15:05

Peut-être une question bête...
Est-il possible de récupérer en temps réel dans Windows les coordonnées de la fenêtre
ouverte par l'exécution d'un programme quelconque: x, y, w, h ?
Par exemple je lance Firefox, je voudrais dans un programme (écrit en Panoramic !)
récupérer l'emplacement et les dimensions actuels de sa fenêtre.
Ça existe forcément quelque part dans Windows, mais est-ce accessible ?
En fait je voudrais dans mon programme Panoramic récupérer le contenu d'une
zone donnée de la fenêtre du programme cible.
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

Fenêtre ouverte dans Windows Empty
MessageSujet: Re: Fenêtre ouverte dans Windows   Fenêtre ouverte dans Windows EmptyVen 18 Fév 2022 - 21:23

Ce n'est pas très compliqué si tu connais le texte qui apparait dans le bandeau de la fenêtre ("FireFox" je suppose).

Tu appelles la fonction FindWindow de la DLL User32, en lui passant en paramètre le texte du bandeau.
Cette fonction te retourne le handle de la fenêtre, et à partir du handle, tu peux connaitre la position et la taille de la fenêtre en appelant la fonction GetWindowRect de cette même DLL.

_________________
Fenêtre ouverte dans Windows Webdav username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Fenêtre ouverte dans Windows Empty
MessageSujet: Re: Fenêtre ouverte dans Windows   Fenêtre ouverte dans Windows EmptyVen 18 Fév 2022 - 21:44

Bonsoir Jack,

Et un grand merci pour ces précisions que je vais étudier de près !

PS
Pas évident de paramétrer l'appel à la user32...
pour le moment j'y arrive pas... Embarassed
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

Fenêtre ouverte dans Windows Empty
MessageSujet: Re: Fenêtre ouverte dans Windows   Fenêtre ouverte dans Windows EmptySam 19 Fév 2022 - 9:11

JL35 a écrit:
Pas évident de paramétrer l'appel à la user32...
pour le moment j'y arrive pas...

Voici un début (je n'ai pas le temps de continuer ...) :
Code:
dim handle%,adrs%,nom$
dll_on "user32.dll"
rem recherche du handle de la fenêtre "Calculatrice"
nom$="Calculatrice"
adrs%=adr(nom$)
peek_reverse
handle%=dll_call2("FindWindowA",0,peek32(adrs%))
if handle% <> 0
print "handle de la fenêtre = "+str$(handle%)

rem recherche de la position et de la taille
rem A COMPLETER

else
print "la fenêtre n'existe pas"
end_if
dll_off
end

J'ai pris l'exemple de la Calculatrice.
Tu lances la Calculatrice de Windows et tu exécutes ce code: il te fournit le handle de la fenêtre de la calculatrice.
Si la calculatrice n'est pas lancée, il te l'indique (print "la fenêtre n'existe pas") car dans ce cas, la valeur du handle est nulle.

_________________
Fenêtre ouverte dans Windows Webdav username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Fenêtre ouverte dans Windows Empty
MessageSujet: re   Fenêtre ouverte dans Windows EmptySam 19 Fév 2022 - 11:04

Salut tout le monde !

Tu as les fonction de KGF :
- GetWindowByTitle qui te renvoie le handle d'une fenêtre dont tu connais le titre.
- GetFormMetrics qui te renvoie les dimensions et je pense la position d'une fenêtre dont on connait le handle.
- GetFormClientMetrics pour ce qui doit être de la surface client.

Wink

Ha ce Klaus...si on ne l'avait pas il faudrait l'inventer.
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Fenêtre ouverte dans Windows Empty
MessageSujet: Re: Fenêtre ouverte dans Windows   Fenêtre ouverte dans Windows EmptySam 19 Fév 2022 - 12:04

Merci Jack, je pense qu'avec ton exemple tout va aller mieux :

Yannick, je e suis dit après coup que j'aurais du regarder dans KGF.dll, c'est ce que je vais faire.

Merci en tout cas à vous deux, ça m'aide beaucoup !
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

Fenêtre ouverte dans Windows Empty
MessageSujet: Re: Fenêtre ouverte dans Windows   Fenêtre ouverte dans Windows EmptySam 19 Fév 2022 - 12:18

J'ai terminé mon code.
Le voici au complet avec l'exemple de la Calculatrice de Windows. Je l'ai commenté.
Il faut bien-sûr remplacer "Calculatrice " par le contenu du bandeau de la fenêtre désirée.

Code:
dim handle%,adrs%,bidon%,texte$,texte2$
dll_on "user32.dll"

rem recherche du handle de la fenêtre "Calculatrice"
texte$="Calculatrice"
adrs%=adr(texte$): rem adresse de l'adresse de texte$
peek_reverse: rem car Windows est du type Big Endian
handle%=dll_call2("FindWindowA",0,peek32(adrs%)): rem peek32 est donc un pointeur sur texte$

rem si handle% est nul, la fenêtre n'existe pas

if handle% <> 0
   print "handle de la fenêtre = "+str$(handle%): rem pour info

   rem recherche de la position et de la taille
   texte2$="ABCDABCDABCDABCD": rem string de 4 fois 4 octets pour recueillir LEFT, TOP, RIGHT, BOTTOM

   rem texte2$ doit être considéré comme un "buffer de réception" pour la fonction GetWindowRect

   adrs%=adr(texte2$) : rem adresse de l'adresse de texte2$
   bidon%=dll_call2("GetWindowRect",handle%,peek32(adrs%)): rem cette fonction GetWindowRect va remplir texte2$

   adrs%=peek32(adrs%): rem pointeur sur la réponse de GetWindowRect, c'est à dire directement sur le contenu de text2$

   rem on exploite la réponse de GetWindowrect :
   print "LEFT = "+str$(peek32(adrs%))
   print "TOP = "+str$(peek32(adrs%+4))
   print "RIGHT = "+str$(peek32(adrs%+8))
   print "BOTTOM = "+str$(peek32(adrs%+12))
   print "WIDTH = "+str$(peek32(adrs%+8)-peek32(adrs%)): rem RIGHT - LEFT
   print "HEIGHT = "+str$(peek32(adrs%+12)-peek32(adrs%+4)): rem BOTTOM - TOP
else
   print "la fenêtre n'existe pas"
end_if
dll_off
end

JL35 a écrit:
je e suis dit après coup que j'aurais du regarder dans KGF.dll, c'est ce que je vais faire.

Tu comprendras que je me devais de te répondre avec un code en "panoramic pur".
Ceci dit, la DLL de Klaus est remarquable, autant par sa simplicité d'utilisation que par sa documentation très riche et précise. Elle peut rendre service dans beaucoup de cas.

Je reconnais que ce code n'est pas pour un "programmeur du dimanche" mais si quelqu'un a des questions sur ce code, je me ferai une joie de donner des explications.

_________________
Fenêtre ouverte dans Windows Webdav username : panoramic@jack-panoramic password : panoramic123
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Fenêtre ouverte dans Windows Empty
MessageSujet: Re: Fenêtre ouverte dans Windows   Fenêtre ouverte dans Windows EmptySam 19 Fév 2022 - 13:59

Dans tous les cas, un grand merci à toi Jack pour cet exemple complet.
C'est vrai qu'on ne sert pas de ces fonctions tous les jours, mais quand on en a besoin on est bien contents de les trouver
Je vais étudier ton code plus en détail.
En attendant je regardais chez l'ami klaus et j'en ai déduit cette petite sub qui répond à mes besoins immédiats:
Code:
DIM Titre$,x1%,y1%,w1%,h1%,x2%,y2%,w2%,h2%
Titre$ = "PANORAMIC EDITOR": ' Titre de la fenêtre cherchée
Fenetre_Win(Titre$)
font_size 0,12
print: PRINT " x1 = "+STR$(x1%)+"  y1 = "+STR$(y1%)+"  w1 = "+STR$(w1%)+"  h1 = "+STR$(h1%)
print: PRINT " x2 = "+STR$(x2%)+"  y2 = "+STR$(y2%)+"  w2 = "+STR$(w2%)+"  h2 = "+STR$(h2%)
END

SUB Fenetre_Win(Titre$)
  ' Position et dimensions externes et internes de la fenêtre d'exécution
  ' contenant la séquence Titre$
  ' Ex: Fenetre_Win("Portail Orange")
  ' Résultat dans les variables suivantes définies dans l'appelant:
  '           x1%,y1%,w1%,h1% (position et dimensions externes de la fenêtre)
  '   et dans x2%,y2%,w2%,h2% (idem internes, sans les bordures)
  DIM_LOCAL kgf$,res%,hnd%
  kgf$ = "C:\PANORAMIC\KGF\KGF.dll": ' À ajuster !
  DLL_ON kgf$
  hnd% = dll_call2("GetWindowByTitle",1,adr(titre$)): ' n° handle
  ' position et dimensions externes
  res% = DLL_call5("GetFormMetrics",hnd%,adr(x1%),adr(y1%),adr(w1%),adr(h1%))
  ' position et dimensions internes (sans les bordures)
  res% = DLL_call5("GetFormClientMetrics",hnd%,adr(x2%),adr(y2%),adr(w2%),adr(h2%))
  DLL_OFF
END_SUB

PS
à Jack,
je viens de tester ton code qui est très instructif et efficace, merci !
Du coup j'en ai fait une sub, copiée quasi textuellement sur ton exemple:
Code:
IM Titre$,x%,y%,w%,h%
Titre$ = "PANORAMIC EDITOR"
Fenetre_W1(Titre$)
print "Left= "+STR$(x%): PRINT " Top= "+STR$(y%)
PRINT "larg= "+STR$(w%): PRINT "Haut= "+STR$(h%)
END

SUB Fenetre_W1(Titre$)
  ' Position et dimensions de la fenêtre d'exécution du programme contenant
  ' la chaîne Titre$ dans le titre de la fenêtre.
  ' Résultats dans x%,y%,w%,h% définis dans l'appelant
  DIM_LOCAL handle%,adrs%,bidon%,texte2$,x1%,y1%
  DLL_ON "user32.dll"
  ' recherche du handle de la fenêtre
  adrs%=ADR(Titre$): ' adresse de l'adresse de texte$
  PEEK_REVERSE: ' car Windows est du type Big Endian
  handle%=DLL_CALL2("FindWindowA",0,PEEK32(adrs%)): ' peek32 est donc un pointeur sur Titre$
    ' si handle% est nul, la fenêtre n'existe pas
  IF handle% <> 0
      ' recherche de la position et de la taille
      texte2$="ABCDABCDABCDABCD": ' string 4x4 octets pour LEFT, TOP, RIGHT, BOTTOM
      ' texte2$ doit être considéré comme un "buffer de réception" pour la fonction GetWindowRect
      adrs%=adr(texte2$) : ' adresse de l'adresse de texte2$
      bidon%=DLL_CALL2("GetWindowRect",handle%,PEEK32(adrs%)): ' cette fonction GetWindowRect va remplir texte2$
      adrs%=PEEK32(adrs%): ' pointeur sur la réponse de GetWindowRect, c'est à dire directement sur le contenu de text2$
      ' on exploite la réponse de GetWindowrect :
      x% = PEEK32(adrs%): y% = PEEK32(adrs%+4): ' haut/gauche
      x1% = PEEK32(adrs%+8): y1% = PEEK32(adrs%+12): ' bas/droite
      w% = x1%-x%: h% = y1%-y%: ' -> largeur/hauteur
  ELSE
      MESSAGE "la fenêtre n'existe pas"
  END_IF
  DLL_OFF
END_SUB
Revenir en haut Aller en bas
Contenu sponsorisé





Fenêtre ouverte dans Windows Empty
MessageSujet: Re: Fenêtre ouverte dans Windows   Fenêtre ouverte dans Windows Empty

Revenir en haut Aller en bas
 
Fenêtre ouverte dans Windows
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Afficher l'aide de KGF.dll dans une fenêtre Panoramic
» Windows 7/8 vers Windows 10
» Recupérer une icone windows dans panoramic
» [RESOLU] Fichier en ACCES REFUSE dans Windows
» Windows Defender détecte un trojan dans Panoramic (résolu)

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Présentation et bavardage-
Sauter vers: