Что нового

Как закрыть блокнота и открыть Wordpad (пример из русской справки)

asddadsdsasda

Новичок
Сообщения
2
Репутация
0
Код:
Run("notepad.exe") 
WinWaitActive("Безымянный - Блокнот") ; Win_XP 
Send("Это некоторый текст.") 
WinClose("Безымянный - Блокнот") ; Win_XP 
WinWaitActive("Блокнот", "Сох&ранить") 
Send("!n")

Только !n не прокатит, если вы не заметили. У меня Windows на русском языке и чтобы выбрать 'Не сохранять' надо alt+н нажать.
Только это опять не прокатит потому что у меня раскладка по умолчанию стоит английская и alt+н не канает. Есть другое практическое решение?

Их этого примера я хотел сделал с wordpad, но тут какие-то глюки. Запускаю скрипт и ничего не происходит. Если открыть его вручную, то текст наберется сам. Почему он открыться сам не может? Ps если запустить скрипт несколько раз то в wordpad каждый символ будет несколько раз продублирован.

Такие вот траблы меня огорчают.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
А я бы тебя за ник забанил :whistle:
 

madmasles

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


С уважением, ваш Глобальный модератор.






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

asddadsdsasda,
Код:
Global $iPID, $aWnd, $hWnd, $iTmp

_WinAPI_LoadKeyboardLayoutEx()
$iPID = Run('notepad.exe')
If Not $iPID Then Exit 13
$iTmp = TimerInit()
While TimerDiff($iTmp) < 3000
	$aWnd = WinList('[Class:Notepad]')
	For $i = 1 To $aWnd[0][0]
		If WinGetProcess($aWnd[$i][1]) <> $iPID Then ContinueLoop
		If Not BitAND(WinGetState($aWnd[$i][1]), 2) Then ContinueLoop
		$hWnd = $aWnd[$i][1]
		$aWnd = 0
		$iTmp = 0
		ExitLoop 2
	Next
	Sleep(3)
WEnd
If Not $hWnd Then Exit 13
SendKeepActive($hWnd)
Send('Это некоторый текст.')
SendKeepActive('')
WinClose($hWnd)
$hWnd = 0
$iTmp = TimerInit()
While TimerDiff($iTmp) < 3000
	$aWnd = WinList('[Class:#32770]')
	For $i = 1 To $aWnd[0][0]
		If WinGetProcess($aWnd[$i][1]) <> $iPID Then ContinueLoop
		If Not BitAND(WinGetState($aWnd[$i][1]), 2) Then ContinueLoop
		$hWnd = $aWnd[$i][1]
		$aWnd = 0
		$iTmp = 0
		ExitLoop 2
	Next
	Sleep(3)
WEnd
If Not $hWnd Then Exit 13
SendKeepActive($hWnd)
Send('!y')
SendKeepActive('')

Func _WinAPI_LoadKeyboardLayoutEx($sLayoutID = 0x0409, $hWnd = 0)
;~ CreatoR http://autoit-script.ru/index.php/topic,5745.0.html
	Local Const $WM_INPUTLANGCHANGEREQUEST = 0x50
	Local $aRet = DllCall("user32.dll", "long", "LoadKeyboardLayoutW", "wstr", Hex($sLayoutID, 8), "int", 0)

	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
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
asddadsdsasda
Вы переименуйте темку с "WordPad" на "Блокнот", а то не вникнув в суть я что то начал писать для
Код:
ShellExecute("WordPad.exe")
:smile:
 
Автор
A

asddadsdsasda

Новичок
Сообщения
2
Репутация
0
MnM
тема про то, что комбинация клавиш для закрытия Блокнота не сохраняясь (это пример в справке) alt+n/alt+н не работает на русской Windows с английской раскладкой. Можно по другому? Ну администратор что-то написал, наверно это решение.

А WordPad у меня не запускается командами:

Код:
Run("wordpad.exe")
WinWaitActive("Документ - WordPad")
Send("Этот текст")

Читайте первое сообщение. Наверно, wordpad по другому должен открываться. Пойду читать справку.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Да, wordpad должен по другому открываться:
Код:
Run(@ProgramFilesDir&"\Windows NT\Accessories\wordpad.exe", @HomePath)



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

Может быть лучше не "!n" а "tab space"?
Вот пример:
Код:
Local $hwnd, $hwnd_text
Run("notepad.exe")
$hwnd = "Безымянный - Блокнот" ; Win_XP
WinWaitActive($hwnd)
Send("Это некоторый текст.")
WinClose($hwnd)
$hwnd = "Блокнот"
$hwnd_text = "Сохранить изменения"
WinWait($hwnd, $hwnd_text, 5)
If WinExists($hwnd, $hwnd_text) Then
Send("{tab}")
Sleep(100)
Send("{space}")
EndIf
;===========================================
Run(@ProgramFilesDir&"\Windows NT\Accessories\wordpad.exe", @HomePath)
$hwnd = "Документ - WordPad"
WinWaitActive($hwnd)
Send("Этот текст")
WinClose($hwnd)
$hwnd = "WordPad"
$hwnd_text = "Сохранить изменения"
WinWait($hwnd, $hwnd_text, 5)
If WinExists($hwnd, $hwnd_text) Then
Send("{tab}")
Sleep(100)
Send("{space}")
EndIf
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
asddadsdsasda
для закрытия Блокнота не сохраняясь
Можно так попробовать:
Код:
$PID = Run("notepad.exe")
$hWnd = WinWait("[CLASS:Notepad]", "", 5) 
If Not $hWnd Then
    MsgBox(48, "Сообщение", "Окно не найдено. Выход")
    Exit
EndIf
ControlSend($hWnd, "", "Edit1", "Закрываем Блокнот без сохранений")
Sleep(1000)
ProcessClose($PID)
 
Верх