tarunbaraiya Ответов: 6

Capslock on with SendKeys("{CAPSLOCK}") не работает


всем привет

я хочу сделать код для programaticaly Caps Lock On...

я создаю код s в vb.net 2005 год вроде бы...

этот


Мой.Компьютер.Клавиатура.SendKeys("{CAPSLOCK}")

Но это не работает....
Пеласе, Помоги Мне......... :(( :((

Member 7821471

Мне так жаль, что у меня нет с собой моего кода, вот это поможет.

Вы должны использовать функцию GetKeyState и импортировать:
Общественные объявить функцию GetAsyncKeyState Либ "user32.dll" (как byval vKey как int32) как UShort.


Библиотека MSDN
http://msdn.microsoft.com/en-us/library/ms646293%28v=VS.85%29.aspx
Примеры
http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/f5cc5444-8e06-43a2-8503-3f8dabb84b98

6 Ответов

Рейтинг:
2

Abhinav S

Какую операционную систему вы используете?

Я нашел эту заметку на msdn -

"Класс SendKeys был обновлен для .NET Framework 3.0, чтобы включить его использование в приложениях, работающих под управлением Windows Vista. Повышенная безопасность Windows Vista (известная как Контроль учетных записей пользователей или UAC) не позволяет предыдущей реализации работать должным образом.

Класс SendKeys подвержен проблемам синхронизации, которые некоторым разработчикам пришлось обойти. Обновленная реализация по-прежнему подвержена проблемам с синхронизацией, но немного быстрее и может потребовать внесения изменений в обходные пути. Класс SendKeys сначала пытается использовать предыдущую реализацию, а если это не удается, то использует новую реализацию. В результате класс SendKeys может вести себя по-разному в разных операционных системах. Кроме того, когда класс SendKeys использует новую реализацию, метод SendWait не будет ждать обработки сообщений при их отправке в другой процесс."

А это -

"в форме под названием Form1, содержащей кнопку под названием Button1. Свойство tab index кнопки должно быть установлено в 0. Когда образец запущен, дважды щелкните форму, чтобы вызвать событие щелчка кнопки с помощью SendKeys.Send."

Может быть, эти две заметки послужат вам указателями.


Рейтинг:
2

LucaDN

Imports System.Runtime.InteropServices

<DllImport("user32.dll", CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Unicode, EntryPoint:="keybd_event", ExactSpelling:=True, SetLastError:=True)> _
    Private Shared Function keybd_event(ByVal bVk As Int32, ByVal bScan As Int32, _
               ByVal dwFlags As Int32, ByVal dwExtraInfo As Int32) As Boolean
    End Function

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Unicode)> _
    Private Shared Function GetKeyState(ByVal nVirtKey As Integer) As Short
    End Function

    Private Sub SetCapsLockKey(ByVal newState As Boolean)
        ' if the current state must be changed
        If CBool(GetKeyState(Keys.CapsLock)) <> newState Then
            ' programmatically press and release the CapsLock key
            keybd_event(Keys.CapsLock, 0, 0, 0)
            keybd_event(Keys.CapsLock, 0, &H2, 0)
        End If
    End Sub


Рейтинг:
2

Christian Graus

VB6 содержал много уродливых вещей, которые были удалены в VB.NET-да. Каждая часть документации, которую я могу найти об использовании этого для управления caps lock, предназначена для VB6 или VBScript. Похоже, он не поддерживается в VB.NET-да.


Рейтинг:
2

4277480

Этот метод описан в MSDN Я обычно программы на VB.Чистая, но не сказать, если это работает


Рейтинг:
2

AspDotNetDev

Dim ProcID As Integer
ProcID = Shell("Notepad.exe", AppWinStyle.NormalFocus)
AppActivate(ProcID)
My.Computer.Keyboard.SendKeys("{CAPSLOCK}hello")

Когда я запустил его, "привет" было напечатано в блокноте в верхнем регистре. Возможно, CAPSLOCK включен только во время этого SendKeys, а затем отключается в конце вызова функции?


LucaDN

Решение, которое я опубликовал, написано для VB.net и это работает.
Самое странное, что вы всегда должны посылать строчную версию символа!

Отправить ключи.Отправить(mytext.Нижестоящим)

Если CapsLock активен, то сфокусированный элемент управления получит заглавную версию символа, даже если была отправлена строчная версия. Странный... но работает.

Рейтинг:
1

Christian Graus

Интересно, что это задокументировано как работа с VB.NET но это не так. Я попробовал это сделать, операция правильная, она не работает.