Функция SendMessageTimeout

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
SendMessageTimeout посылает сообщение окну или окнам. Функция вызывает оконную процедуру для обработки сообщения. Если окно принадлежит другому потоку, функция позволяет задать интервал тайм-аута, предотвращающий бесконечное ожидание в случае зависания другого потока. Эта функция не возвращается, пока окно не завершит обработку сообщения. Если окно принадлежит текущему потоку, то тайм-аут игнорируется

Возвращаемое значение

В успешном случае функция возвращает ненулевое значение. В случае ошибки возвращается 0 (используйте GetLastError - если GetLastError возвратит 0, значит функция SendMessageTimeout зависла)

Параметры

hWnd
Дескриптор окна, принимающее сообщение
msg
Идентификатор сообщения
wParam
Дополнительные определенные данные сообщения
lParam
Дополнительные определенные данные сообщения
fuFlags
Комбинация флагов, определяющих обработку сообщений
SMTO_ABORTIFHUNG = &H2Если процесс завис, то функция немедленно возвращает управление
SMTO_BLOCKВызывающая нить не обрабатывает сообщения до возвращения из функции
SMTO_NORMALВызывающая нить может обрабатывать сообщения во время работы функции
SMTO_NOTIMEOUTIFNOTHUNGWindows 2000 и выше: Сообщение не возвращается, пока не закончится тайм-аут, если нить не зависла
uTimeout
Продолжительность тайм-аута в миллисекундах
lpdwResult
Получает результат вызова функции. Зависит от сообщения

Пример

' Установим новые размеры значков,
' используемых оболочкой (на рабочем столе, в проводнике и т.д.)
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

Категория

Сообщения