-
Notifications
You must be signed in to change notification settings - Fork 72
/
Copy pathIcon_speciale.ahk
160 lines (126 loc) · 4.65 KB
/
Icon_speciale.ahk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
Elimina el icono especificado.
Parámetros:
hIcon: El identificador del icono.
Return:
Si tuvo éxito devuelve 1, caso contrario devuelve 0.
*/
DeleteIcon(hIcon)
{
Return (DllCall('User32.dll\DestroyIcon', 'Ptr', hIcon))
} ;https://msdn.microsoft.com/en-us/library/windows/desktop/ms648063(v=vs.85).aspx
/*
Copia el icono especificado.
Parámetros:
hIcon: El identificador del icono.
Return:
Si tuvo éxito devuelve el identificador del nuevo icono, caso contrario devuelve 0.
*/
CopyIcon(hIcon)
{
; DllCall('Shell32.dll\DuplicateIcon', 'Ptr', 0, 'Ptr', hIcon)
Return (DllCall('User32.dll\CopyIcon', 'Ptr', hIcon, 'Ptr'))
} ;https://msdn.microsoft.com/en-us/library/windows/desktop/ms648058(v=vs.85).aspx
/*
Determina si el valor pasado en hIcon es un icono válido.
Parámetros:
hIcon: El identificador a probar.
Return:
Devuelve 1 si es un icono, caso contrario devuelve 0.
*/
IsIcon(hIcon)
{
Return (DllCall('User32.dll\DestroyIcon', 'Ptr', DllCall('User32.dll\CopyIcon', 'Ptr', hIcon, 'Ptr')))
}
/*
Recupera información del icono especificado.
Parámetros:
hIcon : El identificador del icono.
ICONINFO: Devuelve la estructura ICONINFO.
Return:
Si tuvo éxito devuelve 1, caso contrario devuelve 0.
Observaciones:
Debe eliminar los miembros hbmMask y hbmColor llamando a DeleteObject cuando no los utilize más.
*/
GetIconInfo(hIcon, ByRef ICONINFO)
{
VarSetCapacity(ICONINFO, 12 + A_PtrSize*2, 0)
Return (DllCall('User32.dll\GetIconInfo', 'Ptr', hIcon, 'UPtr', &ICONINFO))
} ;https://msdn.microsoft.com/en-us/library/windows/desktop/ms648070(v=vs.85).aspx
/*
Recupera las dimensiones del icono especificado.
Parámetros:
hIcon : El identificador del icono.
Return:
0 = Ha ocurrido un error.
[obj] = Si tuvo éxito devuelve un objeto con las claves W y H.
Ejemplo:
hIcon := LoadPicture(FileSelect(,,, '(*.ico)'),, ImageType) ;ImageType=1
Size := GetIconSize(hIcon), DeleteIcon(hIcon)
MsgBox(Size.W . 'x' . Size.H)
*/
GetIconSize(hIcon)
{
Local ICONINFO
If (!GetIconInfo(hIcon, ICONINFO))
Return (FALSE)
DllCall('Gdi32.dll\DeleteObject', 'Ptr', NumGet(&ICONINFO + 8 + A_PtrSize, 'Ptr'))
DllCall('Gdi32.dll\DeleteObject', 'Ptr', NumGet(&ICONINFO + 8 + A_PtrSize*2, 'Ptr'))
Return ({W: NumGet(&ICONINFO + 4, 'UInt'), H: NumGet(&ICONINFO + 8, 'UInt')})
}
/*
Recupera la cantidad de iconos en el archivo especificado (1 si es ICO). Si el archivo es un ejecutable o DLL devuelve el número de recursos RT_GROUP_ICON.
Parámetros:
FilePath: La ruta y nombre del archivo.
Return:
Si tuvo éxito devuelve la cantidad de iconos, caso contrario devuelve 0.
*/
GetIconFileCount(FilePath)
{
Return (DllCall('Shell32.dll\ExtractIconW', 'Ptr', 0, 'UPtr', &FilePath, 'Int', -1))
} ;https://msdn.microsoft.com/en-us/library/windows/desktop/ms648068(v=vs.85).aspx
/*
Recupera información del archivo icono especificado.
Parámetros:
IconPath: La ruta del archivo icono.
Return:
0 = El archivo especificado es inválido.
[array] = Si tuvo éxito devuelve un array de objetos con la información de cada icono disponible. Las claves disponibles son: W, H, ColorCount, Planes y BitCount.
Ejemplo:
For Each, Icon in GetIconFileInfo(FileSelect())
Str .= 'Icon #' . A_Index . ' [W:' . Icon.W . ' | H:' . Icon.H . ' | BC:' . Icon.BitCount . '`n'
MsgBox(Str)
*/
GetIconFileInfo(IconPath)
{
Local File
If (!(File := FileOpen(IconPath, 'r')))
Return (FALSE)
; Comprobamos que el archivo sea un ícono.
File.Seek(2)
If (File.ReadUShort() != 1) ;ICONDIR.idType --> Resource Type (1 for icons)
Return (FALSE)
; Leemos la cantidad de iconos en el archivo (distintas dimensiones y profundidad de bits).
Local Count
If (!(Count := File.ReadUShort()))
Return (FALSE)
; Comprobamos que el archivo no esté corrupto.
If (File.Length < 6 + 16 * Count)
Return (FALSE)
; Recuperamos información de cada icono.
Local Obj
, Info := []
Loop (Count)
{
File.Seek(6 + 16 * A_Index) ;ICONDIR + (ICONDIRENTRY * A_Index)
Obj := {}
Obj.W := File.ReadUChar()
Obj.H := File.ReadUChar()
Obj.ColorCount := File.ReadUChar()
File.Seek(1, 1)
Obj.Planes := File.ReadUShort()
Obj.BitCount := File.ReadUShort()
Info.Push(Obj)
}
Return (Info)
} ;https://msdn.microsoft.com/en-us/library/ms997538.aspx