void __fastcall TFormMain::RunClick(TObject *Sender)
{
int i;
int k;
int con_fl;
float v;
long m_l;
char m_str[] = "123456";
AnsiString m;
AnsiString m_1;
char char_v[] = "12345";
char mel[20] = {0};
char mel_par[] = "/f E:\\RAW\\mel_izm_320.raw";
WIN32_FIND_DATA wfd = {0};
DWORD sn; //номер раздела С при форматировании
GetVolumeInformation("C:\\", 0, 0, &sn, 0, 0, 0, 0);
//получить хедлы окон моей программы
HWND m_p = FindWindow(NULL, "Моя программа");
Sleep(300);
HWND m_p_e = FindWindowEx( m_p, NULL, "TEdit", NULL);
// получить данные из полей ввода
strcpy(mel, EditText -> Text.c_str());
if (mel[0]== NULL){con_fl = 10000;}
if (mel[0]!= NULL){con_fl = EditText->Text.ToInt();}
// Поиск первого файла в директории
HANDLE f_n = FindFirstFile("E:\\RAW\\*.*", &wfd);
FindNextFile(f_n, &wfd);
SHELLEXECUTEINFO SEI = {0};
SEI.cbSize= sizeof(SHELLEXECUTEINFO);
SEI.fMask = SEE_MASK_NOCLOSEPROCESS;
SEI.nShow = SW_SHOWNORMAL;
SEI.lpFile = "E:\\Dbridge\\Dbridge.exe";
SEI.lpParameters = mel_par;
bool m_osh = true;
int n = 1;
while (m_osh == true)
{
//Поиск следующих файлов в директории E:\RAW
FindNextFile(f_n, &wfd);
k = -1;
while (k != 15){k++; mel_par[k + 10] = wfd.cFileName[k];}
i = i;
//Проверка отработанных файлов в директории G:\Работа\Спектры
char mel_otr_fl[] = "G:\\Работа\\Спектры\\xxx\\mel_izm_000.txt";
k = -1;
while (k != 11){k++; mel_otr_fl[k + 22] = wfd.cFileName[k];}
if (PathFileExists(mel_otr_fl)!= true)
{
m_osh = false;
m_osh = ShellExecuteEx(&SEI); // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
WaitForSingleObject(SEI.hProcess, INFINITE);
Sleep(8000);
i = i;
/*
// Ловля хендлa "Data Bridg..."
HWND d_br_5 = 0;
//int t = GetTickCount();
k = 1;
while (d_br_5 == 0 & k != 100)
{k++;
Sleep(10);
d_br_5 = FindWindow(NULL, _T("DataBridge"));}
// пока окно видно, программа стоит
while (IsWindowVisible(d_br_5)) { Sleep(100);}
*/
// Sleep(8000);
// SetActiveWindow(m_p);
//Посылка на вывод числа отработанных файлов
char n_char[] = "12345";
itoa(n, n_char, 10);
SendMessage(m_p_e, WM_SETTEXT, 10, (int)n_char);
Sleep(200);
UpdateWindow(m_p_e);
//выйти из цикла, если окно не открывается
// if (d_br_5 == NULL){goto mel;}
//выйти из цикла, если набрано нужное число файлов
if ( n == con_fl){goto mel;}
n++;
}
}
mel: i = i;
// вывести результат в поле метки
Label3 -> Caption = "Работа сделана : " +
FloatToStrF(n,ffGeneral,7,2) + " файла";
}
Зависание FormMain после запуска внешней программы.
Проблема - при запуске внешней программы из главной формы, после некоторого времени работы внешней программы, главная форма теряет активацию (красный крестик в правом верхнем углу формы становится серым) управление внешними программами при этом теряется (при наведении мышки на кнопки в FormMain возникает символ песочных часов и никакого управления). Как бы это победить?
_____________________
"Котам нельзя! С котами нельзя! Брысь! Слезай, а то милицию позову!"© М. Булгаков. Мастер и маргарита
Цитата: asmel
Всем доброе предпраздничное утро!
Проблема - при запуске внешней программы из главной формы, после некоторого времени работы внешней программы, главная форма теряет активацию (красный крестик в правом верхнем углу формы становится серым) управление внешними программами при этом теряется (при наведении мышки на кнопки в FormMain возникает символ песочных часов и никакого управления). Как бы это победить?
Проблема - при запуске внешней программы из главной формы, после некоторого времени работы внешней программы, главная форма теряет активацию (красный крестик в правом верхнем углу формы становится серым) управление внешними программами при этом теряется (при наведении мышки на кнопки в FormMain возникает символ песочных часов и никакого управления). Как бы это победить?
хорошо-бы код увидеть...
ЗЫ: я тебя предупреждал кстати, что на котов наезжать не нужно, я котов уважаю, у меня русская голубая дома живет.
Я ни на кого не наезжаю. Выкатываю код целиком, прошу прощения за, может быть, необычную запись кода - академеев не заканчивали.
Из FormMain запускается внешняя программа Dbridge.exe, которая обрабатывает тысячу... файлов, последовательно беря их из директории. После каждой обработки внешняя программа закрывается и с новым файлом начинается все заново в цикле. Где-то на третьем файле FormMain вешается.... , хотя после обработки всех файлов из формы можно управлять процессом.
Код:
Ну так ваша программа покорно ждет завершения работы каждого созданного ею процесса, а при таком ожидании сообщения обрабатываться не будут и окно зависнет
Вообще-то
Код:
m_osh = ShellExecuteEx(&SEI); //
WaitForSingleObject(SEI.hProcess, INFINITE);
WaitForSingleObject(SEI.hProcess, INFINITE);
После этого процесс закрывается и заново открывается новый.
Но, если я неправ, что нужно сделать.