Что нового

Симуляция нажатия клавиши

assch

Новичок
Сообщения
166
Репутация
4
Нужно чтобы окно MsgBox закрылось через секунду
Я знаю что это можно сделать при помощи самой функции ( MsgBox(32,'','',1) )
Просто меня интересует симуляция нажатия клавиши ENTER
Никогда с этим не сталкивался код собрал на скорую руку но он не работает
Не подскажете как правильно записать код

Код:
MsgBox(32,'','')
Sleep(1000)
Send("{ENTER}")
 

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Код не работает потому, что когда появляется системное окно сообщений, выполнение скрипта приостонавливается. Т.е. скрипт ожидает каких-либо действий пользователя. Как этого избежать уже обсуждалось где-то на форуме.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
assch
А так:
Код:
$sTitle = 'Test'
$iSleep = 5

$ahCall = _CallBack_Init('_My_Click', $iSleep * 1000)

MsgBox(64, $sTitle, 'MsgBox закроется сам через ' & $iSleep & ' секунд.')


Func _My_Click()
	ControlClick($sTitle, '', '[CLASS:Button; INSTANCE:1]')
	_CallBack_Free($ahCall)
EndFunc   ;==>_My_Click

Func _CallBack_Init($sFuncName, $iTime, $sParam = '')
	Local $hCallBack = DllCallbackRegister($sFuncName, 'int', $sParam)
	Local $aTimer = DllCall('user32.dll', 'uint', 'SetTimer', _
			'hwnd', 0, 'uint', 0, 'int', $iTime, 'ptr', DllCallbackGetPtr($hCallBack))
	Local $ahCallBack[2] = [$hCallBack, $aTimer[0]]
	Return $ahCallBack
EndFunc   ;==>_CallBack_Init

Func _CallBack_Free($ahCallBack)
	If $ahCallBack[0] <> -1 Then DllCallbackFree($ahCallBack[0])
	If $ahCallBack[1] <> -1 Then DllCall('user32.dll', 'int', 'KillTimer', 'hwnd', 0, 'uint', $ahCallBack[1])
EndFunc   ;==>_CallBack_Free
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
OffTopic:
никому тема не кажется чересчур общей? это все равно что прийти в автосалон и спросить нет ли у них чего-нибудь на колесах и что бы ездило
 
Автор
A

assch

Новичок
Сообщения
166
Репутация
4
Честно говоря не думал что будет так не просто.
Я ради интереса собираю программу которая делает снимок файловой системы .Алгоритм такой:
1 - Загоняю в текстовый файл список файлов (на локальном диске где стоит система)
2 - Копирую по списку эти файлы (вместе с системными файлами реестра)
Потом из другой винды (ради эксперемента)которая у меня стоит на соседнем диске
уничтожаю (форматирую)ту винду которой делал снимок
3 - Загоняю по списку скопированные файлы обратно на тот диск
Перезагружаюсь на тот раздел диска и впринципи всё хорошо
Просто когда начинаешь пользоватся корзиной система выдаёт небольшое предупреждение
что корзина испорчена и предлагает это исправить То есть достаточно нажать "Да" и всё в порядке
Поэтому я и хотел сделать небольшой скриптик чтобы при первом вхождении в систему
после (как бы переустановки винды)
1 - создался какой нибудь файл
2 - переместился в корзину
и когда система выдаст предупреждение этот скриптик сам как бы нажал "Да" (ENTER)
В некотором смысле это шаманство но пока в голову не чего лучшего не приходит
Хотя конечно интересно почему корзина подпорчена ведь папка "RECYCLER" c её содержимом
благополучно копируются обратно. Не понимаю.Может кто знает почему.
 

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Kaster

OffTopic:

Думаю для новичка вполне допустимо. Знаю по себе, когда только начинал знакомиться с AutoIt, то я ни то что бы его не знал, но я также не знал что спрашивать, как спрашивать и для чего мне это спрашивать. Знал что я чего-то не понимаю, но очень хочу понять. И естественно я не понимал чего я не понимаю :laugh:. Осваивал методом проб и ошибок, и осмыслением приходящим со временем (и до сих пор в процессе кстати ;D). Так что считаю для новичка вполне допустимо. Если же мы будем новичков сразу ограничивать жесткими рамками, то процесс освоения AutoIt для них сильно затруднится.
 
Автор
A

assch

Новичок
Сообщения
166
Репутация
4
Форумчанам спасибо за поддержку

Старая истина Век живи век учись
 
Верх