Форум: "WinAPI";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
ВнизПодлождать пока форма закроется или спрячется Найти похожие ветки
← →
alexaken © (2006-05-23 16:02) [0]Хочу дождаться выполнения формы
делаю так
...
function bcAction(WClassName, BtnName: String): Boolean; //stdcall;
var
WinHandle, BtnHandle, hThread, hProcess: HWnd;
lProcessId, lngResult: DWord;
begin
WinHandle := FindWindow(PChar(WClassName), Nil);
if WinHandle <> 0 then
begin
Log("Форма для упарвления найдена " + QuotedStr(WClassName));
BtnHandle := FindWindowEx(WinHandle, 0, PChar("TButton"), PChar(BtnName));
if BtnHandle <> 0 then
begin
Log("Кнопка для управления найдена " + QuotedStr(BtnName));
Application.ProcessMessages;
if PostMessage(BtnHandle, BM_CLICK, 0, 0) then Log("Сообщенение нажатия кнопки: " + QuotedStr(BtnName)+" послано");
// ожидание завершения процесса
//hThread := GetWindowThreadProcessId(WinHandle, lProcessId);
//hProcess := OpenProcess(SYNCHRONIZE, False, lProcessId);
WaitForSingleObject(WinHandle, INFINITE);
//while WaitForSingleObject(WinHandle, 500) = WAIT_TIMEOUT do;// Application.ProcessMessages;
//SendMessage(BtnHandle, BM_CLICK, 0, 0);
Result := True;
end
else
begin
Result := False;
Log("Кнопка для управления не найдена " + QuotedStr(BtnName));
end;
end
else
begin
Result := False;
Log("Форма для упарвления не найдена " + QuotedStr(WClassName));
end;
if not Result then Sleep(100);
end;
....
if ((FindWindow("TStepForm", "") = 0) and (FindWindow("TStep2Form", "") = 0)) and (FindWindow("TStep5DltForm", "") = 0) then
if not CreateProcess(
nil, // pointer to name of executable module
PChar(ini.ReadString("Aplication", "UpdateUnit", "")), // pointer to command line string
nil, // pointer to process security attributes
nil, // pointer to thread security attributes
False, // handle inheritance flag
NORMAL_PRIORITY_CLASS, // creation flags
nil, // pointer to new environment block
nil, // pointer to current directory name
StUpInfo, // pointer to STARTUPINFO
ProcInfo) then // pointer to PROCESS_INFORMATION
Log("Запуск модуля обновлния не произведен")
else
begin
// ждем пока запущенный процесс полностью загрузится
//CloseHandle(ProcInfo.hThread);
WaitForInputIdle(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess);
while (not bcAction("TStep1Form", "Далее >>")) {and not bStopMode} do Application.ProcessMessages;
// Шаг второй
while (not bcAction("TStep2Form", "Далее >>")) {and not bStopMode} do Application.ProcessMessages;
// Шаг третий
while (not bcAction("TStep5DltForm", "Далее >>")) {and not bStopMode} do Application.ProcessMessages;
CODE>
в общем хочу автоматизировать процесс обновления базы программы, интерфейс обновления содержит несколько последовательных форм, нужно на каждой нажать кнопку "Далее >>", первые две формы запрос параметров обновления (параметры по умолчанию поэтому везде жмем "Далее >>") третья форма собственно обновление ее то и нужно попдождать в процессе обновления кнопка "Далее >>" неактивна по окончании процесса нужно инажать "Далее >>"
нужно как то узнать стала ли кнопка активной
ну и до кучи еще вопрос как опросить ChrckBox в чужом окне и проверять установленл ли флаг (на случай если параметры обновления придется менять).
заранее спасибо жду проффесиональных ответов и версий :)
← →
Elen © (2006-05-23 16:32) [1]Извини за нескромный вопрос, а ты что разными экзешниками делаеш?
Если да то зачем?
← →
Elen © (2006-05-23 16:33) [2]Это ж последовательный процесс зачем его распаралеливать? Засунь все формы в одну прогу и вызывай их друг за другом
← →
alexaken © (2006-05-23 21:31) [3]извините не пояснил, обновление сторонней программы, хочу автоматизировать процесс который выполняю руками ( запускаю модуль обновления -> выходит форма с кнопкой нажимаю кнопку и тд жду(долго жду) завершения -> кнопка становится активной жму, форма обновления закрывается), нужно производить такие манипуляции в нерабочее время это и есть причина написания программы.
← →
Elen © (2006-05-24 07:50) [4]А эта кнопка она на форме одна (она по Энтеру срабатывает по умолчанию или на нее надо стать)?
Если одна рой в сторону
VOID keybd_event(
BYTE bVk, // virtual-key code
BYTE bScan, // hardware scan code
DWORD dwFlags, // flags specifying various function options
DWORD dwExtraInfo // additional data associated with keystroke
);
← →
alexaken © (2006-05-24 15:10) [5]кнопок на форме несколько, нужная не активна
нашел как проверить активна ли кнопка или нетIsWindowEnabled(BtnHandle)
The IsWindowEnabled function determines whether the specified window is enabled for mouse and keyboard input.
Syntax
BOOL IsWindowEnabled(HWND hWnd);
← →
ANB © (2006-05-24 18:36) [6]А на чем сделана сторонняя инсталляшка ? Спаем смотрел ее ?
← →
alexaken © (2006-05-24 22:29) [7]это не инсталяшка а модуль обновления базы прграммы, Спаем не смотрел, смотрел названия классов самопальной прогой, по этому мне известны имена классов нужных мне форм:
" TStep1Form"; " TStep2Form"; "TStep5DltForm"
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.016 c