FAQ Конференції VBStreets (FAQ), Різне, Програмні керівництва, статті










2. A. Skrobov – ФУНКЦІЇ, що експортується з MSVBVM60

Відомо, що рантайм-бібліотека ВБ6 експортує близько тисячі функцій. Деякі з них можуть стати в нагоді нам у наших програмах. Ось ті з них, сенс яких я зміг з’ясувати:

“1. Функції передачі даних.

Private Declare Sub CopyBytes Lib “MSVBVM60.DLL” Alias ​​”__vbaCopyBytes” (ByVal Size As Long, Dest As Any, Source As Any) “Аналогічно RtlMoveMemory, але тільки для неперекривающіхся блоків Private Declare Sub CopyBytesZero Lib “MSVBVM60.DLL” Alias ​​”__vbaCopyBytesZero” (ByVal Size As Long, Dest As Any, Source As Any) “Те ж, причому після копіювання обнуляються Size байт джерела

Private Declare Function GetLong Lib “MSVBVM60.DLL” Alias ​​”VarPtr” (ByVal Value As Long) As Long “Повертає передане значення (корисно для тайпкастов)

Private Declare Sub CopyByte Lib “MSVBVM60.DLL” Alias “GetMem1” (ByVal Source As Long, Dest As Byte) Private Declare Sub CopyInteger Lib “MSVBVM60.DLL” Alias “GetMem2” (ByVal Source As Long, Dest As Integer) Private Declare Sub CopyLong Lib “MSVBVM60.DLL” Alias “GetMem4” (ByVal Source As Long, Dest As Long) Private Declare Sub CopyCurrency Lib “MSVBVM60.DLL” Alias “GetMem8” (ByVal Source As Long, Dest As Currency) “Працюють як PEEK: передають значення з пам’яті в змінну Private Declare Sub CopyObject Lib” MSVBVM60.DLL “Alias” GetMemObj “(ByVal Source As Long, Dest As Object)” Те ж, причому коректно працює з лічильниками посилань об’єктів Private Declare Sub CopyString Lib “MSVBVM60.DLL” Alias ​​”GetMemStr” (ByVal Source As Long, Dest As String) “То ж, причому коректно звільняє / виділяє пам’ять Private Declare Sub CopyVariant Lib “MSVBVM60.DLL” Alias ​​”GetMemVar” (ByVal Source As Long, Dest As Variant) “Об’єднання двох предудущіх варіантів

Private Declare Sub StoreByte Lib “MSVBVM60.DLL” Alias “PutMem1” (ByVal Dest As Long, ByVal Value As Byte) Private Declare Sub StoreInteger Lib “MSVBVM60.DLL” Alias “PutMem2” (ByVal Dest As Long, ByVal Value As Integer) Private Declare Sub StoreLong Lib “MSVBVM60.DLL” Alias “PutMem4” (ByVal Dest As Long, ByVal Value As Long) Private Declare Sub StoreCurrency Lib “MSVBVM60.DLL” Alias “PutMem8” (ByVal Dest As Long, ByVal Value As Currency) “Працюють як POKE: передають значення в пам’ять Private Declare Sub StoreObject Lib” MSVBVM60.DLL “Alias” SetMemObj “(ByVal Dest As Long, ByVal Value As Object) Private Declare Sub StoreVariantObject Lib “MSVBVM60.DLL” Alias ​​”SetMemVar” (ByVal Dest As Long, ByVal Value As Variant) “Те ж, причому коректно працюють з лічильниками посилань об’єктів Private Declare Sub StoreString Lib “MSVBVM60.DLL” Alias “PutMemStr” (ByVal Dest As Long, ByVal lpOleStr As Long) Private Declare Sub StoreVariantNotObject Lib “MSVBVM60.DLL” Alias “PutMemVar” (ByVal Dest As Long, ByVal Value As Variant) “Те ж, причому коректно звільняють / виділяють пам’ять

“2. Функції роботи з SAFEARRAY-ями.

Private Declare Sub ArrayRebase1 Lib “MSVBVM60.DLL” Alias ​​”__vbaAryRebase1Var” (Ary As Variant) “Змінює нижню межу масиву на 1” Аналогічно ReDim Preserve Ary (1 To UBound (Ary) – LBound (Ary) + 1), але швидше

Private Declare Function AryPtr Lib “MSVBVM60.DLL” Alias “VarPtr” (Ary() As
Long) As Long
“Повертає покажчик на lpSAFEARRAY
“Приклад використання:
“Dim v(), lpSAFEARRAY As Long
” v() = Array(“First”, “Second”, “Last”)
” CopyLong AryPtr(v()), lpSAFEARRAY

Private Declare Function ArrayAddress Lib “MSVBVM60.DLL” Alias ​​”__vbaRefVarAry” (Ary As Variant) As Long “Повертає покажчик на lpSAFEARRAY” Приклад використання: “Dim v, lpSAFEARRAY As Long
” v = Array(“First”, “Second”, “Last”)
” CopyLong ArrayAddress(v), lpSAFEARRAY

Private Declare Function ElementAddress Lib “MSVBVM60.DLL” Alias ​​”__vbaDerefAry1″ (ByVal lpsaAry As Long, ByVal Index0 As Long) As Long “Повертає адресу елемента SAFEARRAY-я (елементи індексуються з 0) “Приклад використання:
” Debug.Print ElementAddress(lpSAFEARRAY, 0)

Private Declare Function vbaLBound Lib “MSVBVM60.DLL” Alias “__vbaLbound” (ByVal Dimension As Integer, ByVal lpsaAry As Long) As Long Private Declare Function vbaUBound Lib “MSVBVM60.DLL” Alias “__vbaUbound” (ByVal Dimension As Integer, ByVal lpsaAry As Long) As Long “Повертають нижню і верхню межі будь-якого вимірювання SAFEARRAY-я” Приклад використання:
” Debug.Print vbaLBound(1, lpSAFEARRAY)
” Debug.Print vbaUBound(1, lpSAFEARRAY)

“3. Інші функції.

Private Declare Function HalfPrevDWord Lib “MSVBVM60.DLL” Alias ​​”__vbaLenBstr” (ByVal Address As Long) As Long “Повертає половину подвійного слова [Address – 4] (може, комусь
нагоді)

Private Declare Sub AddRef Lib “MSVBVM60.DLL” Alias ​​”__vbaObjAddref” (ByVal Obj As Object) “Збільшує лічильник посилань об’єкта

P.S. На диску з ВБ6 лежить файл MSVBVM60.DBG. Яку користь можна отримати з його наявності? PPS Хто-небудь знає, що робить функція Zombie_Release? Аж надто назву красиве.

наверх









3. Гревцов Юрій. Забудьте про GetWindowsDirectory і ще дещо.

В БЕЙСІК є одна ДУЖЕ корисна, але багатьма забута функція Environ! Вона повертає імена та утримання всіх змінних середовища операційної системи! Так, наприклад, щоб отримати директорію Windows, зовсім не треба вдаватися до API-функції GetWindowsDirectory!! А отримати її можна так:
ABC = Environ (“windir”)
І ВСЕ!
Але й це ще не все! Також можна отримати наступні змінні:
ABC = Environ (“TMP”) “директорія тимчасових файлів TEMP
ABC = Environ (“BLASTER”) “координати звукової карти
ABC = Environ (“PATH”) “шляху, оголошені в autoexec.bat
АЛЕ І ЦЕ ВСЕ ЩЕ НЕ ВСЕ!!
Щоб отримати ім’я і значення змінної, в дужках замість рядка треба поставити номер змінної (або індекс?).
Вставте следуюшую процедуру у вікно Code, запустіть проект, клацніть на формі побачите список всіх змінних і їх значень!
Private Sub Form_Click()
“Беремо змінну і присвоюємо їй одиницю
m = 1
“Запускаємо цикл, який збільшує змінну m кожен
“Раз на одиницю і підсовує її функції Environ
Do
“Прісваєваєм перменной EnvString повертається змінну,
“Відповідну номером m
EnvString = Environ(m)
“Друкуємо змінну, що відповідає номеру m
Print Environ(m)
“Змінну m збільшуємо на один
m = m + 1
“Якщо мінлива EnvString все ще не порожня – крутимо далі …
Loop Until EnvString = “”
End Sub
І тепер всі, хто недолюблює API-функції (по-моєму їх взагалі мало, хто долюблювати :-)) можуть користуватися тільки цієї рядком!

наверх










4. Як працювати з Реєстром (Registry)?

Visual Basic має вбудовані оператори і функції для роботи з Системним Реєстром (в дальнешем – реєстр), він дозволяє записувати, зчитувати і видаляти дані тільки в розділі ключа HKEY_CURRENT_USER Software VB and VBA Program Setting.

Оператори:

Оператор SaveSetting – дозволяє проводити запис запис даних (автоматично створює підключи).

Синтаксис:

SaveSetting VBKeyName, Section, Key, Setting

Де:

SaveSetting ім’я самого оператора:

VBKeyName строкове значення, яке є ім’ям внутрішнього
підрозділу VB and VBA Program Setting (іншими словами,
створювана Вами головна папка);

Section строкове значення, яке є ім’ям внутрішнього
підрозділу VBKeyName (іншими словами, створювана Вами
папка знаходиться у Вашій головній папці. Таких Section –
папок у Вас може бути декілька.);

Key строкове значення, яке є ім’ям параметра в
створеному, внутрішньому підрозділі Section (іншими словами,
ім’я даних у створеній Вами Section – папці. Таких Key –

параметрів у Вас може буть декілька.);

Setting строкове значення, яке Ви хочете присвоїти створеному
Вами параметру;

Оператор DeleteSetting – дозволяє видаляти параметри і внутрішні підрозділи.

Синтаксис:

DeleteSetting VBKeyName, Section, Key

Де:

DeleteSetting ім’я самого оператора

VBKeyName строкове значення, яке є ім’ям внутрішнього
підрозділу VB and VBA Program Setting (іншими словами,
створена Вами головна папка);

Section строкове значення, яке є ім’ям внутрішнього
підрозділу VBKeyName (іншими словами, одна із створених
Вами папок знаходяться у Вашій головній папці.);

Key строкове значення, яке є ім’ям параметра в
видаляється, внутрішньому підрозділі Section (іншими словами,
ім’я, що видаляються);

Якщо Ви захочете видалити відразу весь підрозділ, а не деякі параметри, то для цього використовуйте наступний синтаксис оператора DeleteSetting:

DeleteSetting VBKeyName, Section

Або, якщо Ви захочете видалити повністю створений Вами внутрішній підрозділ VB and VBA Program Setting використовуйте наступний синтаксис оператора DeleteSetting:

DeleteSetting VBKeyName

Увага! Користуйтеся оператором DeleteSetting дуже обережно!

Функції

Функція GetSetting () – дозволяє отримати значення певного параметра.

Синтаксис

MySet = GetSetting ( VBKeyName, Section, Key [, Default ] )

Де:

MySet рядок для зберігання повертається функцією GetSetting значення;

GetSetting ім’я самої функції;

VBKeyName строкове значення, яке є ім’ям внутрішнього підрозділу
VB and VBA Program Setting (іншими словами, створена Вами
головна папка);

Section строкове значення, яке є ім’ям внутрішнього підрозділу
VBKeyName (іншими словами, ім’я папки знаходиться у Вашій
головною папці.);

Key строкове значення, яке є ім’ям параметра в створеному,
внутрішньому підрозділі Section (іншими словами, ім’я даних
в Section – папці.);

Setting строкове значення, яке Ви хочете вважати з даного параметра;

[Default] необов’язковий аргумент, що представляє строкове значення,
яке буде повернуто функцією у разі помилки
(Якщо такого параметра немає);

Функції GetAllSettings () – дозволяє отримати масив значень з певного підрозділу.

Синтаксис:

MySet = GetAllSettings ( VBKeyName, Section)

Де:

MySet рядок для зберігання повертається функцією GetAllSettings
значення;

GetAllSettings ім’я самої функції;

VBKeyName строкове значення, яке є ім’ям внутрішнього
підрозділу VB and VBA Program Setting (іншими словами,
створена Вами головна папка);

Section строкове значення, яке є ім’ям внутрішнього
підрозділу VBKeyName (іншими словами, ім’я папки
знаходиться у Вашій головній папці.);

Обробити масив значень і отримати інформацію в зручному вигляді можна наступним чином:

Dim intSettings As Integer

MySet = GetAllSettings(App.Title, “PortSettings”)

For intSettings = LBound(MySet, 1) To UBound(MySet, 1)

Debug.Print MySet(intSettings, 0), MySet(intSettings, 1)

Next intSettings

End Sub

Читання / Запис даних до реєстру (API):

Оголосіть все константи і API-функції в окремому модулі. Там же створіть функцію зі створення ключа, функцію запису в нього даних, функцію зчитування даних, функцію видалення даних з ключа і функцію видалення самого ключа.

Option Explicit

Public Const REG_SZ As Long = 1
Public Const REG_DWORD As Long = 4

Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_CLASSES_ROOT = &H80000000

Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_USERS = &H80000003

Public Const ERROR_NONE = 0
Public Const ERROR_BADDB = 1
Public Const ERROR_BADKEY = 2
Public Const ERROR_CANTOPEN = 3
Public Const ERROR_CANTREAD = 4
Public Const ERROR_CANTWRITE = 5
Public Const ERROR_OUTOFMEMORY = 6
Public Const ERROR_INVALID_PARAMETER = 7
Public Const ERROR_ACCESS_DENIED = 8

Public Const ERROR_INVALID_PARAMETERS = 87
Public Const ERROR_NO_MORE_ITEMS = 259

Public Const KEY_ALL_ACCESS = &H3F

Public Const REG_OPTION_NON_VOLATILE = 0

Declare Function RegCloseKey Lib “advapi32.dll” (ByVal hKey As Long) As Long

Declare Function RegCreateKeyEx Lib “advapi32.dll” Alias “RegCreateKeyExA” (ByVal hKey As Long
, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long

Declare Function RegOpenKeyEx Lib “advapi32.dll” Alias “RegOpenKeyExA” (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long
) As Long

Declare Function RegQueryValueExString Lib “advapi32.dll” Alias “RegQueryValueExA” (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long

Declare Function RegQueryValueExLong Lib “advapi32.dll” Alias “RegQueryValueExA” (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long
, lpcbData As Long) As Long

Declare Function RegQueryValueExNULL Lib “advapi32.dll” Alias “RegQueryValueExA” (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long

Declare Function RegSetValueExString Lib “advapi32.dll” Alias “RegSetValueExA” (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long

Declare Function RegSetValueExLong Lib “advapi32.dll” Alias “RegSetValueExA” (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long

Declare Function RegDeleteKey& Lib “advapi32.dll” Alias “RegDeleteKeyA” (ByVal hKey As Long, ByVal lpSubKey As String)

Declare Function RegDeleteValue& Lib “advapi32.dll” Alias “RegDeleteValueA” (ByVal hKey As Long
, ByVal lpValueName As String)

Створення нового ключа (підключа)

Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)

Dim hNewKey As Long
Dim lRetVal As Long

lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal)

RegCloseKey (hNewKey)

End Function

Запис даних в ключ

Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)

Dim lRetVal As Long

Dim hKey As Long

lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)

RegCloseKey (hKey)

End Function

Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long

Dim lValue As Long
Dim sValue As String

Select Case lType

Case REG_SZ
sValue = vValue
SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))

Case REG_DWORD
lValue = vValue
SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)

End Select

End Function

Повертає значення записані в ключі

Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)

Dim lRetVal As Long
Dim hKey As Long
Dim vValue As Variant

lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = QueryValueEx(hKey, sValueName, vValue)

QueryValue = vValue
RegCloseKey (hKey)

End Function

Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long

Dim cch As Long
Dim lrc As Long
Dim lType As Long
Dim lValue As Long
Dim sValue As String

On Error GoTo QueryValueExError

“Визначення розміру і типу зчитувальних даних

lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)

If lrc <> ERROR_NONE Then MsgBox “Даних (ключа) не існує!”, VbExclamation, Form1.Caption

Select Case lType

“Для символьних
Case REG_SZ:
sValue = String(cch, 0)
lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
If lrc = ERROR_NONE Then

vValue = Left$(sValue, cch)

Else
vValue = Empty

End If

“Для числових
Case REG_DWORD:

lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)

If lrc = ERROR_NONE Then vValue = lValue

“Для інших не підтриманих типів даних
Case Else
lrc = -1

End Select

QueryValueExExit:
QueryValueEx = lrc
Exit Function

QueryValueExError:

Resume QueryValueExExit

End Function

Видалення значень ключа

Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)

Dim lRetVal As Long
Dim hKey As Long

lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = RegDeleteValue(hKey, sValueName)

RegCloseKey (hKey)

End Function

Видалення ключа

Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)

Dim lRetVal As Long

lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)

End Function

Виклик функцій з модуля здійснюється наступним чином:

Створення ключа

CreateNewKey HKEY_LOCAL_MACHINE, “VB6”

“Можна створити і підключи
“CreateNewKey HKEY_LOCAL_MACHINE, “VB6RegistryKey”

Запис даних в ключ

SetKeyValue HKEY_LOCAL_MACHINE, “VB6”, “Program”, “Ваші дані”, REG_SZ

Зчитування даних

Dim Variable As Variant

Variable = QueryValue(HKEY_LOCAL_MACHINE, “VB6”, “Program”)

Видалення даних з ключа

DeleteValue HKEY_LOCAL_MACHINE, “VB6”, “Program”

Видалення ключа

DeleteKey HKEY_LOCAL_MACHINE, “VB6”

Увага! Будьте обережні, щоб не видалити головний ключ реєстру Windows.

наверх










5. Як відобразити Help (*. Chm)

При початковій ініціалізації програми вказуємо файл довідки:

App.HelpFile = App.Path & “MyHelp.chm”

В основній формі своєї програми додаємо:

“Help Support Declarations

Private Declare Function HtmlHelp Lib “hhctrl.ocx” _
Alias “HtmlHelpA” (ByVal hwndCaller As Long, _
ByVal pszFile As String, ByVal uCommand As Long, _
ByVal dwData As Long) As Long

Private Const HH_HELP_CONTEXT = &HF
Private Const HH_DISPLAY_INDEX = &H2
Private Const HH_DISPLAY_TOC = &H1
Private Const HH_CLOSE_ALL = &H12

” Help support

Private Sub cmdHelpContents_Click () “Обробка пункту меню Help / Contents
HtmlHelp Me.hWnd, App.HelpFile, HH_DISPLAY_TOC, 0
End Sub

Private Sub cmdHelpIndex_Click () “Обробка пункту меню Help / Index
HtmlHelp Me.hWnd, App.HelpFile, HH_DISPLAY_INDEX, 0
End Sub

Public Sub HelpContext(ID As Long)
If ID = 0 Then
MsgBox “No help is available for this item.”, vbInformation
Else
HtmlHelp Me.hWnd, App.HelpFile, HH_HELP_CONTEXT, ID
End If
End Sub

Після цього всю обробку клавіш F1 і кнопок Help перенаправляємо в HelpContext
з відповідним HelpContextID. Цей ID призначаємо свій для кожного з діалогів
і важливих контролів.

наверх










6. Як додати іконки в меню

Створіть новий проект з формою і кнопкою на ній. Додайте picturebox (встановіть Autosize = True) з картинкою bmp (не іконкою ico!), Розмір картинки має бути 13х13. Скопіюйте в проект код прикладу.

Declare Function GetMenu Lib “user32” (ByVal hwnd As Long) As Long
Declare Function GetSubMenu Lib “user32” (ByVal hMenu As Long, ByVal nPos As Long) As Long
Declare Function GetMenuItemID Lib “user32” (ByVal hMenu As Long, ByVal nPos As Long) As Long
Declare Function SetMenuItemBitmaps Lib “user32” (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long

Public Const MF_BITMAP = &H4&

Type MENUITEMINFO

cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long

End Type

Declare Function GetMenuItemCount Lib “user32” (ByVal hMenu As Long) As Long
Declare Function GetMenuItemInfo Lib “user32” Alias “GetMenuItemInfoA” (ByVal hMenu As Long, ByVal un As Long, ByVal b As Boolean, lpMenuItemInfo As MENUITEMINFO) As Boolean

Public Const MIIM_ID = &H2
Public Const MIIM_ENGINE= &H10
Public Const MFT_STRING = &H0&

Private Sub Command1_Click()

“Get the menuhandle of your app
hMenu& = GetMenu(Form1.hwnd)

“Get the handle of the first submenu (Hello)
hSubMenu& = GetSubMenu(hMenu&, 0)

“Get the menuId of the first entry (Bitmap)
hID& = GetMenuItemID(hSubMenu&, 0)

“Add the bitmap
SetMenuItemBitmaps hMenu&, hID&, MF_BITMAP, Picture1.Picture, Picture1.Picture

End Sub

Ще. На vbaccelerator.com см. cPopMenu.ocx

наверх










7. Як з програми дізнатися шлях, звідки вона запущена

App.Path вам допоможе.

Тим не менш, тут є одна особливість – якщо ми запускаємо програму з c: empmy_program, то App.Path поверне “c: empmy_program” (без слеша в кінці), а якщо запускаємо просто з диска (скажімо, d :), то в App.Path буде слеш в кінці – “d:”.

Тобто потрібно ще аналізувати наявність слеша в кінці.

наверх










8. Як відкрити файл в свзянанном з ним додатку

Розташуй на формі textbox і button. Шлях, природно, пиши в texbox “е.

Option Explicit
Private 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

Const SW_SHOWNORMAL = 1

Private Sub Command1_Click()
Call ShellExecute(0, “open”, text1.text, “”, “”, SW_SHOWNORMAL)
End Sub

наверх










9. FTP Commands

CD file1 Change Directory. Changes to the directory specified in file1. Execute , “CD docsmydocs”

CDUP Change to Parent. Same as “CD ..” Execute , “CDUP”

DELETE file1 Deletes the file specified in file1. Execute , “DELETE discard.txt”

DIR [ file1 ] Searches the directory specified in file1. If file1 isn”t supplied, the current working directory is searched. Use the GetChunk method to return the data. Execute , “DIR /mydocs”

GET file1 file2 Retrieves the remote file specified in file1, and creates a new local file specified in file2. Execute , _
“GET getme.txt C:gotme.txt”

MKDIR file1 Creates a directory as specified in file1. Success is dependent on user privileges on the remote host. Execute , “MKDIR /myDir”

PUT file1 file2 Copies a local file specified in file1 to the remote host specified in file2. Execute , _
“PUT C:putme.txt /putme.txt”

PWD Print Working Directory. Returns the current directory name. Use the GetChunk method to return the data. Execute , “PWD”

QUIT Terminate current connection Execute , “QUIT”

RECV file1 file2 Same as GET. Execute , _
“RECV getme.txt C:gotme.txt”

RENAME file1 file2 Renames a file. Success is dependent on user privileges on the remote host. Execute ,
“RENAME old.txt new.txt”

RMDIR file1 Remove directory. Success is dependent on user privileges on the remote host. Execute , “RMDIR oldDir”

SEND file1 Copies a file to the FTP site. (same as PUT.) Execute , _
“SEND C:putme.txt /putme.txt”

SIZE file1 Returns the size of the file specified in file1. Execute

наверх










10. Як програвати. Gif – анімацію

Лежить на VBstreets:
vbsdown.aic.ru/vb/ocx/animgif.zip

наверх










11. Як знайти ім’я. Exe файлу з hWnd вікна

Option Explicit

Const TH32CS_SNAPPROCESS As Long = 2&
Const MAX_PATH As Long = 260

Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwflags As Long
szexeFile As String * MAX_PATH
End Type

Private Declare Function GetWindowThreadProcessId Lib “user32” (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function CreateToolhelpSnapshot Lib “Kernel32” Alias “CreateToolhelp32Snapshot” (ByVal lFlgas As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib “Kernel32” Alias “Process32First” (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib “Kernel32” Alias “Process32Next” (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib “Kernel32” (ByVal hPass As Long)

Public Function GetExeFromHandle(hwnd As Long) As String

Dim threadID As Long, processID As Long, hSnapshot As Long
Dim uProcess As PROCESSENTRY32, rProcessFound As Long
Dim i As Integer, szExename As String

threadID = GetWindowThreadProcessId(hwnd, processID)

If threadID = 0 Or processID = 0 Then Exit Function

hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)

If hSnapshot = -1 Then Exit Function

uProcess.dwSize = Len(uProcess)

rProcessFound = ProcessFirst(hSnapshot, uProcess)

Do While rProcessFound
If uProcess.th32ProcessID = processID Then
i = InStr(1, uProcess.szexeFile, Chr(0))
If i > 0 Then szExename = Left$(uProcess.szexeFile, i – 1)
Exit Do
Else
rProcessFound = ProcessNext(hSnapshot, uProcess)
End If
Loop

Call CloseHandle(hSnapshot)
GetExeFromHandle = szExename

End Function

наверх










12. Як відобразити список всіх запущених програм

(Для роботи прикладу треба помістити на форму кнопку і список)

Const TH32CS_SNAPPROCESS As Long = 2&
Const MAX_PATH As Integer = 260
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type
Private Declare Function CreateToolhelpSnapshot Lib “Kernel32” Alias “CreateToolhelp32Snapshot” (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib “Kernel32” Alias “Process32First” (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib “Kernel32” Alias “Process32Next” (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib “Kernel32” (ByVal hPass As Long)

Private Sub Command1_Click()
List1.Clear
Dim hSnapShot As Long
Dim uProcess As PROCESSENTRY32
Dim r As Long
hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
If hSnapShot = 0 Then
Exit Sub
End If
uProcess.dwSize = Len(uProcess)
r = ProcessFirst(hSnapShot, uProcess)
Do While r
List1.AddItem uProcess.szExeFile
r = ProcessNext(hSnapShot, uProcess)
Loop
Call CloseHandle(hSnapShot)
End Sub

наверх










13. Як завантажити файл з Internet не використовуючи Winsock

Public Declare Function URLDownloadToFile Lib “urlmon” Alias “URLDownloadToFileA” (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Call URLDownloadToFile(0, ” www.vbstreets.ru/default.asp, “c:file.asp”, 0, 0)

наверх










14. Як встановити гарячі клавіші для виклику програм

Скопіюйте наступний код і запустіть програму
Потім запустіть будь-який додаток, або зробіть, щоб ваша програму стала неактивною
Натисніть клавіші Alt + z (гаряча клавіші в цьому прикладі) і ви побачите знову вашу програму
Private Declare Function SendMessage Lib “user32” Alias “SendMessageA” (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Private Declare Function DefWindowProc Lib “user32” Alias “DefWindowProcA” (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_SETHOTKEY = &H32
Private Const WM_SHOWWINDOW = &H18
Private Const HK_SHIFTA = &H141 “Shift + A
Private Const HK_SHIFTB = &H142 “Shift + B
Private Const HK_CONTROLA = &H241 “Control + A
Private Const HK_ALTZ = &H45A
Private Sub Form_Load()
“Дозволити дізнатися windows яка гаряча клавіша у вашому додатку
erg& = SendMessage(Me.hwnd, WM_SETHOTKEY, HK_ALTZ, 0)
If erg& <> 1 Then MsgBox “You need another hotkey”, vbOKOnly, “Error”
“Сказати windows що робити при натисканні на hotkey
“В даному випадку – показати вікно програми
erg& = DefWindowProc(Me.hwnd, WM_SHOWWINDOW, 0, 0)
End Sub

наверх










15. Як визначити повну позицію курсора в TextBox

Private Function CursorPosition(Text As TextBox, Param As Byte)

“********************************************************
“Якщо param = 0 – функція повертає позицію курсора в рядку
“Якщо param = 1 – функція повертає номер рядка, в якій знаходиться курсор
“********************************************************

Dim i As Integer “змінна для циклу
Dim j As Integer “лічильник рядків
Dim Cursor As Integer “відносна позиція курсора

Cursor = Text.SelStart + Text1.SelLength

For i = 1 To Cursor
If Mid(Text, i, 1) = Chr(13) Then j = j + 1
Next i

If Param = 0 Then
CursorPosition = Cursor – InStrRev(Mid(Text, 1, Cursor), Chr(13))
If j = 0 Then CursorPosition = CursorPosition + 1
Else
CursorPosition = j + 1
End If

End Function

наверх










16. Як відправити дані на севрер за методами GET / POST

Треба додай WinSock Control і кнопку. У код форми вставити:

Winsock1.Protocol = sckTCPProtocol “Установка протоколу
Winsock1.Connect “ім’я_сервера”, 80 “підключення через порт 80
While Not Winsock1.State = 7 “Чекаємо, поки підключиться.
DoEvents ”
Wend “

Parametrs = “параметр1 = значення & параметр2 = значення” “зберігаємо параметри в” змінній

Далі все залежить від того, яким методом передавати. Якщо через метод POST, то:

Winsock1.SendData “POST / адрес_скріпта HTTP/1.1” & vbCrLf
Winsock1.SendData “Content-Type: application/x-www-form-urlencoded” & vbCrLf
Winsock1.SendData “Host: ім’я_сервера” & vbCrLf
Winsock1.SendData “Content-Length: ” & len(Parametrs) & vbCrLf & vbCrLf
Winsock1.SendData Parametrs & vbCrLf

Якщо через метод GET, то:

Winsock1.SendData “GET / адрес_скріпта?” & Parametrs & “HTTP/1.0” & vbCrLf & vbCrLf

Далі сервер запустить скрипт і передасть дані, еоторие видасть скрипт, т.е сторінку, яка з’явилася б у браузері. Якщо треба прийняти ці дані, то додай ще це:

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Data As String
Winsock1.GetData Data
End Sub

У змінній Data будуть тільки що прийняті дані, збережи їх де-небудь (наприклад в інший змінної), можеш робити з ними, що захочеш. Спочатку сервер видасть відповідь типу:

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Fri, 22 Feb 2002 11:12:20 GMT
Connection: Keep-Alive
Content-Length: 8
Content-Type: text/html
Set-Cookie: ASPSESSIONIDQGQQQLBQ=DFPBBDBDJOGMHODFDFALACNK; path=/
Cache-control: private

Після того, як параметри закінчаться, буде порожній рядок, а потім сторінка.
Кількість символів зазначено в параметрі Content-Length.

наверх








17. Які інсталятори використовувати

CreateInstall (2000), Setup Generator , Setup Generator Pro
www.gentee.com

Інсталятори написані на VC і розмір додається частини – 30 Кб. Є кілька інсталяторів, включаючи безкоштовний Setup Generator.

InnoSetup
www.jrsoftware.org

Написаний на Delphi. Розмір додається частини – 300 Кб. Безкоштовний, з исходниками. Непоганий інтерфейс створюваних інсталяцій.

NullSoft Installation System ( www.winamp.com ) Безкоштовна з исходниками на VC + +. Додає зовсім мало, все залежить від ваших налаштувань і розмірів картинок.

Wise Installer і похідні від нього.

Переваги, потужний, але легкий в настройках, VB подібний скрипт,
Можливість інсталяцію від шрифтів до DSN.
Інсталяцію ADO, та інших Runtime бібліотек.

Одне погано, платний він. Але в інеті повно ліки.


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*