Идёт загрузка страницы...

htp://aptem.net.ru






На главную страничку учебника Visual Basic

API Хитрости

Такой раздел есть практически на любом сайте посвящённым программированию на Visual Basic. Поэтому я тоже решил завести этот раздел. Вот несколько интересных хитростей, реализованных с помощью Windows API:

Перетаскивание формы за любое место:

Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2

Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hWnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
ReleaseCapture
SendMessage Form1.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0
End Sub

Программное UNDO в компоненте (например в TextBox или RichTextBox)

Для создания UNDO просто необходимо послать сообщение WM_UNDO. Также можно послать сообщение EM_CANUNDO для определения возможности отмены. Пример: создайте новый проект, поместите на форму TextBox и кнопку. Вставьте этот код, и после запуска программы введите что-либо в TextBox и нажмите на кнопку.

Const WM_UNDO = &H304

Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hWnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long

Private Sub Command1_Click()
SendMessage Text1.hWnd, WM_UNDO, 0, 0
End Sub

Отключение действия Ctrl+Alt+Del в Windows 9x (не в NT!)

Declare Function SystemParametersInfo Lib "user32" Alias _
"SystemParametersInfoA" (ByVal uAction As Long, _
ByVal uParam As Long, ByVal lpvParam As Any, _
ByVal fuWinIni As Long) As Long

Для отключения реакции на Ctrl+Alt+Del:
SystemParametersInfo 97, True, ByVal 1&, 0

Для включения:
SystemParametersInfo 97, False, ByVal 1&, 0

Примечание: Не забудьте после закрытия программы снова включить реакцию на Ctrl+Alt+Del.

Скрытие программы в списке задач Task Manager (т.е. в списке Ctrl+Alt+Del)

Declare Function RegisterServiceProcess Lib "kernel32.dll" _
(ByVal dwProcessId As Long, ByVal dwType As Long) As Long

Declare Function GetCurrentProcessId Lib "kernel32.dll" () As Long

Для скрытия:
RegisterServiceProcess GetCurrentProcessId, 1

Для показа:
RegisterServiceProcess GetCurrentProcessId, 0

Программное открытие и закрытие CDROM'а

CDROM можно открывать и закрывать посылая текстовое сообщение ф-цией mciSendString, которая сидит в библиотеке winmm.dll.

Declare Function mciSendString Lib "winmm.dll" _
Alias "mciSendStringA" (ByVal lpstrCommand As String, _
ByVal
lpstrReturnString As String, ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long

Открыть CD:
mciSendString "Set cdaudio door open wait", 0, 0, 0

Закрыть CD:
mciSendString "Set cdaudio door closed wait", 0, 0, 0

Вызвать окно свойств (Properties) файла (прислал Гриневич Дмитрий)

Declare Function ShellExecuteEX Lib "shell32.dll" Alias _
"ShellExecuteEx" (SEI As SHELLEXECUTEINFO) As Long
Const
SEE_MASK_INVOKEIDLIST = &HC
Const SEE_MASK_NOCLOSEPROCESS = &H40
Const SEE_MASK_FLAG_NO_UI = &H400
Private Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type

Public Sub ShowProps(FileName As String, OwnerhWnd As Long)
Dim SEI As SHELLEXECUTEINFO
Dim r As Long
With
SEI
.cbSize = Len(SEI)
.fMask = SEE_MASK_NOCLOSEPROCESS Or _
SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI
.hwnd = OwnerhWnd
.lpVerb = "properties"
.lpFile = FileName
.lpParameters = vbNullChar
.lpDirectory = vbNullChar
.nShow = 0
.hInstApp = 0
.lpIDList = 0
End With
r = ShellExecuteEX(SEI)
End Sub

Пример:

Private Sub Form_Load()
Call ShowProps("C:\AUTOEXEC.BAT", Me.hwnd)
End Sub

 

На главную страничку учебника Visual Basic