Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.00/2: Рейтинг темы: голосов - 2, средняя оценка - 4.00
 Аватар для BasicMan
19318 / 2626 / 84
Регистрация: 17.02.2009
Сообщений: 30,364

Делимся наработками

03.11.2009, 11:04. Показов 488357. Ответов 282
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в этой теме предлагаю выкладывать интересные наработки по акцессу...

зы. в дальнейшем на основе их можно будет создать темы "важное"

Добавлено через 45 секунд
ззы. флуд и спам в этой теме будет награжден красными карточками
17
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.11.2009, 11:04
Ответы с готовыми решениями:

Для рубрики "Делимся наработками", добить БД поставка-сделка авто
День добрый, форумчане. Хочу довести до ума БД, чтобы добавить в раздел форума "Делимся наработками", так как там нашел только...

Обсуждение поста #137 в теме "Делимся наработками". Программный модуль контроля ресурсов принтеров сети.
Сейчас тестовая страница на каждом принтере выдаёт эту информацию.

Строковый тип данных. С наработками. Работает, но не верно
Написать программу определения в заданной строке номера первого по порядку слова, которое короче своего предшественника и число вхождений в...

282
 Аватар для Silur
1370 / 290 / 16
Регистрация: 16.01.2014
Сообщений: 922
05.09.2025, 09:51
Студворк — интернет-сервис помощи студентам
Как создать скомпилированный файл MDE/ACCDE с помощью VBA

Что такое скомпилированная версия (MDE/ACCDE)?
MDE/ACCDE — это скомпилированная версия базы данных Access, которая обеспечивает повышенную безопасность и защиту структуры вашего приложения.

Файл mdb компилируется в mde, а файл accdb — в accde.

Зачем они нужны разработчикам?
Существует ряд причин, по которым вы можете захотеть предоставить своим пользователям файл mde/accde, а не исходный файл mdb/accdb. К ним относятся:

- Защита конструкции
Файлы MDE/ACCDE не позволяют пользователям просматривать или изменять формы, отчёты и модули в режиме конструктора, защищая вашу интеллектуальную собственность.
- Безопасность кода
Код VBA в этих файлах скомпилирован и недоступен для просмотра или редактирования, что обеспечивает безопасность вашей логики программирования.
- Целостность данных
Хотя пользователи по-прежнему могут взаимодействовать с базой данных с помощью форм и отчётов, они не могут случайно или намеренно изменить дизайн приложения.
- Производительность
Скомпилированные базы данных могут работать быстрее, чем их редактируемые аналоги.
- Уменьшенный размер файла
В результате компиляции размер файла часто уменьшается, что может быть удобно при распространении и хранении.

Важно отметить, что таблицы и запросы не защищены! Они остаются доступными для ваших пользователей, поэтому важно принять дополнительные меры для их защиты (отличным решением в этом случае будет скрытие панели навигации).

Таким образом, хотя файлы MDE/ACCDE и обеспечивают определённую безопасность, они должны быть частью более масштабной стратегии обеспечения безопасности.

Требования к компиляции файлов MDE/ACCDE
Важно помнить, что скомпилированные базы данных (mde/accde) — это именно базы данных, в которых код … был скомпилирован и упакован. Таким образом, чтобы создать mde/accde, ваш код VBA должен компилироваться без ошибок, иначе создание mde/accde завершится неудачей. Это ещё одна причина, по которой рекомендуется постоянно компилировать код во время разработки.

Сохраните исходный файл MDB/ACCDB!!!
Важно!
Всегда помните, что «как правило» невозможно преобразовать mde/accde обратно в формат mdb/accdb (если только вы не обратитесь в компанию, которая предлагает услуги по обратному проектированию файлов mde/accde). Поэтому очень важно всегда сохранять исходный файл mdb/accdb для дальнейшего использования.

Использование VBA для создания скомпилированного MDE/ACCDE
Для создания скомпилированной версии базы данных в основе кода лежит использование недокументированной функции SysCmd, в частности 603 AcSysCmdAction. Базовый синтаксис функции:

SysCmd(AcSysCmdAction, [аргумент2], [аргумент3])
В случае создания файлов MDE/ACCDE:

AcSysCmdAction => 603 => Создать файл mde/accde
Argument2 => путь к входному файлу базы данных и его имя для преобразования
Argument3 => Путь к выходному файлу mde/accde и его имя
Таким образом, команду 603 можно сравнить с:

Visual Basic
1
SysCmd(603, sInputDbFile, sOutputCompiledFile)
Конкретным примером является:

Visual Basic
1
2
3
4
5
6
7
8
Dim oAccess As Access.Application
Const msoAutomationSecurityLow = 1 ' Объектная библиотека Microsoft Office XX.0 -> MsoAutomationSecurity
 
Set oAccess = New Access.Application
oAccess.AutomationSecurity = msoAutomationSecurityLow
oAccess.SysCmd 603, "C:\Databases\Inventory\Inventory_V3.007.accdb", _
                    "C:\Databases\Inventory\Inventory_V3.007.accde"
Set oAccess = Nothing
При выполнении команды SysCmd 603 не возвращается никакого значения, поэтому мы не можем определить, успешно ли команда создала файл mde/accde. Следовательно, нам нужно использовать другой процесс, самый простой из которых — проверка с помощью Dir() или FileExist() из FSO, был ли файл создан.

Теперь, когда мы это знаем, мы можем создать простые функции-обёртки для выполнения преобразования.

Создание скомпилированного MDE/ACCDE для текущей базы данных
Если вы хотите создать скомпилированную версию текущей базы данных, с которой вы работаете, и сделать это с помощью кода, то можете воспользоваться такой процедурой:

Visual Basic
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
'---------------------------------------------------------------------------------------
' Процедура: MakeACCDE_CurrentDb
' Автор: Дэниел Пино, CARDA Consultants Inc.
' Сайт: http://www.cardaconsultants.com
' Назначение: создание mde/accde текущей базы данных
' Авторские права: Следующий текст выпущен как Attribution-ShareAlike 4.0 International.
' (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
' Требуемые ссылки: позднее связывание -> не требуется
'
' Использование:
' ~~~~~~
' ? MakeACCDE_CurrentDb
' Возвращает -> Истина/Ложь
'
' История изменений:
' Дата обновления (гггг-мм-дд) Описание
' **************************************************************************************
' 1 2013-10-09
' 2 2025-02-21 Обновление обработчика ошибок и заголовка
' 3 2025-02-26 Переименование и оптимизация кода
'---------------------------------------------------------------------------------------
Function MakeACCDE_CurrentDb() As Boolean
          Dim oAccess               As Access.Application
          Dim oFSO                  As Object
          Dim sDbFullName           As String
          Dim sWorkingDirectory     As String
          Dim sDbFileName           As String
          Dim sDbFileExtension      As String
          Dim sDbTempCopy           As String
          Dim sCompileDbFullName    As String
          Const msoAutomationSecurityLow = 1    ' Microsoft Office XX.0 Object Library ->
                                                ' On Error GoTo Error_Handler
 
sDbFullName = CurrentProject.FullName
sWorkingDirectory = CurrentProject.Path
sDbFileName = CurrentProject.Name
sDbFileExtension = Right(sDbFileName, Len(sDbFileName) - InStrRev(sDbFileName, "."))
sDbTempCopy = sWorkingDirectory & "" & Left(sDbFileName, Len(sDbFileName) - 6) & "-Temp.accdb"
 
Set oAccess = New Access.Application
Set oFSO = CreateObject("Scripting.FileSystemObject")
 
' Очистка/удаление всех существующих временных копий
If Dir(sDbTempCopy) <> "" Then Kill sDbTempCopy
 
' Создайте копию текущей базы данных для конвертации
If Dir(sDbTempCopy) = "" Then
   oFSO.CopyFile sDbFullName, sDbTempCopy, True
   'FileCopy sDbFullName, sDbTempCopy ' Отказано в доступе. => Необходимо использовать FSO!!!
   DoEvents
End If
 
' Конвертируем скопированную базу данных в mde/accde
oAccess.AutomationSecurity = msoAutomationSecurityLow
If sDbFileExtension = "accdb" Then
   sCompileDbFullName = Replace(sDbFullName, ".accdb", ".accde")
ElseIf sDbFileExtension = "mdb" Then
   sCompileDbFullName = Replace(sDbFullName, ".mdb", ".mde")
End If
oAccess.SysCmd 603, sDbTempCopy, sCompileDbFullName
DoEvents
 
' Очистка/удаление всех существующих временных копий
If Dir(sDbTempCopy) <> "" Then Kill sDbTempCopy
 
If Dir(sCompileDbFullName) <> "" Then MakeACCDE_CurrentDb = True
 
Error_Handler_Exit:
   On Error Resume Next
   Set oFSO = Nothing
   Set oAccess = Nothing
 
   Exit Function
 
Error_Handler:
    MsgBox "Произошла следующая ошибка" & vbCrLf & vbCrLf & _
    "Источник ошибки: MakeACCDE" & vbCrLf & _
    "Номер ошибки: " & Err.Number & vbCrLf & _
    "Описание ошибки: " & Err.Description & _
    Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Номер строки: " & Erl) _
    , vbOKOnly + vbCritical, "Произошла ошибка!"
    Resume Error_Handler_Exit
End Function
который затем можно запустить с помощью одной строки кода, например:

Visual Basic
1
Call MakeACCDE_CurrentDb
Или

Visual Basic
1
2
3
4
5
If MakeACCDE_CurrentDb Then
    Debug.Print "MDE/ACCDE created successfully."
Else
    Debug.Print "MDE/ACCDE NOT created successfully."
End if
Создание скомпилированного MDE/ACCDE для другой базы данных
С другой стороны, если вы хотите создать скомпилированные версии других файлов базы данных, то, немного изменив приведённый выше код, мы можем сделать что-то вроде этого:

Visual Basic
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
'---------------------------------------------------------------------------------------
' Процедура: MakeACCDE
' Автор: Дэниел Пино, CARDA Consultants Inc.
' Веб-сайт: [url]http://www.cardaconsultants.com[/url]
' Назначение: создает mde/accde для указанной базы данных
' Авторские права: распространяется по лицензии Attribution-ShareAlike 4.0 International
' (CC BY-SA 4.0) — [url]https://creativecommons.org/licenses/by-sa/4.0/[/url]
' Требуемые ссылки: поздняя привязка —> не требуется
'
' Входные переменные:
' ~~~~~~~~~~~~~~~~
'sFile: полный путь и имя файла mdb/accdb для создания mde/accde
' of.
'
' Использование:
' ~~~~~~
' ? MakeACCDE("C:\Database\Inventory\Inventory_V3.007.accdb")
' Возвращает -> True/False
'
' История изменений:
' Дата изменения (гггг-мм-дд) Описание
' **************************************************************************************
' 1 2013-10-09
' 2 2025-02-21 Обновление обработчика ошибок и заголовка
' 3 2025-02-26 Оптимизация кода
'---------------------------------------------------------------------------------------
Function MakeACCDE(ByVal sFile As String) As Boolean
          Dim oAccess               As Access.Application
          Dim oFSO                  As Object
          Dim sDbFullName           As String
          Dim sWorkingDirectory     As String
          Dim sDbFileName           As String
          Dim sDbFileExtension      As String
          Dim sDbTempCopy           As String
          Dim sCompileDbFullName    As String
          Const msoAutomationSecurityLow = 1    ' Microsoft Office XX.0 Object Library -> MsoAutomationSecurity
          
On Error GoTo Error_Handler
 
sDbFullName = sFile
sWorkingDirectory = Left(sFile, InStrRev(sFile, ""))
sDbFileName = Mid(sFile, InStrRev(sFile, "") + 1)
sDbFileExtension = Right(sDbFileName, Len(sDbFileName) - InStrRev(sDbFileName, "."))
sDbTempCopy = sWorkingDirectory & "" & Left(sDbFileName, Len(sDbFileName) - 6) & "-Temp.accdb"
 
Set oAccess = New Access.Application
Set oFSO = CreateObject("Scripting.FileSystemObject")
 
' Очистка/удаление всех существующих временных копий
If Dir(sDbTempCopy) <> "" Then Kill sDbTempCopy
' Создайте копию текущей базы данных для преобразования
' В данном случае можно использовать FileCopy, если файл не используется.
If Dir(sDbTempCopy) = "" Then
    oFSO.CopyFile sDbFullName, sDbTempCopy, True
    'FileCopy sDbFullName, sDbTempCopy 'Отказано в доступе. => Необходимо использовать FSO!!!
    DoEvents
End If
 
'Преобразуйте скопированную базу данных в mde/accde
oAccess.AutomationSecurity = msoAutomationSecurityLow
If sDbFileExtension = "accdb" Then
    sCompileDbFullName = Replace(sDbFullName, ".accdb", ".accde")
ElseIf sDbFileExtension = "mdb" Then
    sCompileDbFullName = Replace(sDbFullName, ".mdb", ".mde")
End If
oAccess.SysCmd 603, sDbTempCopy, sCompileDbFullName
DoEvents
 
' Очистка/удаление всех существующих временных копий
If Dir(sDbTempCopy) <> "" Then Kill sDbTempCopy
 
If Dir(sCompileDbFullName) <> "" Then MakeACCDE = True
 
Error_Handler_Exit:
    On Error Resume Next
    Set oFSO = Nothing
    Set oAccess = Nothing
    Exit Function
 
Error_Handler:
    MsgBox "Произошла следующая ошибка" & vbCrLf & vbCrLf & _
    "Источник ошибки: MakeACCDE" & vbCrLf & _
    "Номер ошибки: " & Err.Number & vbCrLf & _
    "Описание ошибки: " & Err.Description & _
    Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Номер строки: " & Erl) _
    , vbOKOnly + vbCritical, "Произошла ошибка!"
    Resume Error_Handler_Exit
End Function

Его снова можно использовать следующим образом:

Visual Basic
1
Call MakeACCDE("C:\Database\Inventory\Inventory_V3.007.accdb")
Или

Visual Basic
1
2
3
4
5
If MakeACCDE("C:\Database\Inventory\Inventory_V3.007.accdb") Then
    Debug.Print "MDE/ACCDE created successfully."
Else
    Debug.Print "MDE/ACCDE NOT created successfully."
End if

Вот и всё, теперь у вас есть две разные процедуры для компиляции баз данных с помощью кода VBA.

Источник
0
 Аватар для Silur
1370 / 290 / 16
Регистрация: 16.01.2014
Сообщений: 922
15.09.2025, 11:13
Использование VBA для блокировки компьютера

Аналог нажатия клавиш Win+L или сочетание клавиш Ctrl+Alt+Del, а также нажатие Lock (заблокировать).
Не знаю. Может кому пригодится. Возможно, после запуска вашего кода?
Существует простой API, с помощью которого можно выполнить всю сложную работу. Всё, что нужно сделать, — это создать простую функцию-оболочку, как показано ниже:
Visual Basic
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#If VBA7 Then
 Private Declare PtrSafe Function LockWorkStation Lib "user32.dll" () As Long
#Else
 Declare Function LockWorkStation Lib "user32.dll" () As Long
#End If
 
'---------------------------------------------------------------------------------------
' Процедура : LockPC
' Автор : Дэниел Пино, CARDA Consultants Inc.
' Веб-сайт: http://www.cardaconsultants.com
' Цель: Заблокировать текущий компьютер (это делаетпользователь не выходит из системы, просто блокирует сеанс)
' Авторские права: Следующее выпущено как Attрешение-ShareAlike 4.0 International
' (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
' Требуемые ссылки: не требуются
' Зависимости: LockWorkStation API Declaration(s)
'
' Использование:
' ~~~~~~
' Call LockPC
'
' ? LockPC
' Возвращает -> True : в случае успеха
' False : в случае неудачи при блокировке ПК
'
' Версия история издания год выпуска:
' Описание даты выпуска (гггг-мм-дд) 
' **************************************************************************************
' 1 2024-04-11 Первоначальный публичный релиз
' Добавлен заголовок функции
' ---------------------------------------------------------------------------------------
Public Function LockPC() As Boolean
On Error GoTo Error_Handler
 Dim lRet As Long
 
 lRet = LockWorkStation
 If lRet = 0 Then
    Debug.Print "Не удалось заблокировать компьютер по неизвестной причине."
    Debug.Print Err.LastDllError ' чтобы получить более подробную информацию об ошибке
 Else
    LockPC = True
    Debug.Print "Компьютер успешно заблокирован!"
 End If
 
Error_Handler_Exit:
 On Error Resume Next
 Exit Function
 
Error_Handler:
    MsgBox "Произошла следующая ошибка" & vbCrLf & vbCrLf & _
    "Источник ошибки: LockPC" & vbCrLf & _
    "Номер ошибки: " & Err.Number & vbCrLf & _
    "Описание ошибки: " & Err.Description & _
    Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Номер строки: " & Erl) _
    , vbOKOnly + vbCritical, "Произошла ошибка!"
   Resume Error_Handler_Exit
End Function
Visual Basic
1
2
3
4
5
If LockPC Then
 'Lock PC Call was successful
Else
 'Lock PC Call was NOT successful
End if
Или, может быть, что-то вроде:
Visual Basic
1
2
3
4
If Not LockPC Then
 Exit Sub
 'Exit Function
End if
Вот и всё, что нужно знать.

Рабочая станция может быть разблокирована пользователем или администратором. Чтобы разблокировать систему, нажмите клавиши CTRL+ALT+DEL и войдите в систему.

Да, ещё, пользователь должен быть авторизован, а рабочая станция не должна быть заблокирована.

Источники: здесь и здесь
0
 Аватар для Silur
1370 / 290 / 16
Регистрация: 16.01.2014
Сообщений: 922
18.11.2025, 10:19
Открыть документ в родном приложении
АлексейЕ
Функция, позволяющая открыть произвольный документ в родном для него приложении (в зарегистрированном в системе приложении для данного расширения)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Declare Function ShellExecute _
                Lib "shell32.dll" _
                Alias "ShellExecuteA" _
                (ByVal Hwnd As Long, _
                ByVal lpOperation As String, _
                ByVal lpFile As String, _
                ByVal lpParameters As String, _
                ByVal lpDirectory As String, _
                ByVal nShowCmd As Long) As Long
 
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWDEFAULT = 10
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOWNORMAL = 1
 
 
Function StartOfFile(strNameFile As String)
Dim intResult As Integer
 
intResult = ShellExecute(Application.hWndAccessApp, "open", strNameFile, 0, 0, SW_SHOWNORMAL)
If intResult = 31 Then
    MsgBox "Незарегестрированный тип файла"
End If
End Function
Вызывается так
Visual Basic
1
Call StartOfFile("C:\Program Files\Adobe\Acrobat 5.0\Help\ENU\ACROBAT.PDF")
Анатолий (Киев)
Visual Basic
1
2
3
If intResult = 31 Then
      MsgBox "Незарегестрированный тип файла"
End If
В этой ситуации можно добавить архитектурных излишеств в виде:
Visual Basic
1
2
Call Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " _
& strNameFile, vbNormalFocus)
Открывается стандартный диалог "Открыть c".

Кроме того есть прекрасная API функция:
Visual Basic
1
2
3
Declare Function FindExecutable Lib "shell32.dll" _
    Alias "FindExecutableA" (ByVal lpFile As String, _
    ByVal lpDirectory As String, ByVal lpResult As String) As Long
Получает имя существующего файла и возвращает путь к ассоциированному приложению. Её можно использовать перед ShellExequte, а также в паре с Shell или, например, при создании ярлыка.

Использовал эту функцию, когда в базе хранятся не документы, а ссылки на файлы. Сразу можно открыть и просмотреть нужный документ.
Здесь функция представлена для 32-х разрядной версии Access


Добавлено через 20 минут
И в догонку

Функция API ShellExecute - описание и применение

Так, для общего сведения

Функция ShellExecute запускает программу по имени или по ассоциации с файлом документа.

Объявление
для VBA 6
Visual Basic
1
2
3
4
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
      (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
      ByVal lpParameters As String, ByVal lpDirectory as String, _
      ByVal nShowCmd As Long) As Long
Для VBA 7
Visual Basic
1
2
3
4
Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
      (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, _
      ByVal lpParameters As String, ByVal lpDirectory As String, _
      ByVal nShowCmd As Long) As LongPtr
Примечание. VBA 7 при компиляции сам присваивает нужный тип переменным LongPtr - Long для 32-х битных версий офиса и LongLong для 64-х битных.

Описание.
Функция находит имя программы, связанной с заданным файлом, и либо запускает программу с загрузкой данного файла, либо выводит файл на печать. Типы файлов обычно связывается с конкретными приложениями в реестре Windows. Например, текстовые файлы с расширением .TXT обычно ассоциируются с приложением Windows Notepad (NOTEPAD.EXE). Если передать этой функции любой файл с расширением .TXT, функция либо запускает программу Notepad, указывая имя файла в качестве параметра, либо выводит файл на печать.

Параметры.

hwnd - Long/LongLong - манипулятор окна (хендл). Идентификатор родительского окна. Указывать родительское окно не обязательно, можно просто 0
lpOperation – String - операция, выполняемая с файлом. Может иметь следующие значения: «open», «print», «explore», «find», «edit».

Если lpOperation="find", функция выводит диалоговое окно для поиска файлов по условиям. Параметр lpFile должен указывать путь к папке, начиная с которой будет выполняться поиск. Остальные параметры не используются.

Если lpOperation="explore", функция выводит диалоговое окно - список папок. Параметр lpFile должен указывать путь к папке, содержимое которой нужно посмотреть. Остальные параметры не используются.

Если lpOperation="edit", функция открывает файл на редактирование, загружая приложение, ассоциированное с расширением файла. Параметр Edit должен содержать имя файла, параметр plDirectory - указывать путь к этому файлу; если параметр lpDirectory не используется, то параметр lpFile должен указывать путь и имя файла.

Если lpOperation="open", функция выполняет следующие действия: если в lpFile указан исполняемый файл (например, типа EXE), то он запускается на выполнение; загружаемой программе передаётся список параметров, указанных в lpParameters; в противном файл открывается на редактирование.

Если lpOperation="print", то выполняется печать файла на принтере (фактически загружается ассоциированное с расширением файла приложение, которое и печатает документ).

По умолчанию - "open", если указано Null (vbNullString) или значение опущено.

lpFile – String – файл или папка, которую нужно открыть
lpParameters – String – параметры открытия файла, т.ч. запуска приложения. Используется только при запуске приложений
lpDirectory – String – рабочая директория
nShowCmd – Long – параметры окна открытого файла (приложения, директории)

Параметры lpOperation, lpParametrs и lpDirectory можно опускать

Параметр nShowCmd может иметь значения от 0 до 10. Наиболее часто используемые значения:

SW_HIDE = 0 - запускаемое приложение делается невидимым
SW_SHOWMAXIMIZED = 3 - развернутое (максимальное) окно;
SW_SHOWMINIMIZED = 2 - свернутое окно (значок) в панель задач;
SW_SHOWNORMAL = 1 - нормальное окно.

Более полный список параметров можно взять из описания функции ShowWindow

Коды ошибок
Если функция возвращает значение больше 32-х, то всё в порядке, иначе смотрите коды ошибок.

0 - Недостаточно памяти или ресурсов
SE_ERR_FNF = 2 - Указанный файл не найден (ERROR_FILE_NOT_FOUND)
SE_ERR_PNF = 3 - Указанный путь не существует (ERROR_PATH_NOT_FOUND)
SE_ERR_ACCESSDENIED = 5 - Операционная система не имеет доступа к указанному файлу
SE_ERR_OOM = 8 - Недостаточно памяти или ресурсов Windows
ERROR_BAD_FORMAT = 11 - Формат .EXE неверен (не-Win32 .EXE или ошибка в .EXE файле).
SE_ERR_SHARE = 26 - Произошла ошибка совместного доступа
SE_ERR_DDETIMEOUT = 28 - Операция DDE не была закончена, потому что истекло время запроса
SE_ERR_DDEFAIL = 29 - Операция ПРЯМОГО ВВОДА ДАННЫХ потерпела неудачу
SE_ERR_DDEBUSY = 30 - Операция ПРЯМОГО ВВОДА ДАННЫХ(DDE) не может работать, потому что другие действия ПРЯМОГО ВВОДА ДАННЫХ находятся в процессе
SE_ERR_NOASSOC = 31 - Нет никакого приложения, ассоциированного с расширением файла
SE_ERR_DLLNOTFOUND = 32 - Указанный файл DLL не найден

Пример использования

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Declare Function ShellExecute Lib "shell32" _
        Alias "ShellExecuteA" (ByVal hwnd As Long, _
        ByVal lpOperation As String, ByVal lpFile As String, _
        ByVal lpParameters As String, ByVal lpDirectory As String, _
        ByVal nShowCmd As Long) As Long
 
Private Const SW_SHOWNORMAL = 1
 
Private Sub btnSend_Click()
' запуск почтовика для отправки письма
  ShellExecute 0, vbNullString, _
     "mailto:nemiro_as@vbnet.ru", vbNullString, _
     vbNullString, SW_SHOWNORMAL
End Sub
 
Private Sub btnSite_Click()
' открытие сайта
   ShellExecute(0,'open','www.am.rusimport.ru',,,sw_shownormal);
End Sub
Примечание.
Как и у многих других функции WinAPI, у ShellExecute существует два варианта: ShellExecuteA и ShellExecuteW. A- и W-версии отличаются типом строк: A - ASCII, W - WCHAR (юникоде). Не путайте. В Access используется тип А.

Используемые материалы
Дан Эпплман - Win32 API и Visual Basic
Сайт Cybite.ru - http://kbyte.ru/ru/Programming... &mode=show
Сайт Тостер
и вот здесь - http://platonov-andrei.narod.r... xecute.htm
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.11.2025, 10:19

Кто занимался работой с timer поделитесь пожалуйста наработками интеренсыми
Например есть форма и на форме кнопка закрыть нажимая кнопку закрыть идет отсчет 10 9 8... и когда доходит 0 то закрывается программа ,...

Делимся.
Доброго времени суток всем посетителям этой темы!=) Хочу попросить вас поделиться самой откровенной информацией по нескольким...

Делимся vpn)
Ребят, накидайте vpn серверов работающих на просторах СНГ.

Делимся опытом
Добрый день! Давайте делиться мыслями о разработках, которые прямо не используются в работе, но используются для организации некоего...

Делимся знаниями по С++
По вашему зачем нужна виртуальная функция в программе? Какой от нее толк если она вызывается как обычная функция. Да я знаю что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
283
Ответ Создать тему
Новые блоги и статьи
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru