Page 4 sur 4
Re: [R] Système de notifications
Posté : dim. 21 août 2011 18:19
par RL77LUC
Eh ben le [..] va revenir pour un court instant, enfin je l'espère x). Juste un petit bug, la fenêtre qui contient le notif.exe monte en même temps que les notifications ... :S
Une solution pour régler ce bug gênant ?
Re: [..] Système de notifications
Posté : dim. 21 août 2011 19:19
par mikell
Aucune raison particulière à ce bug
1 - vérifie que cette fenêtre n'a pas comme titre "Notification"
2 - au début de la fonction modifie ça :
Code : Tout sélectionner
$var = WinList("Notification")
For $i = 1 to $var[0][0]
If WinExists($var[$i][[color=#FF0000][b]1[/b][/color]]) Then
$prevpos = WinGetPos($var[$i][[color=#FF0000][b]1[/b][/color]])
WinMove($var[$i][[color=#FF0000][b]1[/b][/color]], "", $prevpos[0], $prevpos[1]-80)
EndIf
Next
3 - si ça ne va toujours pas, envoie-moi tout ça, que je puisse reproduire le bug sur mon pc
Re: [..] Système de notifications
Posté : lun. 22 août 2011 07:40
par RL77LUC
Toujours rien. Je mets une archive qui contient tout en PJ.
Re: [..] Système de notifications
Posté : lun. 22 août 2011 12:56
par mikell
Je suis pas arrivé à reproduire ça... chez moi y a que les notifs qui bougent
Essaie de donner un autre nom à la fenêtre ou de la fermer quand tu lances le script (raccourci)
Il faudrait aussi laisser un sleep(300) à la fin de la fonction Notif() pour laisser aux informations le temps de se transmettre, et utiliser une police standard
Re: [..] Système de notifications
Posté : lun. 22 août 2011 15:42
par RL77LUC
Je suis idiot ^^. Le dossier se nommait "Notifications", le soucis venait de là. Merci pour ton aide, je repasse en résolu

.
Re: [R] Système de notifications
Posté : lun. 22 août 2011 17:31
par mikell
RL77LUC a écrit :Je suis idiot ^^. Le dossier se nommait "Notifications", le soucis venait de là.
Je confirme ! 
Et tu n'écoutes pas ce qu'on te dit, en plus !
Bourricot ! Hier après-midi, mikell a écrit :Aucune raison particulière à ce bug
1 - vérifie que cette fenêtre n'a pas comme titre "Notification"
Tu réalises le temps qu'on peut perdre à chercher un bug imaginaire ?
Re: [R] Système de notifications
Posté : mar. 23 août 2011 12:39
par RL77LUC
Pour ma défense, je suis sous Windows, et je pensais que la fenêtre se nommait Explorateur Windows étant donné qu'il n'y a rien d'écrit dessus, c'est après que j'ai vérifié sur la barre des taches, qui n'était pas combinée et donc qui n'affichait pas le titre non plus. ^^
Re: [R] Système de notifications
Posté : mar. 23 août 2011 13:34
par mikell
OK
Dans son fonctionnement le script check les titres de fenêtre
Donc pour être sûr d'être à l'abri de ce genre de bug tu peux toujours donner aux notifications des noms exotiques type "ckfkobigf1", "ckfkobigf2", etc

Re: [R] Système de notifications
Posté : mer. 24 août 2011 08:59
par RL77LUC
Oui, si je vois une fenêtre de ce nom, alors là je change d'OS direct x). Par contre j'ai un petit soucis : J'ai changé de répertoire, et quand je fais appel à un script dans un dossier qui n'est pas le même que celui des notifications, elle fait le fondu d'apparition et enchaîne sur celui de disparition. De plus, le texte ne s'affiche plus, même si je fais appel à un script dans le même dossier ...
Re: [R] Système de notifications
Posté : mer. 24 août 2011 12:06
par mikell
RL77LUC a écrit :J'ai changé de répertoire, et quand je fais appel à un script dans un dossier qui n'est pas le même que celui des notifications, elle fait le fondu d'apparition et enchaîne sur celui de disparition. De plus, le texte ne s'affiche plus, même si je fais appel à un script dans le même dossier ...
Pour le texte, dans l'exemple que tu avais mis tu utilisais une police "Helvetica" que je n'avais pas sur mon XP, donc pas de texte affiché ^^
Par exemple, dans mon script j'avais mis la "Comic Sans MS" qui existe d'origine sur tous les Windows donc jamais de souci
Pour le reste ici je n'ai pas de problème en changeant de répertoire => vérifie les chemins et les valeurs de timeout
Re: [R] Système de notifications
Posté : mer. 24 août 2011 17:41
par RL77LUC
Pour le texte en effet, j'ai oublié comme un idiot que j'avais changé d'OS x) (Encore un truc d'idiot, je sais, ça fait beaucoup

). J'ai vérifié les chemins et les valeurs de TimeOut. J'ai mis une seule particularité : Vu que c'est dans des dossiers parents, j'ai fait "..\NotifyMe\notif.exe", ça pose problème ?
Re: [R] Système de notifications
Posté : mer. 24 août 2011 18:43
par mikell
RL77LUC a écrit :ça pose problème ?
A priori et vu les posts précédents je pencherais pour l'erreur humaine
Je crois pas trop à une histoire de chemin (sinon ça marcherait pas du tout) mais fais des tests en mettant les chemins complets et tu verras bien...
ça m'évoque quand même furieusement une histoire de timeout (le seul moyen de reproduire ça est de mettre $timeout = 1)
Re: [R] Système de notifications
Posté : mer. 24 août 2011 23:11
par RL77LUC
Le TimeOut est bel et bien sur 0, j'utilise exactement les mêmes paramètres depuis le script dans le même dossier et paf, ça marche. Donc je ne vois pas de quoi ça peut venir si ce n'est de l'arborescence ...
Re: [R] Système de notifications
Posté : jeu. 25 août 2011 01:05
par mikell
Là, je cale...
éventuellement, essaie de mettre des Sleep(100) dans la fonction Notif() parce que comme les données transitent par le presse-papiers entre le script de commande et l'exe, il faut leur laisser un peu de temps
Re: [R] Système de notifications
Posté : jeu. 25 août 2011 09:38
par RL77LUC
Je ne pense pas que ça vienne de là car c'est la bonne image qui s'affiche. Le seul problème est qu'elle disparait aussitôt après être apparue (Les deux fondus enchaînent).
Re: [R] Système de notifications
Posté : jeu. 25 août 2011 21:42
par mikell
OK, c'est bien une histoire de chemin mais c'est un peu tordu.... 2 solutions
solution 1 :
tu crées un raccourci de notif.exe que tu places dans le même dossier que le script de commande, en modifiant le script comme ça :
► Afficher le texte
Code : Tout sélectionner
#include <Clipboard.au3>
[color=#FF0000]$notifexedir = @scriptdir & "\test1\test2\"
If not FileExists(@scriptdir & "\notif.lnk") Then FileCreateShortcut($notifexedir & "notif.exe",@scriptdir & "\notif.lnk", $notifexedir)
Sleep(500)[/color]
_Notif("TEST","cp", "10000")
Sleep(100)
_Notif("TEST","is")
Sleep(100)
_Notif("TEST","technos")
Func _Notif($text, $bk = "default", $timeout = 0)
$bk = $bk & ".png"
$data = $text & "#" & $timeout & "#" & $bk
_ClipBoard_SetData ($data)
Sleep(100)
[color=#FF0000]ShellExecute(@scriptdir & "\notif.lnk")[/color]
Sleep(100)
EndFunc
c'est bourrin mais ça fonctionne... ^^
solution 2 :
tu modifies directement le script de commande comme ça :
► Afficher le texte
Code : Tout sélectionner
Func _Notif($text, $bk = "default", $timeout = 0)
[color=#FF0000]$notifexedir = @scriptdir & "\test1\test2"
FileChangeDir($notifexedir)[/color]
$bk = $bk & ".png"
$data = $text & "#" & $timeout & "#" & $bk
_ClipBoard_SetData ($data)
Sleep(100)
[color=#FF0000]ShellExecute(@workingdir & "\notif.exe")[/color]
Sleep(100)
EndFunc
Re: [R] Système de notifications
Posté : ven. 26 août 2011 10:58
par RL77LUC
J'ai opté pour la solution 2, qui me semble plus propre ^^. Le soucis est résolu. J'ai une dernière petite demande, après normalement tout sera OK. Je cherche un moyen d'installer la police Helvetica-Bold à partir d'un TTF (TrueType), j'ai testé plusieurs méthodes sur le forum anglais, rien n'a fonctionné. Aurais-tu un "truc" qui fonctionne aussi avec GDI+ ?
Re: [R] Système de notifications
Posté : ven. 26 août 2011 14:37
par mikell
L'installation et l'utilisation d'une police, ça n'a strictement rien à voir avec GDI+
Voilà un extrait d'un de mes scripts où j'utilise une police 'maison' en ttf, je n'ai laissé que ce qui concerne l'installation et l'usage de la police en ne gardant des includes que les fonctions 'utiles'
Il faut évidemment adapter les noms de police et de fichier
► Afficher le texte
Code : Tout sélectionner
Global Const $FR_NOT_ENUM = 0x20
Global Const $CSIDL_FONTS = 0x0014
Global $sFont = "Post It Medieval Rough" ; [color=#008000]<= nom de la police[/color]
Global $iSize = 21
Global $iWeight = 400
Global $iAttrib = 0
$FontPath = _WinAPI_ShellGetSpecialFolderPath($CSIDL_FONTS)
If Not FileExists($FontPath & "\postit_med.ttf") Then
FileInstall (".\postit_med.ttf", @tempdir & "\postit_med.ttf") ; [color=#008000]<= nom du fichier ttf[/color]
_FontInstall(@tempdir & "\postit_med.ttf")
[color=#FF0000] If @error Then
$sFont = "Comic Sans MS" [/color] ; [color=#008000]<= important, la police 'de secours' en cas d'échec de l'installation[/color]
$iSize = 18
$iWeight = 400
EndIf
EndIf
;######################
FONCTIONS
;=========================================================
; Yashield
;http://www.autoitscript.com/forum/topic/121885-true-type-fonts-install/page__view__findpost__p__846016
Func _FontInstall($sFile)
Local $Font, $Name, $Path
$Name = _WinAPI_GetFontResourceInfo($sFile, 1)
If @error Then
Return SetError(1, 0, 0)
EndIf
$Name &= ' (TrueType)'
$Font = StringRegExpReplace($sFile, '^.*\\', '')
If Not RegWrite('HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts', $Name, 'REG_SZ', $Font) Then
Return SetError(2, 0, 0)
EndIf
$Path = _WinAPI_ShellGetSpecialFolderPath($CSIDL_FONTS)
If Not FileCopy($sFile, $Path) Then
RegDelete('HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts', $Name)
Return SetError(3, 0, 0)
EndIf
If Not _WinAPI_AddFontResourceEx($Path & '\' & $Font, 0, 1) Then
Return SetError(4, 0, 0)
EndIf
Return 1
EndFunc ;==>_FontInstall
;====================================================
; WinAPIEx.au3 (Yashield)
;http://www.autoitscript.com/forum/topic/98712-winapiex-udf
;====================================================
Func _WinAPI_ShellGetSpecialFolderPath($CSIDL, $fCreate = 0)
Local $tPath = DllStructCreate('wchar[1024]')
Local $Ret = DllCall('shell32.dll', 'int', 'SHGetSpecialFolderPathW', 'hwnd', 0, 'ptr', DllStructGetPtr($tPath), 'int', $CSIDL, 'int', $fCreate)
If (@error) Or (Not $Ret[0]) Then
Return SetError(1, 0, '')
EndIf
Return DllStructGetData($tPath, 1)
EndFunc ;==>_WinAPI_ShellGetSpecialFolderPath
Func _WinAPI_GetFontResourceInfo($sFont, $fForce = 0)
If $fForce Then
If Not _WinAPI_AddFontResourceEx($sFont, $FR_NOT_ENUM) Then
Return SetError(1, 0, '')
EndIf
EndIf
Local $tData = DllStructCreate('wchar[1024]')
Local $Ret = DllCall('gdi32.dll', 'int', 'GetFontResourceInfoW','wstr', $sFont, 'dword*', 1024, 'ptr', DllStructGetPtr($tData), 'dword', 0x01)
If (@error) Or (Not $Ret[0]) Then
$Ret = 0
EndIf
If $fForce Then
_WinAPI_RemoveFontResourceEx($sFont, $FR_NOT_ENUM)
EndIf
If Not IsArray($Ret) Then
Return SetError(1, 0, '')
EndIf
Return DllStructGetData($tData, 1)
EndFunc ;==>_WinAPI_GetFontResourceInfo
Func _WinAPI_AddFontResourceEx($sFont, $iFlag = 0, $fNotify = 0)
Local $Ret = DllCall('gdi32.dll', 'int', 'AddFontResourceExW', 'wstr', $sFont, 'dword', $iFlag, 'ptr', 0)
If (@error) Or (Not $Ret[0]) Then
Return SetError(1, 0, 0)
EndIf
If $fNotify Then
DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', 0xFFFF, 'uint', 0x001D, 'int', 0, 'int', 0)
EndIf
Return $Ret[0]
EndFunc ;==>_WinAPI_AddFontResourceEx
Func _WinAPI_RemoveFontResourceEx($sFont, $iFlag = 0, $fNotify = 0)
Local $Ret = DllCall('gdi32.dll', 'int', 'RemoveFontResourceExW', 'wstr', $sFont, 'dword', $iFlag, 'ptr', 0)
If (@error) Or (Not $Ret[0]) Then
Return SetError(1, 0, 0)
EndIf
If $fNotify Then
DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', 0xFFFF, 'uint', 0x001D, 'int', 0, 'int', 0)
EndIf
Return 1
EndFunc ;==>_WinAPI_RemoveFontResourceEx
Mais elle est moche la police Helvetica...

Re: [R] Système de notifications
Posté : ven. 26 août 2011 14:50
par RL77LUC
L'helvetica-bold rend très bien sur les notifications. Regarde sur le PSD, c'est elle qui est utilisée, et ça fait très bien, même si le rendu est moins beau via AutoIt. J'essaye ta méthode et te tiens au courant.
EDIT: Cela ne fonctionne pas, mais laisse, je me suis débrouillé avec une autre police inclue dans Windows.