День добрый!
У меня есть программка, которая вызывает скрипт AutoIT и передает ему три параметра:
1. URL страницы,
2. Путь к рабочему каталогу, куда должны сохраняться страницы,
3. Имя файла под которым нужно сохранить страницу.
В результате скрипт сохранял нужную страницу в формате MHT в нужную папку с нужным именем.
Вот скрипт:
Все это работало, пока исполнялось в Windows XP и IE8...
Теперь после перехода на Windows 7 появились проблемы.
С тем, что поменялись номера инстансов элементов управления в окне сохранения я разобрался.
Привел скрипт к нужному виду, но он все равно не работает.
Проблема вот в чем:
в куске кода, помечнном комментом "; здесь переход в рабочую папку" -
я подставлял в TextBox "Имя файла" - путь к рабочей папке со слешем в конце, и при нажатии на кнопку сохранить (ранее в IE8) открывалась нужнаяя папка.
Теперь, я подставляю в TextBox "Имя файла" - тоже путь к рабочей папке со слешем в конце, и при нажатии на кнопку сохранить происходит не переход, а сохранение файла с именем, которое предлагалось по умолчанию в момент открытия диалогового окна (тот текст что в шапке - имя страницы)...
Откуда оно берется и как от него избавиться?
У меня есть программка, которая вызывает скрипт AutoIT и передает ему три параметра:
1. URL страницы,
2. Путь к рабочему каталогу, куда должны сохраняться страницы,
3. Имя файла под которым нужно сохранить страницу.
В результате скрипт сохранял нужную страницу в формате MHT в нужную папку с нужным именем.
Вот скрипт:
Код:
#Include <GUIComboBox.au3>
#include <IE.au3>
#Include <WinAPI.au3>
#Include <WinAPIEx.au3>
$sURL = $CmdLine[1]
$sWorkPaht = $CmdLine[2]
$sFileName = $CmdLine[3]
Opt("WinTitleMatchMode", 2)
$oIE = _IECreate ($sURL) ;, 0, 1, 1, 0) ; $sURL - первый параметр 'URL'
$win_handle = WinGetHandle("Windows Internet Explorer", $sURL)
_WinAPI_SetKeyboardLayout($win_handle, 0x0419)
;ControlSend ($win_handle, '', '', "{ALTDOWN}{ALTUP}фх", 0)
Send("{ALTDOWN}{ALTUP}")
Send("ф")
Send("х")
$sSaveAsWindow = "Сохранение веб-страницы"
WinWait($sSaveAsWindow,"")
If Not WinActive($sSaveAsWindow,"") Then WinActivate($sSaveAsWindow,"")
WinWaitActive($sSaveAsWindow,"")
ControlSetText ($sSaveAsWindow, "", "Edit1", $sWorkPaht) ; $sWorkPaht - второй параметр 'рабочая папка'
ControlClick ($sSaveAsWindow, "", "Button2")
_GUICtrlComboBox_SetCurSel(ControlGetHandle($sSaveAsWindow, '', 'ComboBox3'), 1)
;If FileExists($sWorkPaht & $sFileName) Then FileDelete($sWorkPaht & $sFileName)
ControlSetText ($sSaveAsWindow, "", "Edit1", $sFileName) ; "test" - третий параметр 'имя файла'
ControlClick ($sSaveAsWindow, "", "Button2")
$Timer = TimerInit()
While TimerDiff($Timer) < 50000000
$hFile = _WinAPI_CreateFile($sWorkPaht & $sFileName, 2, 2, 0)
If $hFile Then
_WinAPI_CloseHandle($hFile)
ExitLoop
EndIf
Sleep(1000)
WEnd
If Not $hFile Then
; Ошибка
ConsoleWrite('File not found or time out.' & @CR)
Else
ConsoleWrite('OK' & @CR)
EndIf
;Sleep(15000)
WinClose($win_handle)
Все это работало, пока исполнялось в Windows XP и IE8...
Теперь после перехода на Windows 7 появились проблемы.
С тем, что поменялись номера инстансов элементов управления в окне сохранения я разобрался.
Привел скрипт к нужному виду, но он все равно не работает.
Код:
#Include <GUIComboBox.au3>
#include <IE.au3>
#Include <WinAPI.au3>
#Include <WinAPIEx.au3>
$sURL = $CmdLine[1]
$sWorkPaht = $CmdLine[2]
$sFileName = $CmdLine[3]
Opt("WinTitleMatchMode", 2)
$oIE = _IECreate ($sURL) ;, 0, 1, 1, 0) ; $sURL - первый параметр 'URL'
$win_handle = WinGetHandle("Windows Internet Explorer", $sURL)
_WinAPI_SetKeyboardLayout($win_handle, 0x0419)
;ControlSend ($win_handle, '', '', "{ALTDOWN}{ALTUP}фх", 0)
Send("{ALTDOWN}{ALTUP}")
Send("ф")
Send("с")
$sSaveAsWindow = "Сохранение веб-страницы"
WinWait($sSaveAsWindow,"")
If Not WinActive($sSaveAsWindow,"") Then WinActivate($sSaveAsWindow,"")
WinWaitActive($sSaveAsWindow,"")
; здесь переход в рабочую папку
ControlSetText ($sSaveAsWindow, "", "Edit1", $sWorkPaht, 1) ; $sWorkPaht - второй параметр 'рабочая папка'
ControlClick ($sSaveAsWindow, "", "Button1")
; выбор формата сохранения - MHT
_GUICtrlComboBox_SetCurSel(ControlGetHandle($sSaveAsWindow, '', 'ComboBox2'), 1)
;If FileExists($sWorkPaht & $sFileName) Then FileDelete($sWorkPaht & $sFileName)
ControlSetText ($sSaveAsWindow, "", "Edit1", $sFileName) ; "test" - третий параметр 'имя файла'
ControlClick ($sSaveAsWindow, "", "Button1")
$Timer = TimerInit()
While TimerDiff($Timer) < 50000000
$hFile = _WinAPI_CreateFile($sWorkPaht & $sFileName, 2, 2, 0)
If $hFile Then
_WinAPI_CloseHandle($hFile)
ExitLoop
EndIf
Sleep(1000)
WEnd
If Not $hFile Then
; Ошибка
ConsoleWrite('File not found or time out.' & @CR)
Else
ConsoleWrite('OK' & @CR)
EndIf
;Sleep(15000)
WinClose($win_handle)
Проблема вот в чем:
в куске кода, помечнном комментом "; здесь переход в рабочую папку" -
я подставлял в TextBox "Имя файла" - путь к рабочей папке со слешем в конце, и при нажатии на кнопку сохранить (ранее в IE8) открывалась нужнаяя папка.
Теперь, я подставляю в TextBox "Имя файла" - тоже путь к рабочей папке со слешем в конце, и при нажатии на кнопку сохранить происходит не переход, а сохранение файла с именем, которое предлагалось по умолчанию в момент открытия диалогового окна (тот текст что в шапке - имя страницы)...
Откуда оно берется и как от него избавиться?