Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal fuFlags As Long, ByVal uTimeout As Long, lpdwResult As Long) As Long
В успешном случае функция возвращает ненулевое значение. В случае ошибки возвращается 0 (используйте GetLastError - если GetLastError возвратит 0, значит функция SendMessageTimeout зависла)
SMTO_ABORTIFHUNG = &H2 | Если процесс завис, то функция немедленно возвращает управление |
SMTO_BLOCK | Вызывающая нить не обрабатывает сообщения до возвращения из функции |
SMTO_NORMAL | Вызывающая нить может обрабатывать сообщения во время работы функции |
SMTO_NOTIMEOUTIFNOTHUNG | Windows 2000 и выше: Сообщение не возвращается, пока не закончится тайм-аут, если нить не зависла |
' Установим новые размеры значков, ' используемых оболочкой (на рабочем столе, в проводнике и т.д.) Dim result As Long ' Запишем в реестр новый размер значков, например 64 пикселей SetRegKeyValue HKEY_CURRENT_USER, _ "Control Panel\Desktop\WindowMetrics", _ "Shell Icon Size", "64" ' Посылаем HWND_BROADCAST, чтобы обновить значки SendMessageTimeout HWND_BROADCAST, WM_SETTINGCHANGE, _ SPI_SETNONCLIENTMETRICS, 0&, SMTO_ABORTIFHUNG, _ 10000&, result
' функция-оболочка для установки значения в реестр Private Sub SetRegKeyValue(ByVal root As Long, ByVal key_name As String, ByVal subkey_name As String, ByVal subkey_value As String) Dim hKey As Long Dim value As String Dim length As Long Dim value_type As Long ' Открываем ключ If RegOpenKeyEx(root, key_name, _ 0&, KEY_SET_VALUE Or KEY_CREATE_SUB_KEY, _ hKey) <> ERROR_SUCCESS _ Then MsgBox "Ошибка при открытии ключа" Exit Sub End If ' Сохраняем значение subkey_value = subkey_value & vbNullChar If RegSetValueEx(hKey, subkey_name, 0, _ REG_SZ, ByVal subkey_value, _ Len(subkey_value)) <> ERROR_SUCCESS _ Then MsgBox "Ошибка при сохранении значения" Exit Sub End If ' Закрываем реестр If RegCloseKey(hKey) <> ERROR_SUCCESS Then MsgBox "Ошибка при закрытии раздела" End If End Sub