récupérer une partie d'une infobulle

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

récupérer une partie d'une infobulle

#1

Message par YuChan »

Bonjour,

Est ce possible de récupérer une image d'une infobulle.
Je m'explique :
Je mets mon curseur sur une icône du bureau et je souhaiterai récupérer l'infobulle (du moins une partie).

Dans mon cas je souhaiterai récupérer la taille du fichier.

Comme ceci :
Image

Est ce faisable ?

Cdt, YuChan
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: récupérer une partie d'une infobulle

#2

Message par TommyDDR »

Le but du programme est-il de récupérer la taille d'un fichier ?
si oui :
Local $size = FileGetSize(@DesktopDir & "\Need urgent.txt")
MsgBox(0, "", $size & " octets")
Si vraiment vous voulez récupérer la taille qui se trouve à l'intérieur de la tooltip (qui peut être erronée si le cache concernant les fichiers n'est pas à jour), vous pouvez faire cela (mais je vous le déconseille fortement) :
#include <GuiToolTip.au3>
#include <WinAPISysInternals.au3>

While 1
   checkNearestTooltip(callBack)
   Sleep(10)
WEnd

Func callBack($txt)
   MsgBox(0, "", "Taille trouvée : " & $txt)
EndFunc

Func checkNearestTooltip($func)
   Local Static $lastSize = -1
   Local $nearestDistance = -1
   Local $nearestTooltip = Null
   Local $hwnds = WinList()
   For $i = 1 To UBound($hwnds, 1) - 1
      Local $hwnd = $hwnds[$i][1]
      if(BitAND(WinGetState($hwnd), 2) = 2 And _WinAPI_GetClassName($hwnd) == "tooltips_class32") Then
         Local $ttip = _GUIToolTip_GetCurrentTool($hwnd)
         Local $mousePos = MouseGetPos()
         Local $wPos = WinGetPos($hwnd)
         Local $distance = Sqrt(($mousePos[0] - $wPos[0]) ^ 2 + ($mousePos[1] - $wPos[1]) ^ 2)
         If($nearestDistance == -1 Or $distance < $nearestDistance) Then
            $nearestDistance = $distance
            $nearestTooltip = $ttip
         EndIf
      EndIf
   Next
   If($nearestDistance >= 0) Then
      Local $size = StringBetween($nearestTooltip[8], "Taille : ", @LF)
      If(StringLen($size) > 0 And $size <> $lastSize) Then
         $lastSize = $size
         $func($size)
      EndIf
   EndIf
EndFunc

Func StringBetween($txt, $start, $end)
   Local $startPos = StringInStr($txt, $start)
   Local $endPos = StringInStr($txt, $end, 0, 1, $startPos)
   Local $stringBetween = ""
   If($startPos > 0 And $endPos > 0) Then
      $startPos += StringLen($start)
      Local $count = $endPos - $startPos
      $stringBetween = StringMid($txt, $startPos, $count)
   EndIf
   Return $stringBetween
EndFunc
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: récupérer une partie d'une infobulle

#3

Message par walkson »

Bonjour,
Le code que je vous propose ne répond pas vraiment à votre question mais il permet de récupérer un bon nombre d'informations sur un fichier.
Je l'utilise principalement sur des vidéos ou des images mais il fonctionne sur tout type de fichier, y compris des EXE.
La première fonction renvoie une information ex: _FileGetDetails($File,27) qui est la longueur
La deuxième fonction renvoie tout (186 infos en fonction du fichier)

Code : Tout sélectionner

$File = FileOpenDialog("",@DesktopDir,"all(*.*)")
;MsgBox(0,"",$File)
;_FileGetDetails($File,27)
_FileGetDetailsAll($File)
Func _FileGetDetails($File, $Prop = 0)
   Dim $arrHeaders[35]
   $objShell = ObjCreate("Shell.Application")
   $Path = StringLeft($File, StringInStr($File, "\", 0, -1) -1)
   $fName = StringMid($File, StringInStr($File, "\", 0, -1) +1)
   $objFolder = $objShell.Namespace($Path)
   For $i = 0 to 34
    $arrHeaders[$i] = $objFolder.GetDetailsOf($objFolder.Items, $i)
   Next
   For $Filename In $objFolder.Items
      If $objFolder.GetDetailsOf($Filename, 0) = $fName Then
         MsgBox(0, $objFolder.GetDetailsOf($Filename, 0), $arrHeaders[$Prop] & " : " & $objFolder.GetDetailsOf($Filename, $Prop))
         ExitLoop
      EndIf
   Next
EndFunc;<==> _FileGetDetails($File)
Func _FileGetDetailsAll($File);; $File is the Full path and file name if the file to check.GEOSoft
   $objShell = ObjCreate("Shell.Application")
   $Path = StringLeft($File, StringInStr($File, "\", 0, -1) -1)
   $fName = StringMid($File, StringInStr($File, "\", 0, -1) +1)
   $objFolder = $objShell.Namespace($Path)
   $objVerbs = $objFolder.Self.Verbs
   Local $dt, $dt1
   For $Filename In $objFolder.Items
      For $i = 0 To 287
	  If $objFolder.GetDetailsOf($Filename, 0) = $fName Then  $dt &= $i & "  " & $objFolder.GetDetailsOf(Null, $i) &" >>> "&  $objFolder.GetDetailsOf($Filename, $i)  & @CRLF
	  Next

   Next
FileDelete(@ScriptDir & "\objFolder.txt")
FileWrite(@ScriptDir & "\objFolder.txt",$dt)
ShellExecute(@ScriptDir & "\objFolder.txt")
EndFunc  ;<==> _FileGetDetailsAll($File)
Un exemple d'info sur une photo
0 Nom >>> 20180630_220427.jpg
1 Taille >>> 7,79 Mo
2 Type d’élément >>> IrfanView JPG File
3 Modifié le >>> 03/07/2018 16:13
4 Date de création >>> 03/07/2018 16:13
5 Date d’accès >>> 04/07/2018 14:20
6 Attributs >>> A
7 État hors connexion >>>
8 Hors connexion >>>
9 Type identifié >>> Image
10 Propriétaire >>> PC
11 Sorte >>> Images
12 Prise de vue >>> ‎30/‎06/‎2018 ‏‎22:04
13 Artistes ayant participé >>>
14 Album >>>
15 Année >>>
16 Genre >>>
17 Chefs d’orchestre >>>
18 Mots-clés >>>
19 Notation >>> Non classé
20 Auteurs >>>
21 Titre >>>
22 Objet >>>
23 Catégories >>>
24 Commentaires >>>
25 Copyright >>>
26 N° >>>
27 Longueur >>>
28 Vitesse de transmission >>>
29 Protégé >>>
30 Modèle d'appareil photo >>> SM-G930F
31 Dimensions >>> ‪4032 x 3024‬
32 Appareil photo >>> samsung
Etc....
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Re: récupérer une partie d'une infobulle

#4

Message par YuChan »

Je vous remercie.

je vois qu'il y a des solution a mon problème.

Je voudrais savoir, comment par exemple trouver une autre info dans infobulle sans utiliser d'autre façon que de chercher une image ou une couleur de pixel dans l'info bulle

Merci
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Re: récupérer une partie d'une infobulle

#5

Message par YuChan »

Alors quand je fais ce code il me trouve toujours la couleur et peu importe laquelle.

Code : Tout sélectionner

Global $hWnd = WinGetHandle("PAINT")
MsgBox("", "", $hWnd)

$paintCheckColor = PixelSearch($posPixel[1], $posPixel[2] - 50, $posPixel[1] + 100, $posPixel[2] + 10, 0xF6CB00, $hWnd)
Pourrais je savoir pourquoi ?

En revanche si j’enlève $hWnd ça ne trouve plus aucune couleur !

PS : https://www.autoitscript.fr/autoit3/doc ... tColor.htm
Je comprends pas trop cette fonction

Merci
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: récupérer une partie d'une infobulle

#6

Message par TommyDDR »

YuChan, il va falloir nous expliquer le but de votre programme, vous avez des solutions robustes, vous avez des solutions moins robustes mais qui utilisent la tooltip, et vous imposez la couleur de pixel maintenant.

Merci d'expliquer clairement le but de votre programme.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: récupérer une partie d'une infobulle

#7

Message par mikell »

Et tant qu'à faire, expliquer que vient faire une question sur PixelSearch dans un sujet sur le texte d'une infobulle
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Re: récupérer une partie d'une infobulle

#8

Message par YuChan »

Le but de on programme et récupérer des info sur les fichiers du bureau quand on passe la souris dessus.

Je veux des screen a rechercher

Pour ce qui est de la couleur des pixel, c'est tout simplement pour voir en qu'elle couleur est ecrit le textee.

Merci
Répondre