- Сообщения
- 5,379
- Репутация
- 2,724
Вот написал функцию для обновления иконок в системе. В XP работает как нужно, но нет сейчас возможности проверить на Vista/7. Просьба, у кого установлена Vista/7 проверить нижеследующий пример на работоспособность в этих системах.
Код:
#Include <Constants.au3>
#Include <GUIListView.au3>
#Include <WinAPIEx.au3>
Func _RebuildIconCache()
Local $Data, $Item = 0, $hSysListView32 = 0
$Data = _WinAPI_EnumChildWindows(_WinAPI_GetDesktopWindow(), 0)
If IsArray($Data) Then
For $i = $Data[0][0] To 1 Step -1
If ($Data[$i][1] = 'SysListView32') And (_WinAPI_GetWindowLong($Data[$i][0], $GWL_ID) = 1) Then
$hSysListView32 = $Data[$i][0]
ExitLoop
EndIf
Next
EndIf
If Not $hSysListView32 Then
Return 0
EndIf
$Data = _GUICtrlListView_GetItemCount($hSysListView32)
If $Data Then
Dim $Item[$Data][2]
EndIf
For $i = 0 To UBound($Item) - 1
$Data = _GUICtrlListView_GetItemPosition($hSysListView32, $i)
If IsArray($Data) Then
For $j = 0 To 1
$Item[$i][$j] = $Data[$j]
Next
EndIf
Next
$Data = RegRead('HKCU\Control Panel\Desktop\WindowMetrics', 'Shell Icon Size')
If @error Then
Return 0
EndIf
RegWrite('HKCU\Control Panel\Desktop\WindowMetrics', 'Shell Icon Size', 'REG_SZ', $Data + 1)
If @error Then
Return 0
EndIf
_GUICtrlListView_BeginUpdate($hSysListView32)
_WinAPI_SendMessageTimeout(0xFFFF, 0x001A, 0x002A, 0, 5000, $SMTO_ABORTIFHUNG)
RegWrite('HKCU\Control Panel\Desktop\WindowMetrics', 'Shell Icon Size', 'REG_SZ', $Data)
_WinAPI_SendMessageTimeout(0xFFFF, 0x001A, 0x002A, 0, 5000, $SMTO_ABORTIFHUNG)
For $i = 0 To UBound($Item) - 1
_GUICtrlListView_SetItemPosition32($hSysListView32, $i, $Item[$i][0], $Item[$i][1])
Next
_GUICtrlListView_EndUpdate($hSysListView32)
Return 1
EndFunc ;==>_RebuildIconCache
_RebuildIconCache()