Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как программно запретить закрытие приложения Access для Windows 7 64 / 6 сообщений из 6, страница 1 из 1
02.02.2017, 13:48
    #39397213
jediAlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как программно запретить закрытие приложения Access для Windows 7 64
Здравствуйте. Понадобилось запретить закрытие БД Аксесс на "Х" - закрытие не формы, а аксесса в целом(или 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
02.02.2017, 14:46
    #39397289
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как программно запретить закрытие приложения Access для Windows 7 64
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
02.02.2017, 14:51
    #39397297
jediAlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как программно запретить закрытие приложения Access для Windows 7 64
офис не древний, а вот винды разные. У кого то 32 бит у кого то 64 и где 64 бит винда(семерка у всех) - там и не работает
...
Рейтинг: 0 / 0
02.02.2017, 15:22
    #39397335
jediAlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как программно запретить закрытие приложения Access для Windows 7 64
спасибо за помощь. Протестил на 64 битной винде все заработало
...
Рейтинг: 0 / 0
03.02.2017, 08:01
    #39397753
jediAlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как программно запретить закрытие приложения Access для Windows 7 64
появился еще вопрос: как можно сделать так, чтоб нельзя было закрыть приложение аксесс с панели задач?
...
Рейтинг: 0 / 0
04.02.2017, 01:54
    #39398510
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как программно запретить закрытие приложения Access для Windows 7 64
Можно подвесить форму (хоть скрытую) и в Unload присвоить значение аргументу, например:

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


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