Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.47 MB
Время: 0.012 c
15-1157842793
Дед Маздай
2006-09-10 02:59
2006.10.01
Опера


8-1142237353
Alex_Delphi
2006-03-13 11:09
2006.10.01
Как сознать виртуальний CD диск


8-1142014085
Volkodav
2006-03-10 21:08
2006.10.01
Преобразование картинок


15-1158138822
term1t
2006-09-13 13:13
2006.10.01
Распространение приложений


2-1157522821
YOjik
2006-09-06 10:07
2006.10.01
Ошибка при выгрузке dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский