Что нового

Caps lock on/off (пиши всегда заглавными)

vconstantine

Новичок
Сообщения
5
Репутация
0
Версия AutoIt: 3.3.14.2

Описание:
Добрый день. Для корректного использованния программы CDK Drive пользователь обязан вводить все данные заглавными буквами. Постоянно включать/выключать CAPS Lock или нажимать Shirt работу не облегчает. (так же при нажатом Shift дополнительная клавитура с цифрами не работает) Нуждаюсь в помощи написания скприпта. Суть такая:
когда окно с CDK активно, Caps lock включается ( если же он уже включен, то ничего не происходит), когда же окно с CDK становится неактивно Caps lock выключается ( если же он был включен до этого, то ничего не происходит). Существует ли возможность использовать AutoIt для решения этой задачи или же есть другие альтернативы ?
Спасибо



Примечания:
 

Вложения

  • CDK.jpg
    CDK.jpg
    38.6 КБ · Просмотры: 12

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
Opt("SendCapslockMode", 0)
Opt("WinTitleMatchMode", -2)
Opt("TrayAutoPause", 0)
HotKeySet("{ESC}", "_Exit")

While Sleep(10)
	If WinWaitActive("CDK Drive") Then
		Send("{CAPSLOCK ON}")
		If WinWaitNotActive("CDK Drive") Then Send("{CAPSLOCK OFF}")
	EndIf
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
V

vconstantine

Новичок
Сообщения
5
Репутация
0
спасибо большое. все работает


Добавлено:
Сообщение автоматически объединено:

только один нюанс:в случает, когда Caps lock изначально включен. При деактивизации окна CDK этот код его выключает.

что не всегда удобно если пользователь умышленно его включил до перехода в окно CDK . пользователь иногда может использовать заглавные в более чем одной программе. ( набирать заголовки в ворде например или еще где)
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include <WinAPIvkeysConstants.au3>
#include <WinAPISys.au3>
Opt("SendCapslockMode", 0)
Opt("WinTitleMatchMode", -2)
Opt("TrayAutoPause", 0)
HotKeySet("{ESC}", "_Exit")
Global $sTitle = "CDK Drive", $iState

While Sleep(10)
	If WinWaitActive($sTitle) Then
		$iState = _WinAPI_GetKeyState($VK_CAPITAL)
		If Not $iState Then Send("{CAPSLOCK ON}")
		If WinWaitNotActive($sTitle) And Not $iState Then Send("{CAPSLOCK OFF}")
	EndIf
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
V

vconstantine

Новичок
Сообщения
5
Репутация
0
спасибо большое. сегодня мой удачный день.
существует ли определенное время действия этого скрипта? или он будет работать так долго, как долго будет запущен?

заметил интересную особенность:
если бысто переключать программы через alt+tab, то все работает, но вот если при нажатом ALT один раз нажать на TAB( что бы просмотреть список открытых окон) то этот список тут же ищезает. нужно нажать на TAB дважды что-бы список остался на экране и активное окно переключилось на следующее

спасибо еще раз за код
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
vconstantine, он будет работать пока вы сами не закроете скрипт. Список окон это тоже окно и оно дезактивирует окно CDK в итоге эмулируется нажатие Caps Lock (для отключения), а при нажатии любой клавиши кроме Tab список окон исчезает



Добавлено:
Сообщение автоматически объединено:

Попробуйте так не должно сбрасывать спиосок окон
Код:
#include <WinAPIvkeysConstants.au3>
#include <WinAPISys.au3>
Opt("SendCapslockMode", 0)
Opt("WinTitleMatchMode", -2)
Opt("TrayAutoPause", 0)
HotKeySet("{ESC}", "_Exit")
Global $sTitle = "CDK Drive", $iState

While Sleep(10)
    If WinWaitActive($sTitle) Then
        $iState = _WinAPI_GetKeyState($VK_CAPITAL)
        If Not $iState Then Send("{CAPSLOCK ON}")
        If WinWaitNotActive($sTitle) And Not $iState And WinWaitNotActive("[TITLE:;CLASS:#32771]") Then Send("{CAPSLOCK OFF}")
    EndIf
WEnd

Func _Exit()
    Exit
EndFunc   ;==>_Exit
 
Автор
V

vconstantine

Новичок
Сообщения
5
Репутация
0
доброе время суток. спасибо большое за этот скрипт. я его использую каждый день и он стал просто не заменим.

обсолютно недавно возникла нужда в добавлении еще одной функции в его содержимое. используемая программа не изменилась ( CDK).
пользователь выполняет такую последовательность операций.
в левом верхнем углу печатает номер начинающийся с Q. ( в скриншотах будет пример Number: Q16753) напротив будет пустое окно (Invoices:smile:
после определенных манипуляций этот quote номер превращается в инвойс номер (Number: 1675775).
проблема заключается в том, что пользователь может незаметить что этот quote уже превратили в invoice и превратить его еще раз.
желательный результат.
если в поле " Number:" номер начинается с Q, и в поле напротив "Invoices:" уже есть какой-то номер, то всплывает окно ошибки с сообщение вида ( дубликат инвойса).
если же в после "Number:" номер начинается с Q, и в поле напротив "Invoices:" пусто, то никаких сообщений.

спасибо большое



Tempo сказал(а):
vconstantine, он будет работать пока вы сами не закроете скрипт. Список окон это тоже окно и оно дезактивирует окно CDK в итоге эмулируется нажатие Caps Lock (для отключения), а при нажатии любой клавиши кроме Tab список окон исчезает



Добавлено:
Сообщение автоматически объединено:

Попробуйте так не должно сбрасывать спиосок окон
Код:
#include <WinAPIvkeysConstants.au3>
#include <WinAPISys.au3>
Opt("SendCapslockMode", 0)
Opt("WinTitleMatchMode", -2)
Opt("TrayAutoPause", 0)
HotKeySet("{ESC}", "_Exit")
Global $sTitle = "CDK Drive", $iState

While Sleep(10)
    If WinWaitActive($sTitle) Then
        $iState = _WinAPI_GetKeyState($VK_CAPITAL)
        If Not $iState Then Send("{CAPSLOCK ON}")
        If WinWaitNotActive($sTitle) And Not $iState And WinWaitNotActive("[TITLE:;CLASS:#32771]") Then Send("{CAPSLOCK OFF}")
    EndIf
WEnd

Func _Exit()
    Exit
EndFunc   ;==>_Exit

 

Вложения

  • cdk_autoit.jpg
    cdk_autoit.jpg
    67.2 КБ · Просмотры: 7
  • cdk_autoit_2.jpg
    cdk_autoit_2.jpg
    58.2 КБ · Просмотры: 6
  • cdk_autoit_3.jpg
    cdk_autoit_3.jpg
    71.7 КБ · Просмотры: 6
Верх