Page 1 sur 1
récupérer une partie d'une infobulle
Posté : mar. 11 mai 2021 13:21
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 :
Est ce faisable ?
Cdt, YuChan
Re: récupérer une partie d'une infobulle
Posté : mar. 11 mai 2021 14:15
par TommyDDR
Le but du programme est-il de récupérer la taille d'un fichier ?
si oui :
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)WEndFunc callBack
($txt) MsgBox(0, "", "Taille trouvée : " & $txt)EndFuncFunc 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 EndIfEndFuncFunc 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 $stringBetweenEndFunc
Re: récupérer une partie d'une infobulle
Posté : mar. 11 mai 2021 22:43
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....
Re: récupérer une partie d'une infobulle
Posté : mer. 12 mai 2021 02:12
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
Re: récupérer une partie d'une infobulle
Posté : mer. 12 mai 2021 10:04
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
Re: récupérer une partie d'une infobulle
Posté : mer. 12 mai 2021 15:13
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.
Re: récupérer une partie d'une infobulle
Posté : mer. 12 mai 2021 21:17
par mikell
Et tant qu'à faire, expliquer que vient faire une question sur PixelSearch dans un sujet sur le texte d'une infobulle
Re: récupérer une partie d'une infobulle
Posté : jeu. 13 mai 2021 00:37
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