Часть 1/Часть 2/Часть 3/Часть 4/Часть 5/Часть 6/Часть 7/Часть 8/Часть 9/ Часть 10 /Часть 11/Часть 12/Часть 13/Часть 14/Часть 15
Если у тебя нет духа программера, или ты по какой - то причине был
непосвещен, то дальше МОЖЕШЬ НЕ ЧИТАТЬ!!! Т.к. API это не для чайников, а если
ты не посвещен, то удивительно как ты вообще досюда дочитал. Вообще в API ни
чего сложного нет, т.к. в них даже думать особо не надо.
Винд использует
кучу АПИ(их около 10000), например для работы с реестром, установки рисунка на
рабочем столе, изменения разрешения экрана...(не буду их всех перечислять, т.к.
это займет много времени). И зачем писать огромный код, когда можно использовать
АПИ винда. И VB невсегда может сделать то, что можно сделать с помощью АПИ. Вот
так. Теперь я дам тебе задание: "На рабочем столе создай текстовой документ(или
какой - нибудь другой), назови его как - нибудь, в него ты будешь записывать все
АПИ, которые ты считаешь нужными(т.к. есть еще куча не нужных)" Создал? Молодец,
теперь запиши туда свою первую АПИ(см. ниже).
АПИ можно разделить на 2
части. В первой - мы ее декларируем, а во второй пишем код. Вот маленький пример
функции, которая устанавливает курсор в любое место на экране:
Public
Declare Function SetCursorPos Lib "user32" (ByVal r As Long, ByVal r1 As Long)
As Long 'Это как ты наверное понял(или нет?) процесс
декларации, здесь я написал в самом начале Public, это означает что
декларировать можно где хош, хоть в модуле(ой, сорри, ДЕКЛАРИРОВАТЬ МОЖНО ТОЛЬКО
В МОДУЛЕ, но декларация будет глобальна...); если написать Private - то АПИ
можно будет использовать только в том месте где находится код к ней(это обычно в
форме); а если вообще ни чего не писать(оставить Declare...as Long), то
декларировать можно будет только в Модуле
Private Sub
Command1_Click() 'При нажатии на кнопку устанавливаем курсор в
координаты 66 и 77
qqq = SetCursorPos(66, 77)
End Sub
Мою
коллекцию API ты можешь увидеть Здесь. Сборник многих API ты
можешь скачать с моего сайта - ИЩИ.
Т.к. у некоторых версий винда нестандартная дирка (у Винда95 - Win95, у других Windows...), наша цель узнать ее. Для этого можно использовать очень старую (еще с QBasic), и почти всеми забытою функцию Environ("windir")(Text1.Text = Environ("windir")), но истинный программер должен знать и API функцию. GetWindowsDirectory.
На форму кидаем текстовое поле и кнопку. В модуле декларируем API-функцию GetWindowsDirectory:.Для этого войди в Project/Add Module и нажми Module. Они нужны для объявления глобальных переменных и декларирования API функций.
Declare Function
GetWindowsDirectory
Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As
String, ByVal nSize As
Long) As Long
Теперь впиши эту феньку в окне кода проги:
Private Sub Command1_Click()
Dim WinDir As
String
'Переменную, которую надо передать API, мы
уже
'объявили и теперь заполняем
пробелами.
' Пробелов должно быть примерно
столько,
'сколько примерно символов должна иметь
переменная.
'В этом случае хватит и 20, т.к.
Windows обычно устанавливают в
' С:\Windows или
C:\Win95, и т.д. Т.е. сумма символов, скорее
'
всего не превысит 20
WinDir = Space(20)
Text1.Text= Left(WinDir,
GetWindowsDirectory(WinDir, 20))
'Т.к. API
является функцией, то она должна возвращать какое-то
'значение. В данном случае функция GetWindowsDirectory
возвращает
'длину искомого значения. Т.е. если,
например, искомое значение
' это C:\WINDOWS, то
функция вернёт значение 10.
'Переменная же имеете
длину 20. Эти 10 символов записываются
'первыми,
а дальше идут 10 пробелов. Зачем нам, спрашивается,
'лишние 10 символов? Ведь это используется ненужная
память...
'Поэтому инструкцией Left мы из
переменной WinDir вытаскиваем
'ровно столько
первых символов, сколько вообще нужных...
End Sub
У тебя в
текстовом поле появится путь к винду, а что касается деклараций функций, не
забывай указывать ByVal, здесь вместо ipBuffer и nSize можно указать любую букву
или слово (хоть Suka Bla)
Реестр эта база данных винда (ой, бля я же забыл тебе сказать, что
такое базы данных). Ну ладно уговорил, скажу, что это такое: База данных это
любой текст, который где - то хранится (например, в текстовом документе). Ну я
это точно не знаю т.к. в базах я не спец. А создавать мы их будем в ближайшем
будущем, т.к. щас у меня нет одной проги, без которой не обойтись. Ну хватит
определений!!! Уже 2 штуки сказал! Перейдем к делу! Короче в реестре хранятся
все настройки юзера. Например разрешение экрана, логин от инет карты, а пароль
мы узнаем другим способом, с помощью реестра ты можешь сделать так чтоб твоя
прога запускалась при старте винда (т.е. при входе в прогу, юзер от нее никогда
не избавится, короче в нем хранится почти все настройки юзера (и не только, все
устройства, расширения файлов...), их можно менять, дополнять.... Но об этом
потом. ВСЕ ПОТОМ. А сейчас будем работать с реестром с помощью VB. Но скажу
сразу возможности VB ограничены, и это еще сильно сказано. В VB можно работать
только с одним ключем, а этот ключ - самый ненужный ключ во всем Реестре, даже
нельзя поместить прогу в автозагрузку, а это унизительно..., НО, все равно, для
хранения настроек проги он сойдет. Начнем.
Прога для работы с реестром
находится в Винде, и зовется она RegEdit.EXE. Найди ее. А для ленивых есть в
Пуске Раздел "Выполнить", нажми на него, и в текстовом поле впиши regedit и
нажми ОК. Перед тобой откуда не возмись открывается окно Редактор реестра. Там
находится 6 ключей, но нам они не нужны, т.к. мы работаем без АПИ, а с помощью
функций VB, а VB может работать только с одним ключем -
HKEY_CURRENT_USER. Нажми на него(или 2 раза по нему, или один раз на
плюс). Перед тобой появляется до хрена подключей, но нам они опять не нужны,
т.к. МЫ БЕЗ АПИ КАК БЕЗ РУК!!!, но все равно нажми на SOFTWARE(т.е. Софт). И вот
оно! То что нам надо! Это ключ VB and VBA Program Setting. В этом ключе Басик
чувствует себя как дома! И в этом ключе мы будем работать с помощью VB функцмий.
Полный путь к нему: HKEY_CURRENT_USER\SOFTWARE\VB and VBA Program Settings.
Прежде чем рассказать о функциях я скажу пару умных слов(НЕ
ОПРЕДЕЛЕНИЙ!!!!!!!!!!!!!!!!!!!!!).
Ключ - это таккая хрень, которая
находится в самом начале, и начинается на HKEY_(ключей всего 6)
Подключ - это
все что находится в ключе.
Строковой параметр - Ты наверное заметил, что
редактор реестра поделен на 2 части, в первой - Ключи & Подключи, во второй
- Строковые параметры, и числовые. А строковые параметры выглядят так:
Числовые нам вообще пока не
нужны, они выглядят почти также, тока синие.
Как всегда сделаем прогу,
которая будет сохранять текст в реестр(т.е. в строковой параметр), читать их от
туда, создовать навые подключи. Войди в VB, на форму кинь 3 кнопки(У первой
Caption = "Сохранить", у 2ой - "Удалить", у 3ей - "Прочитать"), и текстовое
поле. Код:
Private Sub Command1_Click()
SaveSetting "New Ключ", "Нью
Подключ", "Строковой Параметр", "Строковое значение которое принемает параметр"
'Создаем ключ New Ключ(т.е. подключ), и подключ Нью Подключ, в
подключе Нью Ключ создаем Строковой параметр, а в нем запись.
End
Sub
Private Sub Command2_Click()
'Удаляем
DeleteSetting "New Ключ", "Нью Подключ",
"Строковой Параметр" 'Если ты хочешь удалить сразу всю папку
то впиши: DeleteSetting "New Ключ"
End Sub
Private Sub
Command3_Click()
Text1.Text = GetSetting("New Ключ", "Нью Подключ",
"Строковой Параметр")'Читаем в текстовое поле содержимое
Строкового параметра
End Sub
Теперь в редакторе реестра нажнми
Вид\Обновить, или просто F5.
Исходник
Вот оно! То что нам надо! Теперь перейдем на нормальную работу с
реестром. Ура! Открой VB(Standart EXE), создай там модуль и вставь туда этот
код:
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
Все, модуль сделали, и теперь про него можешь забыть. Теперь
переключичсь на форму. На нее кинь 4 кнопки(у первой Caption = "Создать", у 2ой
= "Запись", у 3ей = "Чтение", у 4ой и 5ой = "Удаление") и текстовое поле.
Код:
Private Sub Command1_Click()
'Создание
ключей
CreateNewKey HKEY_LOCAL_MACHINE, "VB6"
'Можно создать и подключи
'CreateNewKey
HKEY_LOCAL_MACHINE, "VB6\RegistryKey"
End Sub
Private Sub
Command2_Click()
'Запись
SetKeyValue
HKEY_LOCAL_MACHINE, "VB6", "Proga", "Твои данные", REG_SZ
End Sub
Private
Sub Command3_Click()
'Чтение
Dim Variable As
String
Text1.Text = QueryValue(HKEY_LOCAL_MACHINE, "VB6", "Proga")
End
Sub
Private Sub Command4_Click()
'Удаление данных из
ключа
DeleteValue HKEY_LOCAL_MACHINE, "VB6", "Program"
End
Sub
Private Sub Command5_Click()
'Удаление
ключа
DeleteKey HKEY_LOCAL_MACHINE, "VB6"
End Sub
Вот в этом
"маленьком" примере лежат самые основы реестра.
Исходник
Теперь
сделаем прогу которая будет записывать в святую святых РЕЕСТРА нашу прогу(т.е. в
подключ Run).
Святая святых реестра это раздел Run, т.е. наша прога будет
запускаться при запуске компа. Что нам для этого надо? Нам нужен Модуль который
мы сделали в предыдущем шаге. Его ты можешь скачать Здесь. Чтобы подключить его
нажми Проэкт(Project)>>Добавить файл(Add File). В появившимся окне выбери
наш модуль. Теперь на форму кинь кнопку, при нажатии на нее путь к нашей проге
попадает в святую святых реестра.
Для начала я скажу где хранится раздел Run
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run . Да, да сюда
мы сейчас и будем записывать свою прогу. Кстати, в этом же разделе есть 5-7
папок начинающихся на Run, они тоже сойдут(например RunOnce).Код(ТОЛЬКО НЕ
ЗАБУДЬ МОДУЛЬ ПОДКЛЮЧИТЬ!!!!)
Dim q As String
Private Sub
Command1_Click()
q = App.Path + "proga.exe" 'Узнаем путь к
нашей проге(App.Path), и прибовляем ее название(НЕЗАБУДЬ ЕЕ ПЕРЕИМЕНОВАТЬ В
proga)
SetKeyValue HKEY_LOCAL_MACHINE,
"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Proga", q, REG_SZ 'Запись!
End Sub
Теперь немного объясню: Первой
идет функция SetKeyValue, она нужна для записи(Ты что забыл?), потом главный
ключ(HKEY_LOCAL_MACHINE), потом путь к объекту
Run(SOFTWARE\Microsoft\Windows\CurrentVersion\Run), потом название строкового
параметра(Proga(ты можешь написать хоть Сука бля ламер, это не имеет значения)),
а потом путь к проге. Вот и все!
Исходник
Не зная о чем писать, я решил тебе устроить маленький прогрузон,
рассказать тебе множество моих советов, и мож они тебе пригодятся.
Чтоб твоя прога была во весь экран необязательно использовать
длинные API функции, можно обойтись и без нее.
Входим в VB(Standart EXE), у
формы в свойстве BorderStyle - ставим 0 - None, в Form_Load пишем:
Private
Sub Form_Load() 'При запуске формы:
Form1.Width =
Screen.Width 'Ширина формы будет равна ширине
экрана
Form1.Height = Screen.Height 'Высота формы
будет равна высоте экрана
End Sub
Слава мне!!! Я опять обошелся без API!!! На форму кидаем текстовое
поле и кнопку. Код:
Private Sub Command1_Click() 'При
нажатии на кнопку:
Dim width As String 'Объявляем
переменную width как строковую
Dim height As String
'Объявляем переменную height как строковую
width = Screen.width /
15
height = Screen.height / 15
Text1.Text = width + "x" + height
End
Sub
Здесь я не буду тебя грузить, скажу саму идею. На форму кидаем
Frame. У него убираем свойство Caption, и него кидаем несколько меток. Это и
будет твое меню. Сворачиваем фрейм до минимума, оставляем только одну метку, и
при нажатии на нее фрейм должен разворачиваться до обычного размера, ну идею ты
наверное понял, короче сделай так чтоб она была похожа на обычное меню. У тебя
должна получится такая фенька:
Достоинства этого меню:
Ты можешь запихнуть туда картинку, поменять шрифт...
Хей перцы! Меня кто - нибудь слышит? Отлично! Тогда я тебе скажу
одну полезную штуку, как надо запретить запуск двух копий проги, но не просто
запретить, а и еще обасрать, чтоб в следующий раз юзер думал, а потом
кликал!
Private Sub Form_Load()
If App.PrevInstance = True Then
MsgBox "Эй ламер поганый, ты что ослеп что ле, я уже запущена!!!",16,"Думай
что делаешь!"
End
End If
End Sub
Ща я тебе покажу, как надо отсылать свои сообщения в любые другие
проги. Тебе надо только указать заголовок той проги, куда ты хочешь отослать
свой текст.
Private Sub Command1_Click()
AppActivate ("Безымянный") 'Здесь пишем заголовок проги (место Безымянный можешь написать
WordPad, Установка связи...)
SendKeys ("Эй Блокнот - меня слышно?")
'Отсылаемый текст
End Sub
Очень часто(особенно когда в реестре прописываешь) надо знать имя
своей проги. Ты скажешь: "А нафига? Я ведь ее назвал, и имя запомнил.". А юзер -
то может ее и переименовать, для этого есть свойство ExeName у объекта App.
Private Sub Form_Load()
Text1.Text = App.EXEName + ".exe"
End Sub
Иногда надо узнать полный путь к своей проге (например, чтоб
прописать ее в реестре...), и для этого в VB есть свойство Path(Путь). На форму
кинь Текстовое поле и кнопку.
Private Sub Command1_Click()
Text1.Text =
App.Path 'В Текстовом поле появится путь к твоей
проге
End Sub
Ты наверное заметил, что когда всуешь CD в CD - ROM, происходит
Автозапуск. Если у тебя есть пишущий сидюшник, то это как раз для тебя, но если
у тебя его нет, ты можешь сделать Autorun для диска C: например, или любого
другого диска. Начнем! Я буду рассматривать на примере диска C:, т.к. не у всех
сидюшник пишет, но точно также можно делать и для круглых дисков. В диске C:
создай текстовой документ, в нем
впиши:
[autorun]
open=1.exe
icon=1.ico
Здесь Open = путь к
файлу,Icon = иконка для диска. Сохраняй его как Autorun.inf(он должен сидеть в
корневом каталоге диска(у нас C:\)). Входи в Мой комп, жми F5(обновить), и
любуйся.
Ты наверное заметил, что оператор Dim не обязательно писать пять
раз, чтобы объявить пять переменных а можно написать так:
Dim QW1, QW2, QW3,
QW4, QW5 As Long
Здесь мы объявляем пять переменных, но всели они будут Long?
НЕТ!!! Первые четыре будут Variant, а только последняя будет Long. Если я тебе
не говорил в чем раздница между Variant, Long, Integer..., то слушай:
Variant
- жрет памяти очень много, ее используют только начинающие VB программеры(если
ты все еще используешь Variant - ТО СРОЧНО ПЕРЕХОДИ НА LONG!!!)
>
Integer(8 бит) - Этот тип жрет памяти меньше чем Variant(она вроде 16 бит), но
больше чем Long(2 бита).
Long - этот тип жрет памяти меньше всего, и ты если
используешь другой, то переходи на него!!!
Это я говорю к тому, что если ты
хочешь объявлять переменные в одну строчку, а не в пять, то пиши так:
Dim QW1
As Long, QW2 As Long, QW3 As Long, QW4 As Long, QW5 As Long
Иногда, бывает что прога виснет(очень часто это бывает когда цикл зацикливается). Короче, чтоб безопасно выключить прогу надо нажать Ctrl + PauseBreak.
Чтобы выполнить последовательность команд над одним объектом, не
перечисляя его каждый раз, есть инструкция With. Не буду тебе о нем много
говорить, а лучше покажу как пользоваться.
Private Sub Command1_Click() 'При нажатии на кнопку:
With Label1
Делаем инструкцию With для Метки
.Caption = "Сука"
'Меняем надпись
.FontSize = 14 'Меняем
шрифт
.ForeColor = vbRed 'Меняем цвет
End
With 'Завершаем инструкцию
End Sub
Теперь ты
можешь не писать по десять раз имя объекта
Для использование своего курсора есть спец АПИ функция. Вот
код:
Private Declare Function CopyCursor Lib "user32" Alias "CopyIcon"
(ByVal hcur As Long) As Long
Private Declare Function LoadCursorFromFile Lib
"user32" Alias "LoadCursorFromFileA" (ByVal lpMyFileName As String) As
Long
Private Declare Function GetCursor Lib "user32" () As Long
Private
Declare Function SetSystemCursor Lib "user32" (ByVal hcur As Long, ByVal id As
Long) As Long
Private NewCur, OldCur As Long
Private Sub
Form_Load()
NewCur = LoadCursorFromFile("c:\APPSTART.ani")'Там где необходимо запоминаем системный курсор и загружаем
анимированный
OldCur = GetCursor()
OldCur =
CopyCursor(OldCur)
SetSystemCursor NewCur, 32512
End
Sub
Private Sub Form_Unload(Cancel As Integer)
If OldCur <> 0
Then SetSystemCursor OldCur, 32512'Выгружаем наш курсор и
возращаем стандартный
End Sub
А ты спросишь: "Где ani курсора
достать?" Нажми F3 и впиши *.ani, и он должен в папке Windows найти 3
анимированных курсора.
У меня для тебя хорошая новость - ТЕПЕРЬ ФУНКЦИИ API НЕ НАДО ДЕКЛАРИРОВАТЬ!!! Теперь можно скачать с моего сайта библиотеку wintlb. Подключив ее большинство API функций не надо декларировать(~700), и самое главное то, что функция, которую ты не будешь декларировать - МЕСТО ЗАНИМАТЬ НЕ БУДЕТ! Для ее подключения войди в Project/Referentces, жми Browse, ищи библиотеку, и подключай ее. Теперь можешь написать, например API для нахождения дирки винда (только без Declare...) Скачать БИБЛОТЕКУ(Если не будет скачиваться, то зайди на мой сайт(vbstreets.narod.ru), и в разделе библиотеки можешь ее скачать)
Любая прога, даже крутая, без озвучивания будет не прога, а какая -
то фигня, но VB сам не может проигрывать звуковые файлы, и для проигрывания
звуковых файлов воспользуемся API функцией. На форму кинь 2 кнопки, и впиши
код: автор учебника: Падре
Private Declare Function mciExecute Lib "winmm.dll" (ByVal
lpstrCommand As String) As Long
'Чтобы воспроизвести
файл:
Private Sub Command2_Click()
Call mciExecute("play
2.wav") 'Проигрываем файл 2.wav, он должен находиться в той же
папке, где и сама прога(НИКОГДА НЕ ПИШИ ПОЛНЫЙ ПУТЬ - например c:\2.wav, - на
вражеском компе, звуков не будет, т.к. комп будет искать на другом компе, в
диске c:\ звуковой файл(а его там и нету), а если ты напишешь 2.wav, то он будет
искать в той же папке, где и сама прога)
End Sub
'Чтобы закрыть файл:
Private Sub Command1_Click()
Call
mciExecute("close 2.wav")
End Sub
При нажатии на 2 кнопку,
издастся звук, при нажатии на 1 кнопку он остановится.
Здесь Исходник
Если ты
зайдешь на мой сайт, кликни плиз по банеру Porta(сиреневый), мне за это немного
бабла отвалется(2 цента). И если ты захочешь поддержать Отечественного
производителя(т.е. Меня), то кликай по банеру раз в месяц. А если ты очень
богатый, то не просто кликни, а еще что - нибудь купи.
Дата создания: 26 Марта 2003
года
Место под Банеры |
![]() |