API Хитрости Такой раздел есть практически на любом сайте посвящённым программированию на Visual Basic. Поэтому я тоже решил завести этот раздел. Вот несколько интересных хитростей, реализованных с помощью Windows API: Перетаскивание формы за любое место Программное UNDO в компоненте (например в TextBox или RichTextBox) Отключение действия Ctrl+Alt+Del в Windows 9x (не в NT!) Скрытие программы в списке задач Task Manager (т.е. в списке Ctrl+Alt+Del) Программное открытие и закрытие CDROM'а Вызвать окно свойств (Properties) файла Перетаскивание формы за любое место: 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