powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как программно запретить закрытие приложения Access для Windows 7 64
6 сообщений из 6, страница 1 из 1
Как программно запретить закрытие приложения Access для Windows 7 64
    #39397213
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Понадобилось запретить закрытие БД Аксесс на "Х" - закрытие не формы, а аксесса в целом(или Runtime). Сделал так:
В отдельном модуле:
Код: vbnet
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.
Option Compare Database
Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, _
   ByVal bRevert As Long) As Long
Private Declare Function EnableMenuItem Lib "user32" (ByVal hMenu As _
   Long, ByVal wIDEnableItem As Long, ByVal wEnable As Long) As Long

Const MF_GRAYED = &H1&
Const MF_BYCOMMAND = &H0&
Const SC_CLOSE = &HF060&
Public Function EnabCloseBut(boolClose As Boolean) As Boolean
Dim hWnd As Long
Dim wFlags As Long
Dim hMenu As Long

' получаем hWnd окна Access
hWnd = Application.hWndAccessApp ' Me.hWnd
hMenu = GetSystemMenu(hWnd, 0)
If Not boolClose Then
   ' делаем кнопку серой, недоступной
   wFlags = MF_BYCOMMAND Or MF_GRAYED
Else
   ' возвращаем все как было
   wFlags = MF_BYCOMMAND And Not MF_GRAYED
End If
EnabCloseBut = EnableMenuItem(hMenu, SC_CLOSE, wFlags)


Потом в макросе autoexec вызываю функцию
Код: vbnet
1.
EnabCloseBut(False)


Все работает как надо, НО если винда 32-битная. У юзеров с виндой 7 64 бит Runtime стал вылетать с ошибкой. Естественно user32 на этих машинах нет. Как сделать, чтоб работало на 64-х битной винде? помогите пожалуйста. Проверку разрядности винды я сделал...
...
Рейтинг: 0 / 0
Как программно запретить закрытие приложения Access для Windows 7 64
    #39397289
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jediAlex,

Попробуйте так:
Код: vbnet
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.
Option Compare Database
Private Declare PtrSafe Function GetSystemMenu Lib "user32" (ByVal hWnd As LongPtr, _
   ByVal bRevert As LongPtr) As LongPtr
Private Declare Ptrsafe Function EnableMenuItem Lib "user32" (ByVal hMenu As _
   LongPtr, ByVal wIDEnableItem As LongPtr, ByVal wEnable As LongPtr) As LongPtr

Const MF_GRAYED = &H1&
Const MF_BYCOMMAND = &H0&
Const SC_CLOSE = &HF060&
Public Function EnabCloseBut(boolClose As Boolean) As Boolean
Dim hWnd
Dim wFlags
Dim hMenu

' получаем hWnd окна Access
hWnd = Application.hWndAccessApp ' Me.hWnd
hMenu = GetSystemMenu(hWnd, 0)
If Not boolClose Then
   ' делаем кнопку серой, недоступной
   wFlags = MF_BYCOMMAND Or MF_GRAYED
Else
   ' возвращаем все как было
   wFlags = MF_BYCOMMAND And Not MF_GRAYED
End If
EnabCloseBut = EnableMenuItem(hMenu, SC_CLOSE, wFlags)


должно работать, если офис минимум 2010. Для более древних надо будет переписывать.
...
Рейтинг: 0 / 0
Как программно запретить закрытие приложения Access для Windows 7 64
    #39397297
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
офис не древний, а вот винды разные. У кого то 32 бит у кого то 64 и где 64 бит винда(семерка у всех) - там и не работает
...
Рейтинг: 0 / 0
Как программно запретить закрытие приложения Access для Windows 7 64
    #39397335
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за помощь. Протестил на 64 битной винде все заработало
...
Рейтинг: 0 / 0
Как программно запретить закрытие приложения Access для Windows 7 64
    #39397753
jediAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
появился еще вопрос: как можно сделать так, чтоб нельзя было закрыть приложение аксесс с панели задач?
...
Рейтинг: 0 / 0
Как программно запретить закрытие приложения Access для Windows 7 64
    #39398510
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно подвесить форму (хоть скрытую) и в Unload присвоить значение аргументу, например:

Код: vbnet
1.
2.
3.
Private Sub Form_Unload(Cancel As Integer)
    Cancel = True
End Sub
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как программно запретить закрытие приложения Access для Windows 7 64
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]