В общем хочу автоматизировать загрузку на сайт: пост запросом не получаеться, уже все перепробовал, с помощью ИЕ- по проще намного, но тут встала проблема - нужно аплоадить картинки, а их фиг укажешь...
нашел 2 процедурки в теории проблема в том что когда я вызываю с помощью макроса или когда обьект ИЕ связан с макросом - макрос ждет закрытия окна выбора файла и не работает когда оно открыто...
Upload_Set_Filename и Upload_Click_Open - но они не работают, может кто сталкивался?
[vba]
Код
Public Sub Upload_Set_Filename(sFilePathName As String) ' 'Populate the 'File name:' edit window in the Choose File to Upload dialogue with the specified folder and/or filename. ' ' ' 'The Choose File to Upload has the following child window hierarchy: ' ' ' #32770 Choose File to Upload Static Look &in: 'ComboBox N / A 'Static N/A 'ToolbarWindow32 N / A 'ToolbarWindow32 N / A 'ListBox N / A 'SHELLDLL_DefView N/A 1376604 SysListView32 FolderView 'Static File &name: 'ComboBoxEx32 N/A 8520100 ComboBox N/A 1245594 Edit N/A 'Static Files of &type: 'ComboBox N / A 'Button Open as &read-only 'Button &Open 'Button Cancel 'Button &Help 'ScrollBar N / A
Dim hWnd As Long Dim timeout As Date 'MsgBox "" 'Debug.Print "Save_As_Set_Filename " & folder 'Find the Window, waiting a maximum of 10 seconds for it to appear timeout = Now + TimeValue("00:00:10") Do hWnd = FindWindow("#32770", "Выбор выкладываемого файла") 'Choose File to Upload DoEvents Sleep 200 Loop Until hWnd Or Now > timeout If hWnd Then SetForegroundWindow (hWnd) 'Find the child ComboBoxEx32 window hWnd = FindWindowEx(hWnd, 0, "ComboBoxEx32", vbNullString) 'Debug.Print " ComboBoxEx32 "; Hex(hWnd) End If If hWnd Then 'Find the child ComboBox window hWnd = FindWindowEx(hWnd, 0, "ComboBox", "") 'Debug.Print " ComboBox "; Hex(hWnd) End If If hWnd Then SetForegroundWindow (hWnd) 'Find the child Edit window hWnd = FindWindowEx(hWnd, 0, "Edit", "") 'Debug.Print " Edit "; Hex(hWnd) End If If hWnd Then
'Populate the Edit window with the full file name ' Sleep 200 SendMessageByString hWnd, WM_SETTEXT, Len(sFilePathName), sFilePathName End If
End Sub
Public Sub Upload_Click_Open(Optional cmb As String)
Dim hWnd As Long Dim timeout As Date
'Debug.Print "File_Download_Click_Save"
'Find the File Download window, waiting a maximum of 30 seconds for it to appear
timeout = Now + TimeValue("00:00:10") Do hWnd = FindWindow("#32770", "Выбор выкладываемого файла") DoEvents Sleep 200 Loop Until hWnd Or Now > timeout
'Debug.Print " File Download window "; Hex(hWnd)
If hWnd Then 'Find the child Open button
hWnd = FindWindowEx(hWnd, 0, "Button", "&Открыть") 'Debug.Print " Save button "; Hex(hWnd) End If
If hWnd Then
'Click the Open button
SetForegroundWindow (hWnd) Sleep 600 'this sleep is required and 600 miiliseconds seems to be the minimum that works SendMessage hWnd, BM_CLICK, 0, 0 End If End Sub
В общем хочу автоматизировать загрузку на сайт: пост запросом не получаеться, уже все перепробовал, с помощью ИЕ- по проще намного, но тут встала проблема - нужно аплоадить картинки, а их фиг укажешь...
нашел 2 процедурки в теории проблема в том что когда я вызываю с помощью макроса или когда обьект ИЕ связан с макросом - макрос ждет закрытия окна выбора файла и не работает когда оно открыто...
Upload_Set_Filename и Upload_Click_Open - но они не работают, может кто сталкивался?
[vba]
Код
Public Sub Upload_Set_Filename(sFilePathName As String) ' 'Populate the 'File name:' edit window in the Choose File to Upload dialogue with the specified folder and/or filename. ' ' ' 'The Choose File to Upload has the following child window hierarchy: ' ' ' #32770 Choose File to Upload Static Look &in: 'ComboBox N / A 'Static N/A 'ToolbarWindow32 N / A 'ToolbarWindow32 N / A 'ListBox N / A 'SHELLDLL_DefView N/A 1376604 SysListView32 FolderView 'Static File &name: 'ComboBoxEx32 N/A 8520100 ComboBox N/A 1245594 Edit N/A 'Static Files of &type: 'ComboBox N / A 'Button Open as &read-only 'Button &Open 'Button Cancel 'Button &Help 'ScrollBar N / A
Dim hWnd As Long Dim timeout As Date 'MsgBox "" 'Debug.Print "Save_As_Set_Filename " & folder 'Find the Window, waiting a maximum of 10 seconds for it to appear timeout = Now + TimeValue("00:00:10") Do hWnd = FindWindow("#32770", "Выбор выкладываемого файла") 'Choose File to Upload DoEvents Sleep 200 Loop Until hWnd Or Now > timeout If hWnd Then SetForegroundWindow (hWnd) 'Find the child ComboBoxEx32 window hWnd = FindWindowEx(hWnd, 0, "ComboBoxEx32", vbNullString) 'Debug.Print " ComboBoxEx32 "; Hex(hWnd) End If If hWnd Then 'Find the child ComboBox window hWnd = FindWindowEx(hWnd, 0, "ComboBox", "") 'Debug.Print " ComboBox "; Hex(hWnd) End If If hWnd Then SetForegroundWindow (hWnd) 'Find the child Edit window hWnd = FindWindowEx(hWnd, 0, "Edit", "") 'Debug.Print " Edit "; Hex(hWnd) End If If hWnd Then
'Populate the Edit window with the full file name ' Sleep 200 SendMessageByString hWnd, WM_SETTEXT, Len(sFilePathName), sFilePathName End If
End Sub
Public Sub Upload_Click_Open(Optional cmb As String)
Dim hWnd As Long Dim timeout As Date
'Debug.Print "File_Download_Click_Save"
'Find the File Download window, waiting a maximum of 30 seconds for it to appear
timeout = Now + TimeValue("00:00:10") Do hWnd = FindWindow("#32770", "Выбор выкладываемого файла") DoEvents Sleep 200 Loop Until hWnd Or Now > timeout
'Debug.Print " File Download window "; Hex(hWnd)
If hWnd Then 'Find the child Open button
hWnd = FindWindowEx(hWnd, 0, "Button", "&Открыть") 'Debug.Print " Save button "; Hex(hWnd) End If
If hWnd Then
'Click the Open button
SetForegroundWindow (hWnd) Sleep 600 'this sleep is required and 600 miiliseconds seems to be the minimum that works SendMessage hWnd, BM_CLICK, 0, 0 End If End Sub
Как вариант. Перед вызовом диалогового окна создаете vbs скрипт,запускаете его В скрипте прописываете код,который через Апи будет находить окно, вставлять путь к файлу,нажимать кнопку выбора. Цикл Do Loop с задержкой 10-200 миллисекунд. Когда VBS выполнит свою работу,вы далее макросом удаляете его. Это аналог второго потока. В ХР поиск окна и работа с ним намного проще,чем в семерке. В зависимости от темы,иногда попадаются проблемы с поиском комбобокса.. Имя класса меняется.Обязательно перед вставкой пути к файлу изменить текущий каталог через ChDir
Как вариант. Перед вызовом диалогового окна создаете vbs скрипт,запускаете его В скрипте прописываете код,который через Апи будет находить окно, вставлять путь к файлу,нажимать кнопку выбора. Цикл Do Loop с задержкой 10-200 миллисекунд. Когда VBS выполнит свою работу,вы далее макросом удаляете его. Это аналог второго потока. В ХР поиск окна и работа с ним намного проще,чем в семерке. В зависимости от темы,иногда попадаются проблемы с поиском комбобокса.. Имя класса меняется.Обязательно перед вставкой пути к файлу изменить текущий каталог через ChDirdoober
о спасибо, мне все-равно у меня свободная машина чисто для этого дела, я могу вообще отдельно положить файл в hta, VBS вроде от VBA не сильно отличается, сейчас буду что-то пробовать, спасибо за идею.
о спасибо, мне все-равно у меня свободная машина чисто для этого дела, я могу вообще отдельно положить файл в hta, VBS вроде от VBA не сильно отличается, сейчас буду что-то пробовать, спасибо за идею.Ivanius
слушай спасибо сейчас попробую, т.к. уже хотел на делфи или на плюсах писать, на ВБС ничего не нашел. Если получиться сделать чтобы макрос не стопорился а нажать кнопку загрузки чем-то другим - то тогда можно и мою процедуру запустить - она все сделает красиво уже. Интересная мылсь но вроде с клавиатуры не получается там окно вот такое http://prntscr.com/51xn6w может мышкой через апи? и таки да проверил, если нажимаешь мышкой, а не макросом (пока ручками нажал) то все работает.
слушай спасибо сейчас попробую, т.к. уже хотел на делфи или на плюсах писать, на ВБС ничего не нашел. Если получиться сделать чтобы макрос не стопорился а нажать кнопку загрузки чем-то другим - то тогда можно и мою процедуру запустить - она все сделает красиво уже. Интересная мылсь но вроде с клавиатуры не получается там окно вот такое http://prntscr.com/51xn6w может мышкой через апи? и таки да проверил, если нажимаешь мышкой, а не макросом (пока ручками нажал) то все работает.Ivanius
Сообщение отредактировал Ivanius - Суббота, 01.11.2014, 18:02
Расскажу все о такой штуке крутой как SELENIUM - делает все намного проще по поводу заполнения и отправки информации на сайт.... очень рекомендую, может даже записывать сразу готовый макрос на нескольких языках!!! https://code.google.com/p/selenium-vba/ - тут вся инфа
Расскажу все о такой штуке крутой как SELENIUM - делает все намного проще по поводу заполнения и отправки информации на сайт.... очень рекомендую, может даже записывать сразу готовый макрос на нескольких языках!!! https://code.google.com/p/selenium-vba/ - тут вся инфаIvanius