Что нового

[Автоматизация] Создание блокнота с определенным текстом хоткеем

Oplot

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

Описание:
Вобщем очень нужно реализовать такую штуку. Есть программа, которая использует информацию из блокнота для обработки. Сам писал, если что объясню подробнее. Программа для определенных бухгалтерских операций, ничего серьезного. Принцип такой. Есть текстовый документ (info.txt), в него вносится сумма и текст (к примеру 1200ИВАНОВЯНВАРЬ), запускается исполняемый файл start.exe, после чего программа вносит все необходимые изменения во множество баз данных. Проблема в том, что информация берется из приложения, которое наша "прогрессивная" фирма создала то ли на паскале, то ли еще на чем то. Короче приходится запоминать, сворачивать, вбивать или переписывать все на бумажку, а потом перепечатывать. Копировать там нельзя, да и сам текст там на транслите.
Короче народ, очень прошу помощи, как сделать так, чтобы можно было создавать ТХТ не сворачивая программу, но текст редактировать можно было? Ща попробую пояснить на примере. Предположим мне необходимо создать текстовый документ, с именем info.txt (оно меняться не будет, константа) и содержанием 5000ПЕТРОВМАРТ. Сам я нахожусь в приложении. Я нажимаю сочетание клавиш (например шифт+В), после чего печатаю "5000ПЕТРОВМАРТ" и нажимаю еще раз шифт+В. Создается блокнотик, с указанным мной текстом. после чего запускается исполняемый файл start.exe. Тут кстати момент, важно чтобы текст был в верхнем регистре.

Примечания:
Выше я описал идеальный вариант, но понимаю, что скорее всего это либо сложнореализуемо, либо вообще невозможно. Поэтому я бы хотел уточнить кое что еще.

1) На самом деле, вариантов созданных блокнотов, примерно 50-100. Комбинаторика =). Так что кто понимает, помогите пожалуйста хотя бы реализовать создание определенного блокнота по хоткею. Например "ф1+ф2" - 300СИДОРОВЯНВАРЬ, "ф1+ф3" - 300СИДОРОВФЕВРАЛЬ. Я заморочусь, пропишу все 100 вариантов, но мне будет гораздо легче потом.

2) Я не писал это в раздел проф. деятельности, поскольку традиционно рассчитываю на халяву :smile: или на то, что кто то хотя бы расскажет мне как это делать или что почитать. Но если вдруг кто то действительно готов сделать заказ за деньги (не важно средствами какой программы), я обязательно оформлю тему в соответствующем разделе. Либо сразу пишите на почту [email protected]
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Я нажимаю сочетание клавиш (например шифт+В), после чего печатаю "5000ПЕТРОВМАРТ" и нажимаю еще раз шифт+В.
важно чтобы текст был в верхнем регистре.
Это будет примерно так:
Код:
Send("{SHIFTDOWN}В{SHIFTUP}")
Send(StringUpper("5000ПЕТРОВМАРТ"), 1)
Send("{SHIFTDOWN}В{SHIFTUP}")


А про блокнотик и про файл не понял...
Создать файл через AutoIt можно примерно так:
Код:
FileWrite("info.txt", "")

Запустить файл можно так:
Код:
Run("start.exe")
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Так подойдет?
Код:
_WinAPI_LoadKeyboardLayoutEx(); Нужно только что бы правильно работали горячие клавиши

;Нажми CTRL + B
HotKeySet("^b", 'show_dialog')

While 1
	Sleep(240)
WEnd

Func show_dialog()
	Local Const $file_name = 'info.txt', $program = 'start.exe'
	Local Const $title = 'Введите текст', _
			$prompt = 'Введенный текст будет записан в файл ' & $file_name, _
			$default = ''
	Local Const $width = 500, $height = 200, $left = 100, $top = 0


	Local $text = InputBox($title, $prompt, $default, Default, $width, $height, $left, $top)
	If @error Then
		Return False
	EndIf

	Local $upper = StringUpper($text)

	;Создаем файл
	create_file($file_name, $upper)

	;Запускаем программу. Указывай полный путь
	program_run($program)
EndFunc   ;==>show_dialog

Func create_file($file_name, $file_data = '')
	Local Const $FO_OVERWRITE = 2
	Local $h = FileOpen($file_name, $FO_OVERWRITE)
	If $file_data Then
		FileWrite($h, $file_data)
	EndIf
	FileClose($h)
EndFunc   ;==>create_file

Func program_run($program)
	Return Run($program)
EndFunc   ;==>program_run

Func _WinAPI_LoadKeyboardLayoutEx($sLayoutID = 0x0409, $hWnd = 0)
	Local Const $WM_INPUTLANGCHANGEREQUEST = 0x50
	Local $aRet = DllCall('user32.dll', 'uint_ptr', 'LoadKeyboardLayoutW', 'wstr', Hex($sLayoutID, 8), 'uint', BitOR(0x00000001, 0x00000100));0x00000101 $iFlag = BitOR($KLF_ACTIVATE, $KLF_SETFORPROCESS)
	If Not @error And $aRet[0] Then
		If $hWnd = 0 Then
			$hWnd = WinGetHandle(AutoItWinGetTitle())
		EndIf
		DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $aRet[0])
		Return 1
	EndIf
	Return SetError(1)
EndFunc   ;==>_WinAPI_LoadKeyboardLayoutEx
 
Автор
O

Oplot

Новичок
Сообщения
14
Репутация
0
Внешне похоже. Проверить не получается, так как в первой строчке выдает ошибку, о том, что это неизвестное имя функция. Я правильно понимаю, что это какая то библиотека? Если да, то как ее подключить?
________________

Ага, просто удалил это, вроде работает. Правда еще вылезла ошибка, но думаю что если поковыряюсь, то смогу сделать все как нужно. Если все заработает, с меня бутыль)

________________

Блин, теперь не могу вникнуть, куда вводить "полный путь". Предположим, что это "C:\GHPbd\start.exe"

Код:
;Запускаем программу. Указывай полный путь
    program_run($program)
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Oplot просто вы не все скопировали
 
Автор
O

Oplot

Новичок
Сообщения
14
Репутация
0
Вы правы. Только что проверил, не скопировалось немного в конце =). Теперь все работает без ошибок, куда вводить полный путь - понял. Ошибки возникали как раз из за "недокопирования". Огромное вам спасибо, вы сэкономили мне массу времени на работе.

Вы не будете так добры, ответить на пару вопросов?) Вот чисто косметически, можно ли как то это окно изменять в размерах, уточнять его положение, сделать прозрачным к примеру? Речь о том окне, которое выскакивает при нажатии клавиш.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Oplot [?]
Вот чисто косметически, можно ли как то это окно изменять в размерах, уточнять его положение, сделать прозрачным к примеру
Можно менять размеры и положение, а вот прозрачность нет.
 
Верх