VBNet
VBMania
Голосование: Ваш голос отсылается по E-mail владельцу сайта, после чего голоса анализируются и на отдельной странице выводятся результаты. Нет тем. Доска почёта: Sergey Y. Tkachev Кононенко Роман Kirill Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Новый выпуск!
Читайте! Содержание выпуска
Книги
Остальные книги о VB можно найти здесь. наверх Как сэмулировать нажатия определенных клавиш Для имитации нажатия на клавишу мыши служит API-функция mouse_event Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) dwFlags - означает, какое событие в данный
момент должно происходит Пример использования функции: неоходимо переместить курсор из текущей точки нахождения курсора в точку с координатами (851,143) и в этой точке имитировать нажатие левой клавиши мыши Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As
Long Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx
As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) 'Имитация клика: Подсчет нажатий на кнопки мыши Данный пример покажет, как можно установить глобальный хук на мышь, и ваша программа будет считать количество нажатий на клавиши мыши и на колесо прокрутки. Также ваша программа будет реагировать на нажатие любой клавиши клавиатуры. Также данный пример в окне DEBUG располагает информацию о местоположении курсора. Добавьте модуль в вашу программу и также
расположите на форме 5 элементов TextBox.
Тип клавиатуры Данный пример определит тип клавиатуры Private Declare Function GetKeyboardType Lib "user32" (ByVal nTypeFlag As Long) As Long Private Sub Form_Load() Dim t As String Dim k As Long k = GetKeyboardType(0) If k = 1 Then t = "PC or compatible 83-key keyboard" If k = 2 Then t = "Olivetti 102-key keyboard" If k = 3 Then t = "AT or compatible 84-key keyboard" If k = 4 Then t = "Enhanced(IBM) 101-102-key keyboard" If k = 5 Then t = "Nokia 1050 keyboard" If k = 6 Then t = "Nokia 9140 keyboard" If k = 7 Then t = "Japanese keyboard" MsgBox "Type of keyboard : " & t End Sub наверх Переключение раскладки клавиатуры (Ru-En) Расположите на форме элемент CommandButton. Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long Private Sub Command1_Click() ActivateKeyboardLayout 0, 0 End Sub наверх Какая раскладка клавиатуры включена в данный момент Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long Private Sub Form_Load() Dim KeybLayoutName As String KeybLayoutName = String(9, 0) GetKeyboardLayoutName KeybLayoutName 'Номер 409 - английская, 419 - русская MsgBox "Текущая раскладка номер " & CStr(CLng(Left$(KeybLayoutName, _ InStr(1, KeybLayoutName, Chr(0)) - 1))) End Sub наверх Состояние функциональных клавиш Данный пример покажет вам состояние функциональных клавши: Ctrl Shift Alt CapsLock ScrollLock NumLock Insert Key Option Explicit Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long Private Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) As Long ' Возвращает True если клавиша Ctrl нажата Function CtrlKey() As Boolean CtrlKey = (GetAsyncKeyState(vbKeyControl) And &H8000) End Function ' Возвращает True если клавиша Shift нажата Function ShiftKey() As Boolean ShiftKey = (GetAsyncKeyState(vbKeyShift) And &H8000) End Function ' Возвращает True если клавиша Alt нажата Function AltKey() As Boolean AltKey = (GetAsyncKeyState(vbKeyMenu) And &H8000) End Function ' Возвращает True если нажаты запрашиваемые клавиши 'MsgBox KeysPressed(vbKeyRButton) - нажата ли правая клавиша мыши? Function KeysPressed(ByVal KeyCode1 As KeyCodeConstants, Optional ByVal KeyCode2 As KeyCodeConstants, Optional ByVal KeyCode3 As KeyCodeConstants) As Boolean If GetAsyncKeyState(KeyCode1) >= 0 Then Exit Function If KeyCode2 = 0 Then KeysPressed = True: Exit Function If GetAsyncKeyState(KeyCode2) >= 0 Then Exit Function If KeyCode3 = 0 Then KeysPressed = True: Exit Function If GetAsyncKeyState(KeyCode3) >= 0 Then Exit Function KeysPressed = True End Function ' узнать состояние CapsLock. 'MsgBox GetCapsLock. Если True - то включена, если False - выключена Function GetCapsLock() As Boolean Dim keystat(0 To 255) As Byte GetKeyboardState keystat(0) GetCapsLock = (keystat(vbKeyCapital) And 1) End Function ' Изменение состояния CapsLock: ' SetCapsLock True - включено ' SetCapsLock False - выключено Sub SetCapsLock(ByVal newValue As Boolean) ' get current state of all 256 virtual keys Dim keystat(0 To 255) As Byte GetKeyboardState keystat(0) ' modify bit 0 of the relevant item, and store back keystat(vbKeyCapital) = (keystat(vbKeyCapital) And &HFE) Or (newValue And 1) SetKeyboardState keystat(0) End Sub ' узнать состояние ScrollLock. 'MsgBox GetScrollLock. Если True - то включена, если False - выключена Function GetScrollLock() As Boolean Dim keystat(0 To 255) As Byte GetKeyboardState keystat(0) GetScrollLock = (keystat(vbKeyScrollLock) And 1) End Function ' Изменение состояния ScrollLock. ' SetScrollLock True - включено ' SetScrollLock False - выключено Sub SetScrollLock(ByVal newValue As Boolean) Dim keystat(0 To 255) As Byte GetKeyboardState keystat(0) keystat(vbKeyScrollLock) = (keystat(vbKeyScrollLock) And &HFE) Or (newValue And 1) SetKeyboardState keystat(0) End Sub ' узнать состояние NumLock. 'MsgBox GetNumLock. Если True - то включена, если False - выключена Function GetNumLock() As Boolean Dim keystat(0 To 255) As Byte GetKeyboardState keystat(0) GetNumLock = (keystat(vbKeyNumlock) And 1) End Function ' Изменение состояния NumLock ' SetNumLock True - включено ' SetNumLock False - выключено Sub SetNumLock(ByVal newValue As Boolean) Dim keystat(0 To 255) As Byte GetKeyboardState keystat(0) keystat(vbKeyNumlock) = (keystat(vbKeyNumlock) And &HFE) Or (newValue And 1) SetKeyboardState keystat(0) End Sub ' узнать состояние Insert Key. 'MsgBox GetInsertKey. Если True - то включена, если False - выключена Function GetInsertKey() As Boolean Dim keystat(0 To 255) As Byte GetKeyboardState keystat(0) GetInsertKey = (keystat(vbKeyInsert) And 1) End Function ' Изменение состояния Insert Key ' SetInsertKey True - включено ' SetInsertKey False - выключено Sub SetInsertKey(ByVal newValue As Boolean) Dim keystat(0 To 255) As Byte GetKeyboardState keystat(0) keystat(vbKeyInsert) = (keystat(vbKeyInsert) And &HFE) Or (newValue And 1) SetKeyboardState keystat(0) End Sub наверх Мои программы BalloonMessage for MS Agent BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels. Автор: Шатрыкин Иван. Соавтор: Павел Сурменок. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: Pasha Ответ ожидается по этому адресу Как изменить порядок отображения полей в DbGrid. DbGrid связан с Data, Data связан через ODBC или Jet с таблицей FoxPro Автор вопроса: ]CBK[CRaSH Ответ ожидается по этому адресу Люди как организавать прослушку компов в сети(как в quake or CS) когда жмеш REFRESH он проверяет не все IP а только, те которые находятся в сети. И как сделать с winsock.ocx чтобы к серверу могли подконектится несколько человек Автор вопроса: Rafis Ответ ожидается по этому адресу Как с помощью ВБ текст ия ЮНИКОДа перевести в обычный, например на русский. Автор вопроса: Pavel I.Forkin Ответ ожидается по этому адресу При создании текстового редактора с использованием RichTextBox необходимо сделать 4 кнопки. 1. По левому краю 2. По центру 3. По правому краю 4. По ширине Первые три я делаю без проблем. Не подскажите как сделать четвертую. Автор вопроса: Евгений Ответ ожидается по этому адресу Как можно управлять Active Directory в Win2K программным пут?м, т.е.: соядать польяователя, удалить польяователя, сменить ему пароль, ияменить данные и настройки также, как в Active Directory. Автор вопроса: Винокуров К Ответ ожидается по этому адресу Как соядатьпрограмму-терминалку (BBS)? Автор вопроса: Михаил Ответ ожидается по этому адресу Как с помощьб inet1 соедениться с ftp серевером и яадать login и password. Если есть другие варианты для ftp? Ответы: Вопрос: Ответ: Автор ответа: Nechaev Sergey Как можно программно установить фоновый рисунок на папку в Проводнике. Если вручную, то это Вид=>Настроить вид папки...=>Выбрать фоновый рисунок. При этом в папке создается файл Desktop.ini в котором есть ссылка на файл фона. Если просто взять этот файл, положить его в другую папку и исправить путь к файлу изображения, ничего не происходит. Где я ошибся? Что и куда надо записать чтобы работало? Может это можно сделать через API? Вопрос: Как можно управлять Active Directory в Win2K программным пут?м, т.е.: соядать польяователя, удалить польяователя, сменить ему пароль, ияменить данные и настройки также, как в Active Directory. Ответ: Автор ответа: Евгений Как можно управлять Active Directory в Win2K программным пут?м, т.е.: соядать польяователя, удалить польяователя, сменить ему пароль, ияменить данные и настройки также, как в Active Directory. Вопрос: Помню был выпуск с примером кода для выключения/переяагруяки компа. Если у кого этот код остался, то вышлите ПЛЫЗ на мыло. Ответ: Автор ответа: Елизаров Пётр Как перезагрузить Windows Разместите в модуле: Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _ ByVal dwReserved As Long) As Long Public Const EWX_LOGOFF = 0 Public Const EWX_SHUTDOWN = 1 Public Const EWX_REBOOT = 2 Public Const EWX_FORCE = 4 А это в коде: Dim s As Long 'Так можно сделать Выключить s = ExitWindowsEx(EWX_SHUTDOWN, 0&) 'Так можно сделать Перезагрузить s = ExitWindowsEx(EWX_LOGOFF, 0&) 'А так Войти от др. пользователя s = ExitWindowsEx(EWX_REBOOT, 0&) Вопрос: Помню был выпуск с примером кода для выключения/переяагруяки компа. Если у кого этот код остался, то вышлите ПЛЫЗ на мыло. Ответ: Автор ответа: Анастасия Кулакова В модуле: Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _ ByVal dwReserved As Long) As Long Public Const EWX_SHUTDOWN = 1 Public Const EWX_REBOOT = 2 Public Const EWX_FORCE = 4 Код формы Dim s As Long s = ExitWindowsEx(EWX_SHUTDOWN, 0&) 'Перезагрузка s = ExitWindowsEx(EWX_REBOOT, 0& Вопрос: Помню был выпуск с примером кода для выключения/переяагруяки компа. Если у кого этот код остался, то вышлите ПЛЫЗ на мыло. Ответ: Автор ответа: Савельев Роман Примеры кода для выключения/перезагрузки компа. P.S. Всё опробировано на VB6 и Win98. На VB.Net ущё не перешёл, извиняйте :-) 1. Даёт всем открытым приложениям команду на завершение работы и перезагружает Windows. Option Explicit Private Declare Function ExitWindowsEx _ Lib "user32" ( _ ByVal uFlags As Long, _ ByVal dwReserved As Long _ ) As Long Private Sub cmdReboot_Click() ExitWindowsEx &H43, 0 End Sub 2. Вызывает системное окно "Завершение работы Windows" Option Explicit 'Для VB6 (Win98) нужно добавить ссылку на библиотеку. 'Project->References-> ' Microsoft Shell controls And Automation ' Location c:\windows\system\shdoc401.dll ' 'Для VB.Net - эксперименируйте сами ;-) Dim shl As New Shell32.Shell Private Sub cmdReboot_Click() shl.ShutdownWindows End Sub Вопрос: В Exele есть список примерно строк в 70. Объясните почему такой цикл: Dim Row, Count As Integer Row = 1 Count = 100 Do Until Cells(Row, 1).Value = "" Or Count < 1 Row = Row + 1 Count = Count - 1 Loop заканчивается, когда доходит до конца списка, а такой: Dim Row, Count As Integer Row = 1 Count = 100 Do While Cells(Row, 1).Value <> "" Or Count > 0 Row = Row + 1 Count = Count - 1 Loop , когда Count доходит до нуля? Ответ: Автор ответа: Andrey потому что в булевой алгебре (a OR b) = Not (Not(a) AND Not(b)) т.е. применительно к данной ситуации: Until ((Cells(Row, 1).Value = "") OR (Count < 1)) равнозначно While ((Cells(Row, 1).Value <> "") AND (Count > 0)) /ключевой смысл в слове AND/ т.е. в любом условии меняй OR на AND и они будут работать одинаково. Вопрос: В Exele есть список примерно строк в 70. Объясните почему такой цикл: Dim Row, Count As Integer Row = 1 Count = 100 Do Until Cells(Row, 1).Value = "" Or Count < 1 Row = Row + 1 Count = Count - 1 Loop заканчивается, когда доходит до конца списка, а такой: Dim Row, Count As Integer Row = 1 Count = 100 Do While Cells(Row, 1).Value <> "" Or Count > 0 Row = Row + 1 Count = Count - 1 Loop , когда Count доходит до нуля? Ответ: Автор ответа: Роксолан Вот что получается с твоими программами. Как известно, конструкция UNTIL /выражение/ - LOOP "крутится" до тех пор, пока /выражение/ ЛОЖНО. Таким образом, Do Until Cells(Row, 1).Value = "" Or Count < 1 ... LOOP завершит свою работу тогда, когда ОДНО из утверждений станет истинным. Поскольку, начальное значение COUNT больше, чем длина списка, то первым превратится в истину Cells(Row, 1).Value = "". С вытекающими последствиями. Во втором случае цикл крутится, пока утверждение ИСТИНО. И даже в том случае, когда Cells.Value="", приведенное в тексте выражение Cells(Row, 1).Value <> "" Or Count > 0 остается истинным до тех пор, пока Count>0. А он у тебя остается положительным еще тридцать строк после окончания таблицы... Вопрос: В Exele есть список примерно строк в 70. Объясните почему такой цикл: Dim Row, Count As Integer Row = 1 Count = 100 Do Until Cells(Row, 1).Value = "" Or Count < 1 Row = Row + 1 Count = Count - 1 Loop заканчивается, когда доходит до конца списка, а такой: Dim Row, Count As Integer Row = 1 Count = 100 Do While Cells(Row, 1).Value <> "" Or Count > 0 Row = Row + 1 Count = Count - 1 Loop , когда Count доходит до нуля? Ответ: Автор ответа: Maestro Ramires Ключевое слово While в цикле типа Do указывает проге, что данный цикл нужно выполнять до тех пор, пока следующее за ним условие истинно, аналогично - ключевое слово Until указывает, что цикл будет выполняться, пока условие ложно. Стало быть, в первом примере цикл будет выполняться пока в одной из ячеек не появиться какое-то значение или переменная Count не достигнет значения 0 (не дописано до конца). Во втором примере, цикл будет выполняться пока не появиться пустая строка или Count будет больше 0 (фактически тоже условие, что и в первом примере, только задано по-другому). Вопрос: В Exele есть список примерно строк в 70. Объясните почему такой цикл: Dim Row, Count As Integer Row = 1 Count = 100 Do Until Cells(Row, 1).Value = "" Or Count < 1 Row = Row + 1 Count = Count - 1 Loop заканчивается, когда доходит до конца списка, а такой: Dim Row, Count As Integer Row = 1 Count = 100 Do While Cells(Row, 1).Value <> "" Or Count > 0 Row = Row + 1 Count = Count - 1 Loop , когда Count доходит до нуля? Ответ: Автор ответа: Савельев Роман Ребята! Проверяйте логику! Do Until Cells(Row, 1).Value = "" Or Count < 1 Выполнять_пока_НЕ (ячейка пуста) или (Count < 1) Do While Cells(Row, 1).Value <> "" Or Count > 0 Выполнять_пока (ячейка НЕ пуста) или (Count > 0) Но ведь (A или B)=истина, если А=истина ИЛИ В=истина. Т.е. Do While Cells(Row, 1).Value <> "" Or Count > 0 будет выполняться даже при пустой ячейке, пока Count > 0. 100 раз Вопрос: В Exele есть список примерно строк в 70. Объясните почему такой цикл: Dim Row, Count As Integer Row = 1 Count = 100 Do Until Cells(Row, 1).Value = "" Or Count < 1 Row = Row + 1 Count = Count - 1 Loop заканчивается, когда доходит до конца списка, а такой: Dim Row, Count As Integer Row = 1 Count = 100 Do While Cells(Row, 1).Value <> "" Or Count > 0 Row = Row + 1 Count = Count - 1 Loop , когда Count доходит до нуля? Ответ: Автор ответа: P@Ssword Объясняю: противоположностью условия (Условие1) ИЛИ (Условие2) является условие (НЕ Условие1) И (НЕ Условие2) (вроде ничего не напутал). А теперь на нормальном языке: вместо While Cells(Row, 1).Value <> "" Or Count > 0 пиши While Cells(Row, 1).Value <> "" And Count > 0 Вопрос: Здравствуйте, посоветуйте, значение S лежит в ключе реестра: [HKEY_CURRENT_USER\Control Panel\Mouse] - "DoubleClickSpeed" , а как этот ключ запустить, найти? Private Declare Function GetDoubleClickTime Lib "user32" () As Long Private Sub Form_Load() S = GetDoubleClickTime MsgBox S End Sub Подскажите, что это за запись, где ее искать Ответ: Автор ответа: P@Ssword Совсем девушке мозги запудрили. Значение-то ЭС лежит в ключе реестра [censored], а возвращается оно функцией GetDoubleClickTime. Так что никакую запись искать не надо, просто пишем Крутая_Переменная = GetDoubleClickTime Вопрос: Есть два TextBox. В каждом яаписывается какое-либо время. Например: TextBox1.text = "01:30:25" TextBox2.text = "02:01:30" Как вычислить TextBox2.text - TextBox1.text Может кто сталкивался с таким, подкиньте код пожалуйста. Бывает ли переменная типа Time (не timer) и каким обраяом проияводятся вычисления со временем? Ответ: Автор ответа: Игорь Время и дата хранится в переменной числового типа. Целая часть числа отображает дату, дробная - время. получить текущее время можно оператором time Ну а дальше вычитай сколько хочешь. А если у тебя уже есть время в текстовом виде, то его преобразовать в число можно при помощи функции TimeValue Вот что про нее пишет подсказка : TimeValue Function Example This example uses the TimeValue function to convert a string to a time. You can also use date literals to directly assign a time to a Variant or Date variable, for example, MyTime = #4:35:17 PM#. Dim MyTime MyTime = TimeValue("4:35:17 PM") Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
|||||||||||||||
Выпуск подготовили: |
Сурменок Павел |