RipVanWinkel
Новичок
- Сообщения
- 81
- Репутация
- 0
доброго времени суток.
Вопрос - к специалистам.
Имеется код autoit, простыми комбинациями клавиш (эмуляцией) - собирающий содержимое текстовых файлов - в общий файл Итог.txt по Cписку.txt.
А вот созданный по образу и подобию такой же скрипт, но уже для файлов doc - уже не работает.
Выдает ошибку: "Ошибка запуска".
Рабочий скрипт (для txt) такой:
А нерабочий скрипт (для doc) выглядит так:
Как сделать скрипт для doc файлов - тоже работоспособным ?
Вопрос - к специалистам.
Имеется код autoit, простыми комбинациями клавиш (эмуляцией) - собирающий содержимое текстовых файлов - в общий файл Итог.txt по Cписку.txt.
А вот созданный по образу и подобию такой же скрипт, но уже для файлов doc - уже не работает.
Выдает ошибку: "Ошибка запуска".
Рабочий скрипт (для txt) такой:
Код:
#include <WinAPIProc.au3>
#include <WinAPISys.au3>
#include <WinAPIvkeysConstants.au3>
_LoadKeyboardLayoutEngSelf()
HotKeySet("{ESC}", "_Exit")
Global $sPathList = "Список.txt", $sOutTxt = "Итог.txt", $aList, $aWnds, $iOutPID, $hOutWnd, $iPID, $hWnd
$aList = FileReadToArray($sPathList)
If @error Then Exit MsgBox(16, "", "Ошибка списка.")
If Not FileExists($sOutTxt) Then Exit MsgBox(16, "", "Итог не существует.")
$iOutPID = ShellExecute($sOutTxt)
Sleep(600)
If Not $iOutPID Then
MsgBox(48, "", "Нажмите ОК когда появится нужное окно.")
$hOutWnd = WinGetHandle("[ACTIVE]")
Else
Do
Sleep(250)
If Not ProcessExists($iOutPID) Then Exit MsgBox(16, "", "Ошибка запуска.")
$aWnds = _WinAPI_EnumProcessWindows($iOutPID)
Until Not @error
$hOutWnd = $aWnds[1][0]
EndIf
For $i = 0 To UBound($aList) - 1
If Not FileExists($aList[$i]) Then ContinueLoop
$iPID = ShellExecute($aList[$i])
Sleep(600)
If Not $iOutPID Then
MsgBox(48, "", "Нажмите ОК когда появится нужное окно.")
$hWnd = WinGetHandle("[ACTIVE]")
Else
Do
Sleep(250)
If Not ProcessExists($iPID) Then Exit MsgBox(16, "", "Ошибка запуска.")
$aWnds = _WinAPI_EnumProcessWindows($iPID)
Until Not @error
$hWnd = $aWnds[1][0]
EndIf
WinActivate($hWnd)
Sleep(250)
Send("^a")
Sleep(250)
Send("^c")
Sleep(250)
WinActivate($hOutWnd)
Sleep(250)
Send("^{END}")
Sleep(250)
Send("^v")
Sleep(250)
WinClose($hWnd)
WinWaitClose($hWnd)
Next
Sleep(250)
Send("^s")
Sleep(250)
WinClose($hOutWnd)
Func _Exit()
Exit
EndFunc ;==>_Exit
Func _LoadKeyboardLayoutEngSelf()
Local Const $__KLF_ACTIVATE = 0x00000001, $__KLF_SETFORPROCESS = 0x00000100
Local $a_Res = DllCall('user32.dll', 'long', 'LoadKeyboardLayoutW', 'wstr', '00000409', 'uint', BitOR($__KLF_ACTIVATE, $__KLF_SETFORPROCESS))
If (@error) Or (Not $a_Res[0]) Then Return 0
Return 1
EndFunc ;==>_LoadKeyboardLayoutEngSelf
А нерабочий скрипт (для doc) выглядит так:
Код:
#include <WinAPIProc.au3>
#include <WinAPISys.au3>
#include <WinAPIvkeysConstants.au3>
_LoadKeyboardLayoutEngSelf()
HotKeySet("{ESC}", "_Exit")
Global $sPathList = "Список.txt", $sOutTxt = "Итог.doc", $aList, $aWnds, $iOutPID, $hOutWnd, $iPID, $hWnd
$aList = FileReadToArray($sPathList)
If @error Then Exit MsgBox(16, "", "Ошибка списка.")
If Not FileExists($sOutTxt) Then Exit MsgBox(16, "", "Итог не существует.")
$iOutPID = ShellExecute($sOutTxt)
Sleep(600)
If Not $iOutPID Then
MsgBox(48, "", "Нажмите ОК когда появится нужное окно.")
$hOutWnd = WinGetHandle("[ACTIVE]")
Else
Do
Sleep(250)
If Not ProcessExists($iOutPID) Then Exit MsgBox(16, "", "Ошибка запуска.")
$aWnds = _WinAPI_EnumProcessWindows($iOutPID)
Until Not @error
$hOutWnd = $aWnds[1][0]
EndIf
Sleep(200)
For $i = 0 To UBound($aList) - 1
If Not FileExists($aList[$i]) Then ContinueLoop
$iPID = ShellExecute($aList[$i])
Sleep(600)
If Not $iOutPID Then
MsgBox(48, "", "Нажмите ОК когда появится нужное окно.")
$hWnd = WinGetHandle("[ACTIVE]")
Else
Do
Sleep(250)
If Not ProcessExists($iPID) Then Exit MsgBox(16, "", "Ошибка запуска.")
$aWnds = _WinAPI_EnumProcessWindows($iPID)
Until Not @error
$hWnd = $aWnds[1][0]
EndIf
WinActivate($hWnd)
Sleep(250)
Send("^a")
Sleep(250)
Send("^c")
Sleep(250)
WinActivate($hOutWnd)
Sleep(250)
Send("^{END}")
Sleep(250)
Send("^v")
Sleep(250)
WinClose($hWnd)
WinWaitClose($hWnd)
Next
Sleep(250)
Send("^s")
Sleep(250)
WinClose($hOutWnd)
Func _Exit()
Exit
EndFunc ;==>_Exit
Func _LoadKeyboardLayoutEngSelf()
Local Const $__KLF_ACTIVATE = 0x00000001, $__KLF_SETFORPROCESS = 0x00000100
Local $a_Res = DllCall('user32.dll', 'long', 'LoadKeyboardLayoutW', 'wstr', '00000409', 'uint', BitOR($__KLF_ACTIVATE, $__KLF_SETFORPROCESS))
If (@error) Or (Not $a_Res[0]) Then Return 0
Return 1
EndFunc ;==>_LoadKeyboardLayoutEngSelf