Что нового

[Мышь, клавиатура] Автоматическое нажатие клавиши "1" двести раз с интервалом 1 сек

d_stor

Новичок
Сообщения
11
Репутация
1
Версия AutoIt:3.3.8.1

Описание:геологические программы

Примечания:
Код:
HotKeySet("{NUM1}","_Exit") 
While 1 
Sleep (1000)
ControlSend ( "имя_окна", "", "", "что_слать") 
WEnd 
Func _Exit() 
Exit 
EndFunc

этот скрипт, конечно печатает в блокноте "1", но не имитирует нажатие "1" в нужной мне программе

здравствуйте!
- имеются две геологические программы
- в первой данные отображаются в виде текста
- во второй - текст первой отображается в виде графиков
- в первой назначена горячая клавиша "1"
- свернул окно первой программы
- открыл вторую и окно первой уже не разворачиваю
- нажал на клавиатуре "1"
- получил картинку
клавишу "1" приходится нажимать по несколько сотен раз вручную
это конечно примитивное описание для обозначения задачи
т.к. не могу найти человека, который мне писал эти программы, просьба - напишите пожалуйста скрипт нажатия клавиши "1" сто раз с интервалом 1 сек, так чтобы я понял, где изменять кол-во раз нажатия и интервал времени
спасибо
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
For $i=1 To 200 	; 200 раз
	Sleep (1000)	; пауда между нажатиями 1 сек
	ControlSend ( "имя_окна", "", "", "{1}") ; посылать нажатие кнопки 1 в окно "имя_окна"
Next
 
Автор
D

d_stor

Новичок
Сообщения
11
Репутация
1
к сожалению не работает
работает только если предварительно щелкнуть мышью в поле, где можно напечатать текст - там единичку печатает, а назначенную горячую клавишу "1" - никак
т.е. нужно просто дублирование нажатия клавиши "1"
даже если свернул все окна и нажимаю "1" вручную - все работает
спасибо
 

S1R1US

скрипт мне запили!
Сообщения
50
Репутация
6
На примере блокнота, запускаешь скрипт, жмешь "1", шлёт 10 повторений текста "1" с интервалом в секунду, в элемент edit окна блокнота(используй этот вариант если есть элемент ввода даннных). Если требуется просто клавишу 1 на доп. клавиатуре, замени ControlSend("Безымянный - Блокнот", "", "[CLASS:Edit; INSTANCE:1]", "1") на Send("{NUMPAD1}"), не забывай, что окно должно быть в активным во время нажатия клавиши 1, иначе скрипт будет слать нажатие не туда.
Код:
HotKeySet("{NUMPAD1}", "_100func");функция высылки команды "1" 10 раз подряд
HotKeySet("{ESC}", "_Terminate"); функция завершения скрипта

While 1
    Sleep(100);цикл
WEnd

Func _100func()
	For $i = 1 to 10 Step 1;задаем с 1-го по 10-й количество повторений(выставишь сколько нужно)
		ControlSend("Безымянный - Блокнот", "", "[CLASS:Edit; INSTANCE:1]", "1");команда высылки текста в элемент
		Sleep(1000);задержка на повторение 1 сек.
Next
EndFunc

Func _Terminate();функция завершения скрипта на клавишу ESC
Exit
EndFunc
 
Автор
D

d_stor

Новичок
Сообщения
11
Репутация
1
но у меня окно свернуто, когда я нажимаю "1" вручную и результат нажатия отображается в другой программе в виде графика
как это правильно называется - не знаю, но если говорить простым языком, то меня устроит скрипт нажатия клавиши "1" так, как если бы я нажимал вручную
спасибо
пускай скрипт везде шлет "1", мне просто чтобы по 400-800 раз не нажимать
 

S1R1US

скрипт мне запили!
Сообщения
50
Репутация
6
но у меня окно свернуто, когда я нажимаю "1" вручную и результат нажатия отображается в другой программе в виде графика
как это правильно называется - не знаю, но если говорить простым языком, то меня устроит скрипт нажатия клавиши "1" так, как если бы я нажимал вручную
спасибо

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

d_stor

Новичок
Сообщения
11
Репутация
1
- запускаю первую программу(окно - "Геофизика 2010"), в ней есть поле ввода текста, но если предварительно туда мышкой не нажать, то печататься ничего не будет и при нажатии "1" будет получено действие ожидаемое от нажатия горячей клавиши
- назначаю горячую клавишу "1"
- сворачиваю окно(!)
- запускаю вторую программу (окно - "Макет")
- жму "1" сколько мне нужно раз и после каждого вижу результат("Макет" читает данные из текстового файла сохраняемого программой "Геофизика 2010" каждый раз после нажатия "1")
ну незнаю что еще рассказать или правильней рассказать
получается, что мне нужно просто "тупо" нажатие "1"
и спасибо огромное Вам за помощь
 

beliy

Продвинутый
Сообщения
372
Репутация
72
тогда еще проще, поправь функцию в скрипте написаного S1R1US :
Код:
Func _100func()
    For $i = 1 to 200 Step 1;выполнить действие 200 раз
        Send("{NUMPAD1}");нажимаем клавишу 1
        Sleep(1000);ждем 1 сек.
    Next
    MsgBox(64, "Результат", "Клавиша 1 нажата 200 раз с периодичностью 1 сек"); сообщение о том что цикл выполнен
    Exit; по завершению цикла завершить работу скрипта
EndFunc
 
Автор
D

d_stor

Новичок
Сообщения
11
Репутация
1
всмысле поправить? я ничерта не смыслю в программировании - подскажите пожалуйста? :smile:
спасибо
 

S1R1US

скрипт мне запили!
Сообщения
50
Репутация
6
Вот скрипт просто выполни или скомпиллируй. Клавиша 1 запускает цикл, ESC выйти, завершить скрипт. Удачи!
Код:
HotKeySet("{NUMPAD1}", "_100func");функция высылки команды "1" 10 раз подряд
HotKeySet("{ESC}", "_Terminate"); функция завершения скрипта

While 1
    Sleep(100);цикл
WEnd

Func _100func()
    For $i = 1 to 10 Step 1;задаем с 1-го по 10-й количество повторений(выставишь сколько нужно, изменив текущее значение с 10 на 100 или 400 и т.д.)
        Send("{NUMPAD1}");команда высылки "1" (здесь надо было править, чтобы получить нажатие 1)
        Sleep(1000);задержка на повторение 1 сек.
Next
EndFunc

Func _Terminate();функция завершения скрипта на клавишу ESC
Exit
EndFunc
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
1. Запустить программу "Геофизика 2010"
2. Запустить программу Au3Info.exe
3. Перетянуть "Finder Tool" в окно "Геофизика 2010" именно на поле где вводится "1"
4. Полученную информацию из AutoIt v3 Window Info подставить в ControlSend
Код:
For $i=1 To 200     ; выполнить 200 раз
    Sleep (1000)    ; пауза между нажатиями 1 сек
    ControlSend ( "Геофизика 2010", "", "[CLASS:Edit; INSTANCE:1]", "{1}") ; посылать нажатие кнопки 1
Next
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
S1R1US [?]
Вот скрипт просто выполни или скомпиллируй.
Вы бы проверяли то, что выкладываете в качестве решения.
Никому не советую это делать.
 
Автор
D

d_stor

Новичок
Сообщения
11
Репутация
1
Re: [Мышь, клавиатура] Автоматическое нажатие клавиши \\\"1\\\" двести раз с интервалом 1 сек

Никому не советую это делать
чем черевато? что делать? я его уже запускал
скрипт работает, но быстрей чем раз в секунду и после его закрытия несколько минут глюки - исправьте пожалуйста!
спасибо


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

Код:
For $i=1 To 200     ; выполнить 200 раз
    Sleep (1000)    ; пауза между нажатиями 1 сек
    ControlSend ( "Геофизика 2010", "", "[CLASS:Edit; INSTANCE:1]", "{1}") ; посылать нажатие кнопки 1
Next

Au3Info показала, что class - TForm1 - подставил вместо Edit
не работает


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

Код:
HotKeySet("{NUMPAD1}", "_100func");функция высылки команды "1" 10 раз подряд
HotKeySet("{ESC}", "_Terminate"); функция завершения скрипта

While 1
    Sleep(100);цикл
WEnd

Func _100func()
    For $i = 1 to 10 Step 1;задаем с 1-го по 10-й количество повторений(выставишь сколько нужно, изменив текущее значение с 10 на 100 или 400 и т.д.)
        Send("{NUMPAD1}");команда высылки "1" (здесь надо было править, чтобы получить нажатие 1)
        Sleep(1000);задержка на повторение 1 сек.
Next
EndFunc

Func _Terminate();функция завершения скрипта на клавишу ESC
Exit
EndFunc

этот скрипт делат то, что мне надо - пожалуйста, сделайте чтобы он не вызывал глюки и повторения были не чаще раза в секунду
 

S1R1US

скрипт мне запили!
Сообщения
50
Репутация
6
Re: [Мышь, клавиатура] Автоматическое нажатие клавиши \"1\" двести раз с интервалом 1 сек

S1R1US [?]
Цитата

Вот скрипт просто выполни или скомпиллируй.

Вы бы проверяли то, что выкладываете в качестве решения.
Никому не советую это делать.
я проверял в блокноте и даже на боте для онлайн игры этот цикл(2-3 часа), всё работало нормально, цикл крутится пока не нажмете горячую клавишу завершения, однако я так и не понял почему он выдает ошибку при использовании команды Send("{Numpad1}"), куда то не туда шлёт он...спасибо madmasles впредь буду внимательнее

этот скрипт делат то, что мне надо - пожалуйста, сделайте чтобы он не вызывал глюки и повторения были не чаще раза в секунду
Нужен принтскрин программы Autoit Window Info наведите сперва прицел из нее в то поле где у вас появляется цифра 1, затем перейдите на вкладку в Autoit Window Info, Summary, чтобы видна была строчка Advanced (Class): [.....................]
Нужны эти данные.
По всей видимости придётся переделать скрипт под высылку текста в элемент, т.к. высылка клавиши происходит некорректно, откуда и возникли глюки.


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

Вот исправил, кажется понял, почему были глюки, этот скрипт железно шлёт только 1 кнопку 1 раз в секунду 200 раз за 1 цикл. Чтобы активировать цикл высылки клавиши "1" нужно нажать клавишу "2" на дополнительной клавиатуре(справа), также необходимо, чтобы Numlock был включён. Было проверено на 2-х компьютерах, в программах блокнот, word, wordpad. Пробуй этот скрипт.
Код:
HotKeySet("{NUMPAD2}", "_200func");функция высылки команды "1" 200 раз подряд
HotKeySet("{ESC}", "_Terminate"); функция завершения скрипта

While 1
    Sleep(100);цикл
WEnd

Func _200func()
    For $i = 1 to 200 Step 1;задаем с 1-го по 10-й количество повторений(выставишь сколько нужно, изменив текущее значение с 10 на 100 или 400 и т.д.)
	Send("{NUMPAD1}");команда высылки "1" (здесь надо было править, чтобы получить нажатие 1)
    Sleep(1000);задержка на повторение 1 сек.
Next
EndFunc

Func _Terminate();функция завершения скрипта на клавишу ESC
Exit
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
S1R1US [?]
однако я так и не понял почему он выдает ошибку при использовании команды Send("{Numpad1}"), куда то не туда шлёт он
У Вас, при нажатии на горячую клавишу, вызывается нажатие на нее же, т.е., как только Вы эту клавишу нажали, скрипт замыкается сам на себя в бесконечный цикл нажал - перехватил. Можно отключить горячую клавишу в начале функции, а в конце опять включить.
Код:
;...
Func _100func()
	HotKeySet('Ваша клавиша')
	For $i = 1 To 10
		Send('Ваша клавиша')
		Sleep(1000)
	Next
	HotKeySet('Ваша клавиша', '_100func')
EndFunc   ;==>_100func
 

S1R1US

скрипт мне запили!
Сообщения
50
Репутация
6
Код:
;...
Func _100func()
    HotKeySet('Ваша клавиша')
    For $i = 1 To 10
        Send('Ваша клавиша')
        Sleep(1000)
    Next
    HotKeySet('Ваша клавиша', '_100func')
EndFunc   ;==>_100func
Ну и кружева...я уже разобрался и понял что он запускает по сто раз этот цикл в геометрической прогрессии...переделал чтобы он нажимал например "2", а слал "1", тогда всё исправно работает.
Если не трудно madmasles объясните, где ещё можно это использовать?
 
Автор
D

d_stor

Новичок
Сообщения
11
Репутация
1
Re: [Мышь, клавиатура] Автоматическое нажатие клавиши \"1\" двести раз с интервалом 1 сек

от жеж попал :smile: скрипт работает, но несколько раз в секунду, а мне надо чтобы только раз в секунду - ребята, дайте пожалуйста готовый скрипт
заранее спасибо!



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

я вообще! абсолютно! не понимаю в программировании - дайте пожалуйста скрипт нажатия клавиши "1"!!!!!!!!!!!!!!!!!!!!!
скрипт, который дал
работает!!!!!!!!!!!!!!!
но к сожалению не один раз в секуцнду, а несколько
дайте пожалуйста точно готовый вариант!!!!!!!!!!!!!
 
Автор
D

d_stor

Новичок
Сообщения
11
Репутация
1
Код:
HotKeySet("{NUMPAD2}", "_200func");функция высылки команды "1" 200 раз подряд
HotKeySet("{ESC}", "_Terminate"); функция завершения скрипта

While 1
    Sleep(100);цикл
WEnd

Func _200func()
    For $i = 1 to 200 Step 1;задаем с 1-го по 10-й количество повторений(выставишь сколько нужно, изменив текущее значение с 10 на 100 или 400 и т.д.)
    Send("{NUMPAD1}");команда высылки "1" (здесь надо было править, чтобы получить нажатие 1)
    Sleep(1000);задержка на повторение 1 сек.
Next
EndFunc

Func _Terminate();функция завершения скрипта на клавишу ESC
Exit
EndFunc

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