Написал колд, который меняет поля и кликает по кнопке.
Оказывается этот exe цепляте файлик (который я и подменяю) при загрузке, а не при щелчке.
Форма, то пропадает, но при следующем запеске через ShellExecute она появляется, но ни програмно ни просто мышкой клик по кнопке не приводи к выполнению действий (скрытых в том exe)
Подскажите как сделать перезапрос или закрытие и новое открытие, чтобы программно можно было послать клик
'====== Запускаем утилиту и ищем ее хэндл
pr = ShellExecute(Form1.hwnd, "Open", "TBColEmulator.exe", vbNullString, vbNullString, 1)
k = 0
Do
FipsHwnd = FindWindow(vbNullString, "TBColEmulator")
DoEvents
Call Sleep(100)
k = k + 1
Loop While FipsHwnd = 0 And k < 10
'============
If FipsHwnd <> 0 Then
RetVal = EnumChildWindows(FipsHwnd, AddressOf ChildWinProc, 0)
If Form1.Option_credit.Value = True Then
Call file_credit(account, sum)
Else
Call file_debit(account, sum) '("236301112733", "2813,2374")
End If
iCl = 0
Do
Rez_num_msg = SendMessage(Num_of_msg_hwnd, &HC, 0, ByVal "1") ' Устанавливаем 1 для колличества обработок
Rez_activ_win1 = ShowWindow(FipsHwnd, SW_SHOWNORMAL) 'Работает если прога свернута в трей
Rez_activ_win2 = SetForegroundWindow(FipsHwnd) ' Активирует окно если не в трее
DoEvents
Call Sleep(100) ' Делаем задержку чтобы гарантировано активировать утилиту перед кликом
Rez_click = PostMessage(Start_hwnd, &HF5, 0, 0) 'Посылаем клик по Start
iCl = iCl + 1
Loop While Rez_click <> 1 And iCl < 10
i = 0
bOper = False
msg_value_old = Contrl_Value(Msg_sent_hwnd)
Do
DoEvents
Call Sleep(500)
i = i + 1
msg_value = Contrl_Value(Msg_sent_hwnd)
If CInt(msg_value) = CInt(msg_value_old) + 1 Then
bOper = True
Else
bOper = False
End If
Loop While (CInt(msg_value) = CInt(msg_value_old)) And i < 20 ' Тоесть ждать не более 10 секунд или пока не выполнится
If bOper = True Then
'MsgBox "Операция выполнена!", vbInformation, "Операция прошла успешно."
Print #4, filestring & ";OK"
Else
'MsgBox "Операция НЕ выполнена...", vbCritical, "Операция НЕ прошла..."
Print #4, filestring & ";Fail"
End If
'+++ Закрываем утилиту и удаляем xml файлы
Call SendMessage(FipsHwnd, WM_CLOSE, 0, 0) ' Закрытие утилиты WM_DESTROY
'CloseWindow
'------- удаляем все xml файлы
MyName = Dir("*.xml", vbNormal)
Do While MyName <> ""
Kill MyName
MyName = Dir
Loop
'--------------
'++++++
Else
Print #4, filestring & ";Fail Utility is not started"
End If
Если прогу закрыть по крестику и заново открыть, то все работает.
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd _
As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
Const WM_SYSCOMMAND = &H112
Const SC_CLOSE = &HF060
Private Sub Command2_Click()
'Посылаем окну сообщение закрыться...
SendMessage Me.hWnd, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&
End Sub
Данна (чужая) программа использует dll.
Option Explicit
Private Sub Command2_Click()
Dim pr As Long
pr = Shell("c:\Work\Visual Basic\TBColEmulator.exe", 1)
End Sub
Это интерпретатор командных строк Windows. Эмуляция DOS это несколько иное.Belkin писал(а):В моем понимании это имулчтор DOS
А разве не так?
Belkin писал(а):В моем понимании это имулчтор DOS
А разве не так?
LÍ!This program cannot be run in DOS mode.
$
и вот что я увидел среди иероглифов
Какие идеи???
Сейчас этот форум просматривают: AhrefsBot, Google-бот, Yandex-бот и гости: 61