Страницы: 1
RSS
API функция SHMessageBoxCheckA, Как ею пользоваться?
 
Здравствуйте. Не могу разобраться с функцией SHMessageBoxCheckA. Покажите пожалуйста пример.
Должно выглядеть примерно так:

Пробовал так:
Код
Private Declare Function SHMessageBoxCheck Lib "shlwapi" Alias "#185" (ByVal hWnd As Long, _
    ByVal lpszText As String, ByVal lpszTitle As String, ByVal dwType As VbMsgBoxStyle, _
    ByVal iDefault As Long, ByVal lpszId As String) As Long

Sub testMSGCHK()
    Dim message As Long
    message = SHMessageBoxCheck(ActiveWindow, "Text", "Title", vbOKCancel, vbOK, "{d9118bc3-8a61-4398-bfbc-b02102c77e8a}")
    Debug.Print message
End Sub
 
Доброе время суток.
Сработавший в 2016 32бит вариант
Код
Private Declare Function SHMessageBoxCheckA Lib "shlwapi" (ByVal hWnd As Long, _
    ByVal lpszText As String, ByVal lpszTitle As String, ByVal dwType As VbMsgBoxStyle, _
    ByVal iDefault As Long, ByVal lpszId As String) As Long
 
Sub testMSGCHK()
    Dim message As Long
    message = SHMessageBoxCheckA(Application.hWnd, "Текст сообщения", "Заголовок окна", vbOKCancel Or vbInformation, vbOK, "{d9118bc3-8a61-4398-bfbc-b02102c77e8a}")
    Debug.Print message
End Sub
 
Доброго и Вам Андрей VG. Большое спасибо, что откликнулись. На Win64, Office2010-32-bit все отлично сработало:



А на Win64, Office2016-64-bit выдало ошибку:
______________

______________
Пошарил по сети нашел решение, но в Office2016-64-bit куски кода подсвечиваются красным, но при этом все работает и в Office2010-32-bit ничего красным не подсвечивается.

Код

Настройка "не показывать ... это окно" находится в системном реестре и имя параметра можно давать попроще, в смысле вместо "{d9118bc3-8a61-4398-bfbc-b02102c77e8a}", можно "mySetting".


Чтобы сообщение опять показывалось, нужно просто удалить параметр "mySetting".
Изменено: DANIKOLA - 11.10.2023 21:19:41
 
Цитата
DANIKOLA: На Win64, Office2010-32-bit все отлично сработало … А на Win64, Office2016-64-bit выдало ошибку
Объявление WinAPI различается для различный версий офиса. Чтобы работало в обоих, объявляются оба варианта (там специальный термин есть, я не помню его) с помощью проверки версии офиса текущего ПК — как у вас. Неактивный вариант при этом подсвечивается (если в настройках формата VBE это не убрано). Ошибкой не является.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Здравствуйте, DANIKOLA!

Попробуйте приложенный вариант файла. Комментарии:

1. Для описания API функций достаточно одного условия условной компиляции #IF VBA7...
2. Следует использовать функцию SHMessageBoxCheckW, а не устаревшую SHMessageBoxCheckA, которая не работает с юникодом.
3. Подробности в этой теме (пункт 1) и в этой.
Изменено: sokol92 - 28.10.2023 20:43:39
Владимир
 
Здравстуйте sokol92. Спасибо, буду знать. Проверил, файл работает на обеих версиях офиса. Вашу тему сохранил в закладки.
Страницы: 1
Наверх