Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.01;
Скачать: CL | DM;

Вниз

Подлождать пока форма закроется или спрячется   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2006.10.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.059 c
1-1156147536
webpauk
2006-08-21 12:05
2006.10.01
Диагональная заливка


15-1157705486
Kolan
2006-09-08 12:51
2006.10.01
Дизайнерская задача :)


2-1158161232
greengeneral
2006-09-13 19:27
2006.10.01
нажатие Buton


2-1158223978
megasecure
2006-09-14 12:52
2006.10.01
Проблема с ADO


2-1158138898
erig
2006-09-13 13:14
2006.10.01
Статистика документа MSWord.