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
» Logiciel de planétarium.
Fenêtre ouverte dans Windows Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Fenêtre ouverte dans Windows Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Fenêtre ouverte dans Windows Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Fenêtre ouverte dans Windows Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Fenêtre ouverte dans Windows Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Fenêtre ouverte dans Windows Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Fenêtre ouverte dans Windows Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Fenêtre ouverte dans Windows Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Fenêtre ouverte dans Windows Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Fenêtre ouverte dans Windows Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Fenêtre ouverte dans Windows Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Fenêtre ouverte dans Windows Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Fenêtre ouverte dans Windows Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Fenêtre ouverte dans Windows Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Fenêtre ouverte dans Windows Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -17%
(Black Friday) Apple watch Apple SE GPS + Cellular ...
Voir le deal
249 €

 

 Fenêtre ouverte dans Windows

Aller en bas 
3 participants
AuteurMessage
JL35




Nombre de messages : 7112
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 : 2395
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 : 7112
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 : 2395
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 : 8635
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 : 7112
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 : 2395
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 : 7112
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: