|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
для того чтобы включить NumLock использую следующий код, но мне надо сделать чтобы не просто циклично включалась - выключалась NumLock , а включалась только при выключенном состоянии. Код: vbnet 1. 2. 3. 4.
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2015, 10:43 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
наверно можно сделать проще :) Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2015, 10:49 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
но опять же нужна проверка на уже включенный "{NUMLOCK}" чтобы его не выключал ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2015, 10:50 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
intersk, раз и навсегда... ищи по контексту параметр InitialKeyboardIndicators и делай 2 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2015, 11:38 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
vmag, спасибо, но всё равно хотелось бы понять как работать с NumLock через VBA. Почему код который указан в первом сообщении просто циклично включает-выключает NumLock, а не только включает. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2015, 15:47 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
intersk, можно так (модуль формы, общих модулей не нужно....): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Единственное, сначала у меня было состояние, что наоборот 0 - включен, 1 - выключен, но я подозреваю, что это были последствия проверки вашего примера... ибо после перезагрузки компа стало по человечески (0- выключено, 1 - включено)... :-)) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 10:45 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
Ах да... нужно ж при открытии формы... Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 11:16 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
vmag_Единственное, сначала у меня было состояние, что наоборот 0 - включен, 1 - выключен, но я подозреваю, что это были последствия проверки вашего примера... ибо после перезагрузки компа стало по человечески (0- выключено, 1 - включено)... :-)) да и у меня тоже это было, поэтому сам, со своим минимумом знаний понять не мог почему так ) ваш пример - то что нужно! а вы могли бы ещё помочь с переключением языка? у меня сейчас такой код, но иногда он не срабатывает Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 14:23 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
vmag_, исправил сообщение Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 14:24 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
intersk, В этом примере при старте формы будет всегда русская раскладка, если нужно наоборот, то заремить/оремить... Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
И хочу дать вам один совет - используйте процедуры и функции (Sub и Function) так как их использую я мне тоже некогда читать умную литературу (главную дорогу и помеху справа знаешь - можно ехать): - в процедуру можно при вызове передавать параметры, но обратно получить их нельзя, можно только внутри процедуры изменять глобальные переменные, а после её завершения прочитать эти переменные. - процедуру я вызываю Сall Имя, если она с параметрами, то Сall Имя (p1,p2,...) - функция обязательно возвращает один параметр , и в неё можно передать параметры как в процедуре, плюс в ней тоже можно менять глобальные переменные. ВСЁ... Никакие другие частные случаи (как бы и что бы мне не рассказывали) - меня просто не интересуют и мне на них просто насрать... LoadKeyboardLayout Lib это функция ? Возвращает Long ? (смотри последнее слово) ну так я и беру это значение в переменную: klava = LoadKeyboardLayout("00000419", &H1) Хотя что там будет после этого в klava 1, 0, 100... мне абсолютно по барабану... Да, я не особо умный, но мне хватает... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 17:19 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
vmag- в процедуру можно при вызове передавать параметры, но обратно получить их нельзя, можно только внутри процедуры изменять глобальные переменные, а после её завершения прочитать эти переменные.Шта? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 17:38 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
vmag...в процедуру можно при вызове передавать параметры, но обратно получить их нельзя...И для тебя тоже 17385432 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 17:59 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
\\\\, Ещё раз: Никакие другие частные случаи (как бы и что бы мне не рассказывали) - меня просто не интересуют... Мне уже учиться и переучиваться поздно... Всем остальным - на здоровье... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 18:07 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
vmag- в процедуру можно при вызове передавать параметры, но обратно получить их нельзя, можно только внутри процедуры изменять глобальные переменные, а после её завершения прочитать эти переменные. - процедуру я вызываю Сall Имя, если она с параметрами, то Сall Имя (p1,p2,...) - функция обязательно возвращает один параметр, и в неё можно передать параметры как в процедуре, плюс в ней тоже можно менять глобальные переменные. ВСЁ... Обожаю подобные откровения... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 18:09 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
interskа вы могли бы ещё помочь с переключением языка?Код не нужен. У контролов текстбокс и комбобокс есть свойство "язык клавиатуры" ( KeyboardLanguage ). Выстави там нужный тебе язык ввода. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 18:48 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
vmagЕщё раз: Никакие другие частные случаи (как бы и что бы мне не рассказывали) - меня просто не интересуют... Мне уже учиться и переучиваться поздно... Всем остальным - на здоровье...Учитывая, что ByVal и ByRef вроде бы равноправны, но при этом "ByRef is the default in Visual Basic", спорно, что есть (более) частный случай. Жжёте напалмом. P.S. Первую программу написал и отладил на "Электронике 100-25" (клон PDP-11/40) в 1987 году. Учиться и переучиваться никогда не поздно - организм должен реагировать на изменения окружающей среды. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 19:41 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
43210Учитывая, что ByVal и ByRef вроде бы равноправны, но при этом "ByRef is the default in Visual Basic", спорно, что есть (более) частный случай. Эх... вот признаюсь честно... даже не понимаю о чем выше речь... но как-то чувствую, что это мне не нужно... - идет хлопчик по рынку со списочком чё купить, картошечки купил, помидорчиков... вычеркивает... - милок, а ты ещё лучку купи... - а у меня в списке нету лука... - так давай я тебе сынок допишу то лучок в списочек, и купишь... Вот я и есть тот хлопчик со списочком и мине ничо дописывать не нужно... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 20:25 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
vmag43210Учитывая, что ByVal и ByRef вроде бы равноправны, но при этом "ByRef is the default in Visual Basic", спорно, что есть (более) частный случай. Эх... вот признаюсь честно... даже не понимаю о чем выше речь... но как-то чувствую, что это мне не нужно... Существуют два способа, которыми VBA передает информацию в функцию-процедуру: по ссылке и по значению. По умолчанию VBA передает все аргументы по ссылке. При передаче данных функции посредством аргумента по ссылке VBA, на самом деле, передает только адрес памяти, который ссылается на исходные данные, определенные в списке аргументов функции во время вызова функции. Это означает, что если функция изменяет значения в любом из аргументов, исходные данные, переданные функции посредством этого аргумента, также изменяются. При передаче аргумента по значению VBA создает копию исходных данных и передает эту копию функции. Если функция изменяет значение в аргументе, передаваемом по значению, изменяется только копия данных; исходные данные не изменяются. Передача по ссылке позволяет с помощью функции изменять исходные данные, передаваемые функции посредством аргумента; передача же по значению не позволяет изменять значение исходных данных. Поскольку передача по ссылке позволяет функции изменять значение исходных данных ее аргументов, аргументы, передаваемые по ссылке, могут получить нежелательные побочные значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 20:55 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
vmag, всё что вы предлагаете просто и работает! это самое нужное сочетание. И знания ваши достойные. Вы практик, а не теоретик ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 21:48 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
\\\\interskа вы могли бы ещё помочь с переключением языка?Код не нужен. У контролов текстбокс и комбобокс есть свойство "язык клавиатуры" ( KeyboardLanguage ). Выстави там нужный тебе язык ввода. а то я не знаю )))) у меня на формах от 10 до 30 контролов - сам выделяй их все и потом в ручную указывай свойство языка, а если учесть что свою базу постоянно дорабатываю и добавляю или удаляю поля то ... спасибо vmag ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2015, 21:51 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
vmag, этот код работает нестабильно ( Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
вот что нашел в интернете на другом форуме (может как-то можно использовать эту информацию). Речь идет о каком- то состоянии стабильном или нестабильном...поэтому иногда numlock то включается, то не включается ================================================= И все-таки это возможно. Коротко и с готовым примером (файл прилагается). Перед Код Код: vbnet 1.
надо выполнить Код Код: vbnet 1.
и NumLock меняться не будет. В листе: Код Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
В модуле книги: Код Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Теперь рассуждения что, и как работает. Посмотрев по предложенным ссылкам и многим другим источникам, убедился- все это шляпа. И она не работает. Я не то что не гуру, использую VBA около месяца. Потому, все что ниже (и выше, не счет "шляпы" ;) может не соответствовать истине. Кроме того, что бы придти к этому способу я сознательно подменил стандартные понятия своими, заведомо не верными, но работающими в данном контексте. И так. Первое понятие: команда {NUMLOCK} не посылает сигнал "нажать NumLock", а закрепляет NumLock, если он "изменчивый". "Изменчивый" - это когда он меняет свое состояние, когда не должен, например при команде %{DOWN} которая по идее должна только сымитировать Alt+Down. Экспериментальным путем выяснил, что NumLock имеет "стабильное" состояние и "изменчивое". Не путать с "включен" и "выключен", в любом из них он может быть как "изменчивым" так и "стабильным". Второе понятие: строчки GetKeyboardState keystat(0) state = keystat(vbKeyNumlock) определяют не текущее состояние NumLock, а его текущую стабильность. Если state = 0, то NumLock стабилен, иначе изменчив. Теперь все просто. Если NumLock стабилен, ничего не делаем, просто посылаем команду %{DOWN}. Если NumLock изменчивый, посылаем команду стабилизации (закрепления) {NUMLOCK}, и после уже спокойно пишем %{DOWN}, зная, что NumLock не изменится. Конечно понятия "стабильный" и "изменчивый" надуманы но тут они отлично подходят. Несколько фактов из наблюдений. В стабильном состоянии следущие команды не меняют NumLock %{DOWN} {NUMLOCK} {NUMLOCK} (т.е. два раз подряд послать нажатие NumLock) В изменчивом состоянии те же команды его меняют регулярно (при каждой команде NumLock 1 раз меняется) оставляя его изменчивым. При этом команда {NUMLOCK} (т.е. один раз послать нажатие NumLock) работает так (допустим сейчас стабильное состояние, и он включен (лампочка горит)): 1. {NUMLOCK} - NumLock изменился (погас), состояние стало изменчивым 2. {NUMLOCK} - NumLock не изменился (не горит), состояние стало стабильным 3. {NUMLOCK} - NumLock изменился (загорелся), состояние стало изменчивым 4. {NUMLOCK} - NumLock не изменился (горит), состояние стало стабильным ...... и далее по кругу Еще немного мелочей. Во многих гайдах пишут подключить библиотеку для работы GetKeyboardState keystat(0), а именно: Declare PtrSafe Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long PtrSafe - там отсутствует, что вызывает ошибку, т.к. сейчас почти у всех Windows 64 bit, а не 32. Для совместимости и надо добавить. Так же в этом объявлении для совместимости с 64-битной версией, рекомендуют использовать тип LongLong вместо Long. Возможно это где-то оправдано. У меня работали оба варианта, но у одного из тех, кому я делал вылезла ошибка, что у него нет такого типа данных (LongLong). По этому пишу просо Long. Что у меня, что у него Windows 7 64bit, Excel 2010. Вот еще из MSDN, из пояснений к функции GetKeyState (так и не понял, зачем использовать GetKeyboardState, если мы хотим узнать только одну кнопку), какие она возвращает состояния (она возвращает Integer): 0 if the key is neither down nor toggled, -127 if the key is down but not toggled, 1 if the key is toggled but up, and -128 if the key is both toggled and down. где toggled - это якобы когда лампочка горит. GetKeyboardState возвращает 129 вместо -127, 128 вместо -128 Соответственно, можно плясать от этих значений сразу, не пользуя UDF? А вот то, что SendKeys "{NumLock}" не переключает сразу состояние, а бегает по этому кругу ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2015, 09:51 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
interskА вот то, что SendKeys "{NumLock}" не переключает сразу состояние, а бегает по этому кругу Не подходит, просто, SendKeys для этой задачи. Тоже самое относится к CapsLock и ScrollLock - https://support.microsoft.com/ru-ru/kb/179987 MS предлагает использовать API в таких случаях - https://support.microsoft.com/ru-ru/kb/177674/en-us To toggle the NUM LOCK, CAPS LOCK, or SCROLL LOCK keys, you can use the following logic: 1.Use the GetKeyboardState function to determine the state of the key. 2.Determine which operating system is being used with the GetVersionEx API. (Windows 95/98/Me and Windows NT/2000 require different methods for toggling these keys.) 3.Under Windows 95, Windows 98, or Windows Me, use the SetKeyboardState API function to set the state of the key. Under Windows NT or Windows 2000, use the keybd_event function to simulate a key press. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2015, 11:19 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
intersk, А вот то, что SendKeys "{NumLock}" не переключает сразу состояние, а бегает по этому кругу Не пойму, что куда бегает по кругу, приведите пожалуйста пример в какой конфигурации это не работает: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Я уже даже себе эту фичу вставил в коммерческое приложение... - во первых нужно выбросить весь ваш старый код (до последнего символа) ибо он действительно у компа делает мозги на бикрень и после него уже вообще ничего стабильно не работает... - то что вы этот код переделали под себя и теперь он не работает стабильно - это уже ваши проблемы... - я то предполагал, что этот код есть единожды в событии открытия главной формы и больше нигде и никогда, ибо он тупо определяет нужна приложению спец клавиатура с права или нет... Прошу вас взять мой пример и потестировать его в неизменном виде на ещё не убитом вами компе, если именно в этом примере на новом компе проявится нестабильность - опишите эту ситуацию, лично опробовал на всех компах что в поле зрения (от ХР 32 до W8 64 под офис 2003 или его рантайм) - ни одного признака нестабильности: - если не включен, включится - если включен, не выключается У кого ещё и в каких случаях была нестабильность ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2015, 11:57 |
|
Включение NumLock при открытии формы
|
|||
---|---|---|---|
#18+
vmag_, продолжу тестирование (может и правда с компом что-то). У вас код на открытие формы, а я из него сделал функцию (разве это меняет работу кода?) и вешаю эту функцию на запуск Access и на Activate форм (на включение сделал, так как numlock гуляет - может выключиться из включенного состояния и чтобы при переходе к этой форме numlock включался) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2015, 21:34 |
|
|
start [/forum/topic.php?fid=45&fpage=10&tid=1609811]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 278ms |
total: | 424ms |
0 / 0 |