powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / WizHook - перевод "документации"
25 сообщений из 102, страница 2 из 5
WizHook - перевод "документации"
    #32556915
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GetWizGlob(lWhich As Long) ?

PS

на сегодня все - пошел спать
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32557263
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошее дело, я тоже пытался составить документацию по WizHook, но запала не хватило. И информации в инете нашел меньше. Надо бы это все систематизировать и в FAQ вынести.
Victosha может совершите подвиг?
Еще бы отдельный документ по полезным скрытым функциям, таким как

Application.AppLoadString(id As Long)
(может не самый удачный пример, но я это использую)

и функциям самого Access, таким как

Declare Function MSAU_OfficeGetFileName Lib "msaccess.exe" Alias "#56" ( _
gfni As WLIB_OFFICEGETFILENAMEINFO, ByVal fOpen As Integer) As Long

Declare Sub CloseHscr Lib "msaccess.exe" Alias "#20" ( _
ByVal hScr As Long)

Declare Function FNextHscr Lib "msaccess.exe" Alias "#22" ( _
ByVal hScr As Long, _
ByVal fSkipBlank As Long, _
pfEndOfScript As Long) As Long

Declare Function ActidOfHscr Lib "msaccess.exe" Alias "#29" ( _
ByVal hScr As Long) As Long

Declare Function CargsOfActid Lib "msaccess.exe" Alias "#30" ( _
ByVal actid As Long) As Long

Declare Function IdsArgNameOfActidIarg Lib "msaccess.exe" Alias "#33" ( _
ByVal actid As Long, _
ByVal iArg As Long) As Long

(привел некоторые из тех, которые использовал,
полный список можно просмотреть в Dependecy Walker)

Из функций WizHook еще обратил бы внимание на такие, как (навскидку):

'сортировка массива
Sub SortStringArray(Array() As String)

'проверка на наличие процедуры с заданным именем
Function GlobalProcExists(Name As String) As Boolean

'пароль на VBA
Function SetVbaPassword(bstrDbName As String, bstrConnect As String, bstrPasswd As String) As Boolean

авторВ действительности (кажется) не требует ключа инициализации.
Увы, требуется.
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559781
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sergey Gavrilov

авторApplication.AppLoadString(id As Long)
(может не самый удачный пример, но я это использую

вот и показал бы - как :))
...

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

1) (главная) - безграмотен и ленив
2) никто не обещал совместимости при смене версий. Возникает "привязанный" код. То, что вниз не пойдет - не важно. Важно, что знак вопроса всегда с перемещением "вверх". Кроме того, лично я придерживаюсь в общем случае ложной мысли, что VBA код Акцесса - это, с одной стороны кандидат на перенос в VBS, с другой - в VB. В обоих случаях я косо смотрю на нумерованные точки входа именно в Акцесс-ные функции.

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

Тем не менее почти все упомянутые функции либо окажеутся рассмотренными "естественным путем", либо имеют эквиваленты в визхуке.


ЗЫ
заодно приношу извинения за задержки
второй день "болею" - здоровье потихоньку подводить начинает. не радость...
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559783
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlobalProcExists
Возвращает истину, если запрошенная процедура или функция существует в базе данных. Рибера делает специальную оговорку, что вызов не работает с процедурами и функциями того же модуля, из которого производится вызов GlobalProcExists. В Акцесс 2002 я этого не могу подтвердить. У меня «все работает».

Код: plaintext
1.
2.
3.
4.
5.
Sub wzGlobalProcExists()

    WizHook.Key =  51488399 
    Debug.Print WizHook.GlobalProcExists("wzEnglishPictToLocal")
    Debug.Print WizHook.GlobalProcExists("wzGlobalProcExists")
End Sub
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559785
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WizHook.HideDates ?
У меня вернула истину. Что сие значит и как управлять – не знаю.
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559787
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IsMatchToDbcConnectString(bstrConnectionString As String) As Boolean

Возвращает истину или ложь, в зависимости от того, является ли полученная строка правильной строкой подключения к текущей базе данных.
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559788
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Function IsValidIdent(Identifier As String) As Boolean
Проверяет полученную строку, на допустимость ее содержимого как имени переменной.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub wzIsValidIdent()

    WizHook.Key =  51488399 
    
    
    Debug.Print WizHook.IsValidIdent("нормальная_переменная")
    Debug.Print WizHook.IsValidIdent("_нормальная_переменная")
    Debug.Print WizHook.IsValidIdent("нормальная переменная")    
    
End Sub
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559789
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KeyboardLangID
Возвращает идентификатор «языка клавиатуры».
ИМХО – скорее идентификатор языка системы.
У меня 1049 – вне зависимости от текущей раскладки
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559791
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sub KnownWizLeaks(fStart As Boolean)
Похоже, натурально подчищает (освобождает) память. В режиме отладки эффект выглядит следующим образом – очистка наступает сразу при нажатии F8 с целью исполнения процедуры. Далее – при прохождении отладчиком по коду «дополнений» не происходит. Объясняю это тем, что при нажатии F8 происходит не только компиляция, но и «тестовое выполнение» процедуры. Не ясно – «чей» сборщик мусора при этом запускается. Назначение fStart - ?

Код: plaintext
1.
2.
3.
4.
Sub wizLeaksTest()
  WizHook.Key =  51488399 
  WizHook.KnownWizLeaks True
  
End Sub
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559792
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sub LoadImexSpecSolution(bstrFilename As String) -?
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559793
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocalFont
Похоже, возвращает фонт, установленный в базе данных по умолчанию для нового контрола.
Обычно – Tahoma.

Код: plaintext
1.
2.
3.
4.
5.
Sub wzLocalFont()

    WizHook.Key =  51488399 
    Debug.Print WizHook.LocalFont
    
End Sub
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559794
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Function NameFromActid(Actid As Long) As String

Actid – идентификатор действия.
Возвращает пустую строку или имя действия.
Смотри примеры для ArgsOfActid и GetScriptString
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559797
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Function ObjTypOfRecordSource(RecordSource As String) As Integer Возвращает «тип источника данных», относясь к полученной строке как к «строке источника данных».

Возврат
0 – текст, представляющий собой SQL-выражение (запрос).
1 – таблица
2 – запрос (сохраненный в бд)
-1 – тип объекта не определен.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub wzObjTypOfRecordSource()
    Dim tipo As Integer

    WizHook.Key =  51488399 
    
    Debug.Print WizHook.ObjTypOfRecordSource _
                       ("SELECT * FROM Tabla1")
    Debug.Print WizHook.ObjTypOfRecordSource("Tabla1")
    Debug.Print WizHook.ObjTypOfRecordSource("Consulta1")

End Sub
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559799
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Function OfficeAddInDir() As String

Выдает каталог расположения «дополнений» (AddIns) офис

Код: plaintext
1.
2.
3.
4.
5.
Sub wzOfficeAddInDir()

    WizHook.Key =  51488399 
    Debug.Print WizHook.OfficeAddInDir
    
End Sub
Результат вида
C:\Documents and Settings\CurrentUserName\Application Data\Microsoft\AddIns\
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559801
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Function OpenPictureFile(File As String, Cancelled As Boolean) As Boolean

Открывает предварительно конфигурированный для работы с «картинками» диалог типа OpenFile.
Смысл диалога – Insert Picture.
При выходе из диалога нажатием на кнопку cancel или клавишей Esc – параметр Cancelled принимает значение True.
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559805
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Function OpenScript(Script As String, Label As String, OpenMode As Long, _
Extra As Long, Version As Long) As Long

Открывает макрос на чтение или запись. Возвращает целое, представляющее собой идентификатор макроса.
Параметры
Script – Имя макроса, который необходимо открыть.
Label – при расширенном виде конструктора макросов (включены столбцы «имя макроса» и «условие») должно быть имя из столбца «Имя макроса»
OpenMode – режим открытия макроса 0 – на чтение, 2 – на запись. Если макроса с указанным именем не существует, создает новый с таким именемю Если существует – блокирует существующий и создает новый пустой.
Extra - ?
Version – Версия макроса.

Дополнительной к данной функции является
Код: plaintext
1.
2.
Private Declare Sub fCloseHscr _
            Lib "msaccess.exe" _
            Alias "#20" (ByVal HScr As Long)
За расширенными примерами применения Рибера отсылает к исходному тексту V-tools.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub wzOpenScript()
Dim hMacro As Long
Dim wzScript As String
Dim wzLabel As String
Dim wzOpenMode As Long
Dim wzExtra As Long
Dim wzVersion As Long

    wzScript = "Clientes"
    wzOpenMode =  0 

    WizHook.Key =  51488399 
    hMacro = WizHook.OpenScript(wzScript, _
        wzLabel, wzOpenMode, wzExtra, wzVersion)
        
    fCloseHscr hMacro
    
End Sub
Пример от JasonM:

Код: plaintext
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.
Private Declare Function api_Macro_NextRow Lib "msaccess.exe" Alias "#22" _
    (ByVal hMacro As Long, ByVal lSkipBlank As Long, lEndOfMacro As Long) As Long
Private Declare Function api_Macro_GetActID Lib "msaccess.exe" Alias "#29" (ByVal hMacro As Long) As Long

Public Function DisplayMacro(sMacroName As String)
    Dim sLabel As String
    Dim lOpenMode As Long
    Dim lExtra As Long
    Dim lVersion As Long
    Dim lHmacro As Long
    Dim lScriptColumn As Long
    Dim sValue( 12 ) As String
    Dim lActNum As Long
    Dim lActID As Long
    Dim lMacroRow As Long
    Dim bEndOfMacro As Boolean
    
    lOpenMode =  0 &
    lHmacro = WizHook.OpenScript(sMacroName, sLabel, lOpenMode, lExtra, lVersion)
    
    If (lHmacro) Then
        Debug.Print "Hscr: " & lHmacro &  "Macro Name: " & sMacroName
        Debug.Print "Label: " & sLabel &  "Open Mode: " & lOpenMode
        Debug.Print "lExtra: " & lExtra &  "lVersion: " & lVersion
    Else
        Debug.Print "Failed to get handle"
        Exit Function
    End If
    
    lMacroRow =  0 
    Do While Not (bEndOfMacro)
        Call api_Macro_NextRow(lHmacro, False, False)
        lActID = api_Macro_GetActID(lHmacro)
        
        If (lActID <> - 1 ) Then
            Debug.Print "Row: " & lMacroRow & vbTab & "Action: " & WizHook.NameFromActid(lActID)
            For lScriptColumn =  0  To  12 
                Call WizHook.GetScriptString(lHmacro, lScriptColumn, sValue(lScriptColumn))
                Debug.Print "ScriptColumn: " & lScriptColumn & vbTab & "Value: " & sValue(lScriptColumn)
            Next lScriptColumn
            lMacroRow = lMacroRow +  1 
        Else
            bEndOfMacro = True
        End If
    Loop
    
End Function
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559807
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sub ReportLeaksToFile(fRptToFile As Boolean, bstrFileOut As String) ?
Как разумно с ней обратиться – не сообразил.
В том смысле, что результата в виде файла не получил.
Это безусловно не означает, что у меня «чистый» код, не приводящий к memory leak.
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559808
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sub SaveObject(bstrName As String, objtyp As Integer)

Наверно, ее или то, что под ней вызывает DOCMD.Close с параметрами сохранения.
Работа не проверена.
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559813
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Function SaveScriptString(HScr As Long, ScriptColumn As Long, _
Value As String) As Boolean


Метод записи значения в макрос. Возвращает истину, если завершен успешно.
Дежурная отсылка к V-Tools.

Параметры

Hscr – идентификатор макроса.
ScriptColumn – столбец макроса; 0 – столбец имени, 1 – комментарий,
2 – условие, 3-12 аргументы.
Value – значение для записи в макрос.

Код: plaintext
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.
 'API of Access 
 
 ' Для закрытия макроса
 
 Private Declare Sub fCloseHscr _ Lib "msaccess.exe" _
 20  Alias "#" _ (ByVal HScr Ace Long)

 ' для перехода к следующей строке макроса
 
Private Declare 
Function fNextHscr _ Lib "msaccess.exe" _  22  Alias "#" _ (ByVal HScr 
Ace Long, _ ByVal fSkipBlank Ace Long, _ pfEndOfScript Ace Long) Ace 
Long

 ' для записи значения действия в макрос
 
 Private Declare Function fSaveActidHscr _ Lib 
"msaccess.exe" _  25  Alias "#" _ (ByVal HScr Ace Long, _ ByVal actid 
Ace Long) Ace Long Sub wzSaveScriptString() Dim hMacro Ace Long Dim 
wzScript Ace String Dim wzLabel Ace String Dim wzOpenMode Ace Long Dim
wzExtra Ace Long Dim wzVersion Ace Long Dim EndOfScript Ace Long

     ' имя макроса
 
    wzScript = 
"Macro of example"
     ' собираемся открывать на запись
 
    wzOpenMode =  2 & 
    WizHook.Key =  51488399 
     ' открываем на запись
 
    hMacro = 
WizHook.OpenScript(wzScript, _ wzLabel, wzOpenMode, wzExtra, 
wzVersion) If hMacro <>  0  Then
         ' позиционируемся на конец
 
        fNextHscr hMacro,  0 &, EndOfScript
         ' записываем действие  ("MsgBox")
 
        fSaveActidHscr  hMacro,  22 &
         ' оформим столбец "Имя макроса"
 
        WizHook.SaveScriptString _ hMacro,  0 &, 
"Example of label"
         ' оформим столбец комментариев
 
        WizHook.SaveScriptString _ hMacro, 
 1 &, "Example of commentary"
         ' оформим столбец условий
 
        WizHook.SaveScriptString _ 
hMacro,  2 &, "..."
         ' пишем строку в столбец аргументов. Ее будет отображать MSGBOX 
 
WizHook.SaveScriptString _ 
hMacro,  3 &, "Example of creation of" _ & "macro and writing of values"
End If
      
     ' закрываем макрос. После этого изменения станут доступны
 
    fCloseHscr hMacro End 
Sub
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559814
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sub SetDpBlockKeyInput(fBlockKeys As Boolean) ?
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559815
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Function SetVbaPassword(bstrDbName As String, bstrConnect As String, _
bstrPasswd As String) As Boolean


JasonM говорит, что не сумел заставить заработать этот метод. Рибера уточняет, что метод не работает на текущей базе данных.
Устанавливает пароль на VBA проекте. Возвращает истину, если завершился успешно.
Параметры
bstrName – полный путь к базе.
bstrConnect – похоже, не используется при правильном bstrName. Может оказаться необходимым при ранее установленном пароле на mdb.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub wzSetVbaPassword() 
  Dim wzDBName as String 
  Dim wzConnect as String
  Dim wzPasswd ase String 

  WizHook.Key =  51488399  
  wzDBName = "c:\base_datos.mdb" 
  wzConnect = "" wzPasswd = "password" 

  Debug.Print WizHook.SetVbaPassword(_ wzDBName, wzConnect, wzPasswd) 
End Sub
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559816
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sub SetWizGlob(lWhich As Long, vValue) ?
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559820
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sub SortStringArray(Array() As String)
Метод сортирует одномерный массив строк в алфавитном порядке.
Проваливается при получении неинициализированного массива.
Всегда доступен (не требует ключа)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Function WH_Test()
    Dim a( 3 ) As String
    Dim i As Integer
    
    a( 0 ) = "zulu"
    a( 1 ) = "alpha"
    a( 2 ) = "gamma"
    a( 3 ) = "delta"
    
    WizHook.SortStringArray a()
    
    For i =  0  To  3 
        Debug.Print a(i)
    Next
    
End Function

-----------------------------------

PS
снова перерыв, но уже немного осталось:))
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559858
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если говорить об удобстве и совместимости то лучше всего использовать
docmd.runcommand вместо функций визарда, где конечно можно.

а для работы с файлами папками разбором строки path более удобны:

Set oFso = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("WScript.Shell")
...
Рейтинг: 0 / 0
WizHook - перевод "документации"
    #32559897
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТем не менее почти все упомянутые функции либо окажеутся рассмотренными "естественным путем", либо имеют эквиваленты в визхуке.


К сожалению нет.
В msa 97 библиотеки WZMAIN80.MDE и WZTOOL80.MDE используют "нумерованные точки входа." Посмотрите исходники, они доступны на microsoft. C msa 2000 MS создали WizHook, но перенесли туда только часть подрбных функций. Посмотрите, ведь даже в приведенном вами примере на GetScriptString используются подобные функции. Ну нет в WizHook, например, функции закрытия макроса и многих других. Я писал приложение для работы с макросами, поэтому знаю эту ситуацию, а вот чем мотивировано подобное решение MS я не понимаю.
Немного о работе с макросами есть здесь
http://am.rusimport.ru/MsAccess/f2.aspx?type=1&id=16577&find=hscr

А по поводу AppLoadString(id As Long) - она позволяет грузить строки по их идентификатору (своего рода аналог LoadResString).
Например функция
Private Declare Function IdsArgNameOfActidIarg Lib "msaccess.exe" Alias "#33" _
(ByVal actid As Long, _
ByVal iArg As Long) As Long
Возвращает идентификатор строки имени аргумента макроса.
Выдав этод идентификатор функции AppLoadString, получим строку имени аргумета на языке локализованного Access
Возмем макрокоманду MsgBox, имя первого аргумента Message (в русском Access - Сообщение), второго Beep (Сигнал) и т.д.
...
Рейтинг: 0 / 0
25 сообщений из 102, страница 2 из 5
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / WizHook - перевод "документации"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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