récupérer une partie d'une infobulle
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- TommyDDR
- Modérateur
- Messages : 2087
- Enregistré le : mar. 22 juil. 2008 21:55
- Localisation : Nantes
- Status : Hors ligne
Re: récupérer une partie d'une infobulle
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) :
si oui :
#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
#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
- walkson
- 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
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)
Un exemple d'info sur une photo
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)
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)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Re: récupérer une partie d'une infobulle
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
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
Alors quand je fais ce code il me trouve toujours la couleur et peu importe laquelle.
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
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)
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
- TommyDDR
- Modérateur
- Messages : 2087
- Enregistré le : mar. 22 juil. 2008 21:55
- Localisation : Nantes
- Status : Hors ligne
Re: récupérer une partie d'une infobulle
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.
Merci d'expliquer clairement le but de votre programme.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
- mikell
- 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
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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: récupérer une partie d'une infobulle
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
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