Автор | Сообщение |
|
| постоянный участник
|
Пост N: 1786
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.06.11 04:05. Заголовок: Как "заморозить" выполнение программы ?
Всем привет. Подскажите как можно остановить (заморозить) выполнение программы до выполнения определенного события в другой программе ? Т.е. я из своей программы на хХарборе (терминалка) запускаю допустим программу "Скачивания из инета" на МиниГуи. Терминалку на хХарборе нужно "заморозить" до конца скачивания ! Иначе ЮЗВЕР будет тыкать мышкой раньше времени.... После того как скачался файл нужно вернуться обратно в терминалку на хХарборе ! Можно конечно сделать "семафорный файл" после получения файла из инета, а в хХарборе проверять каждую минуту есть такой файл или нет. Но это можно было делать и на Клипере (проверку файла). А что нам может предложить хХарбор ?
|
|
|
Новых ответов нет
, стр:
1
2
3
4
All
[см. все]
|
|
|
| |
Пост N: 49
Зарегистрирован: 18.02.11
|
|
Отправлено: 12.06.11 20:09. Заголовок: Andrey пишет: А чт..
Andrey пишет: цитата: | А что нам может предложить хХарбор ? |
| Я использую для таких вещей скриптовый язык AutoIt3. Запускаем прогу на МиниГуи (из нее запуск AutoIt3) и делаем терминальное окно hide: WinSetState("myprogram.exe", "", @SW_HIDE). При завершению проги на МиниГуи (из нее запуск AutoIt3) и делаем: WinSetState("myprogram.exe", "", @SW_SHOW) На Harbor не знаю как это сделать, возможно гуру подскажут.
|
|
|
|
| |
Пост N: 124
Зарегистрирован: 05.06.07
|
|
Отправлено: 21.06.11 03:30. Заголовок: WAITRUN..
WAITRUN
|
|
|
|
| постоянный участник
|
Пост N: 1795
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.06.11 00:25. Заголовок: SADSTAR2 пишет: WAI..
SADSTAR2 пишет: Нет такой функции в хХарборе !
|
|
|
|
| постоянный участник
|
Пост N: 513
Зарегистрирован: 25.12.07
|
|
Отправлено: 22.06.11 00:55. Заголовок: Andrey пишет: Всем ..
Andrey пишет: цитата: | Всем привет. Подскажите как можно остановить (заморозить) выполнение программы до выполнения определенного события в другой программе ? |
| Вообще-то была такая тема http://clipper.b.qip.ru/?1-4-0-00000327-000-20-0 Там WaitForSingleObject() ждал окончания другого процесса, но WaitForSingleObject()/WaitForMultipleObjects() могут "ждать" много разных событий и т.д Единственное, чтобы всем этим манипулировать, надо знать в некоторой степени С... Как сделать тоже самое только Харбором - не знаю.
|
|
|
|
| |
Пост N: 125
Зарегистрирован: 05.06.07
|
|
Отправлено: 22.06.11 01:51. Заголовок: Andrey пишет: Нет т..
|
|
|
|
| moderator
|
Пост N: 229
Зарегистрирован: 11.02.10
|
|
Отправлено: 22.06.11 10:22. Заголовок: Andrey пишет: Нет т..
Andrey пишет: цитата: | Нет такой функции в хХарборе |
| Зато такая функция есть в библиотеке минигуи Скрытый текст HB_FUNC( WAITRUN ) { DWORD dwExitCode; STARTUPINFO stInfo; PROCESS_INFORMATION prInfo; BOOL bResult; ZeroMemory( &stInfo, sizeof(stInfo) ); stInfo.cb = sizeof(stInfo); stInfo.dwFlags=STARTF_USESHOWWINDOW; stInfo.wShowWindow=hb_parni(2); bResult = CreateProcess(NULL, hb_parc(1) , NULL, NULL, TRUE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL, &stInfo, &prInfo); if (!bResult) { hb_retl(-1); } WaitForSingleObject(prInfo.hProcess,INFINITE); GetExitCodeProcess( prInfo.hProcess, &dwExitCode ); hb_retnl( dwExitCode ); }
|
|
|
|
|
| постоянный участник
|
Пост N: 1796
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.06.11 11:34. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Зато такая функция есть в библиотеке минигуи |
| А как прикрутить ? В смысле, какие include в заголовках включить ? #pragma BEGINDUMP #include <???.h> #pragma ENDDUMP
|
|
|
|
| постоянный участник
|
Пост N: 1859
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.08.11 00:32. Заголовок: Возвращаюсь к текуще..
Возвращаюсь к текущему вопросу, только для ShellExecute . Urri пишет: цитата: | Подскажите, а можно ли затормозить выполнение программы до того момента, пока то, что вызывалось ShellExecute, завершит свою работу? |
| Мне тоже нужно подождать пока ShellExecute выполнит работу, ну и выключить комп потом или продолжит что-то делать.
|
|
|
|
| постоянный участник
|
Пост N: 576
Зарегистрирован: 27.01.07
|
|
Отправлено: 19.08.11 08:34. Заголовок: Вот в этой теме было..
|
|
|
|
| постоянный участник
|
Пост N: 1860
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.08.11 11:43. Заголовок: PSP пишет: Вот в эт..
PSP пишет: Да читал я там до этого. Только там конечного результата не было ! Что конкретно использовать ? WAITRUN( cRun ) EXECANDWAIT() - какие параметры передавать ?
|
|
|
|
| постоянный участник
|
Пост N: 1861
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.08.11 12:13. Заголовок: Сделал тестовую прог..
|
|
|
|
|
| постоянный участник
|
Пост N: 1862
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.08.11 12:57. Заголовок: Хорошую вещь сделал ..
|
|
|
|
| Администратор
|
Пост N: 2040
Зарегистрирован: 23.05.05
|
|
Отправлено: 19.08.11 13:10. Заголовок: Andrey пишет: Хорош..
Andrey пишет: цитата: | Хорошую вещь сделал Pasha - функцию EXECANDWAIT |
| Только я ее не делал, а механически перевел с паскаля на С
|
|
|
|
| постоянный участник
|
Пост N: 1864
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.08.11 14:00. Заголовок: Pasha пишет: Только..
Pasha пишет: цитата: | Только я ее не делал, а механически перевел с паскаля на С |
| Все равно БОЛЬШОЕ СПАСИБО ! Никто другой же не сделал !!!
|
|
|
|
| постоянный участник
|
Пост N: 1865
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.08.11 14:24. Заголовок: Столкнулся с проблем..
Столкнулся с проблемой. При использовании терминала GTWVT - нет вывода на экран запущенного батника через функцию EXECANDWAIT() На GTWIN - все команды батника отображаются в окне задачи. Пример тут: http://files.mail.ru/TAU7FT Там в батнике идет разархивация архива 7z, с обработкой ошибки. Нужно подправить пути и добавить любой архив 7z. Вопрос к знатокам: можно ли сделать еще доп.параметр "показа/скрытия" вывода на экран для GTWVT ? Или вывод в другом окне ?
|
|
|
|
| постоянный участник
|
Пост N: 2069
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.02.12 01:25. Заголовок: Нужно сделать теперь..
Нужно сделать теперь другую задачу. Из МиниГуи вызывать с ожиданием терминалку на хХарборе ! Очень хотелось сделать попроще. WAITRUN() не подошел. Вообще не показывает запущенную терминалку (gtwin или gtwvt) ! В процессах сидит, на экране нет ! Такая же беда как на хХарборе ! Описания в ХЕЛПЕ по МиниГуи нет, искал WAITRUN() по исходникам.... И о чудо - нашел WAITRUNTERM() для терминалки ! Работает !!! Пишу, может кому пригодиться, чтоб не искали в ДОКЕ !
|
|
|
|
| |
Пост N: 20
Зарегистрирован: 19.10.05
|
|
Отправлено: 31.01.14 17:24. Заголовок: xHarbour Compiler bu..
Пришлось изменять старые программы, не переписаннные в GUI. xHarbour Compiler build 1.2.1 + GTWVT-terminal После вызова WAITRUNTERM( не восстанавливается экран после выхода из внешней программы). Например, вызов nRc := WaitRunTerm("Wordpad.exe") WAITRUNTERM Скрытый текст /* WaitRunTerm contributed by Kevin Carmody (i@kevincarmody.com) 2007.11.16 */ HB_FUNC( WAITRUNTERM ) { PHB_ITEM pWaitProc = hb_param( 4, HB_IT_BLOCK ); ULONG ulWaitMsec = ( ISNIL( 5 ) ? 2000 : hb_parnl( 5 ) ); BOOL bTerm = FALSE; BOOL bWait; ULONG ulNoSignal; DWORD dwExitCode; STARTUPINFO stInfo; PROCESS_INFORMATION prInfo; BOOL bResult; ZeroMemory( &stInfo, sizeof( stInfo ) ); stInfo.cb = sizeof( stInfo ); stInfo.dwFlags = STARTF_USESHOWWINDOW; stInfo.wShowWindow = ( WORD ) ( ISNIL( 3 ) ? 5 : hb_parni( 3 ) ); bResult = CreateProcess ( NULL, ( char * ) hb_parc( 1 ), NULL, NULL, TRUE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, ISNIL( 2 ) ? NULL : hb_parc( 2 ), &stInfo, &prInfo ); if( ! bResult ) hb_retnl( -2 ); if( pWaitProc ) { do { ulNoSignal = WaitForSingleObject( prInfo.hProcess, ulWaitMsec ); if( ulNoSignal ) { hb_evalBlock0( pWaitProc ); bWait = hb_parl( -1 ); if( ! bWait ) { if( TerminateProcess( prInfo.hProcess, 0 ) != 0 ) bTerm = TRUE; else bWait = TRUE; } } else bWait = FALSE; } while( bWait ); } else WaitForSingleObject( prInfo.hProcess, INFINITE ); if( bTerm ) dwExitCode = -1; else GetExitCodeProcess( prInfo.hProcess, &dwExitCode ); CloseHandle( prInfo.hThread ); CloseHandle( prInfo.hProcess ); hb_retnl( dwExitCode ); } #pragma ENDDUMP
| Либо подскажите, пожалуйста, где что не так в EXECANDWAIT для такой связки( не вызывается внешняя программа) : пример вызов nRc := EXECANDWAIT ("Wordpad.exe") EXECANDWAIT Скрытый текст HB_FUNC( EXECANDWAIT ) { char * szProg = hb_parc(1); int iShow = hb_parni(2); DWORD dResult = 0xFFFFFFFF; LONG lResult; STARTUPINFO si; PROCESS_INFORMATION proc; memset( &si, 0, sizeof( si ) ); si.cb = sizeof( si ); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = iShow; if( CreateProcess(NULL, szProg, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &proc ) ) { WaitForInputIdle(proc.hProcess, INFINITE ); if( WaitForSingleObject( proc.hProcess, INFINITE ) == WAIT_OBJECT_0 ) { if( ! GetExitCodeProcess(proc.hProcess, (LPDWORD) &dResult ) ) dResult = 0xFFFFFFFF; } CloseHandle( proc.hThread ); CloseHandle( proc.hProcess ); } lResult = (LONG) dResult; hb_retnl( lResult ); }
|
|
|
|
|
| |
Пост N: 3798
Зарегистрирован: 17.05.05
|
|
Отправлено: 31.01.14 17:50. Заголовок: Avf пишет: EXECAND..
Avf пишет: цитата: | EXECANDWAIT ("Wordpad.exe") |
| а если путь указать к Wordpad.exe
|
|
|
|
| |
Пост N: 21
Зарегистрирован: 19.10.05
|
|
Отправлено: 31.01.14 17:59. Заголовок: Wordpad в той же дир..
Wordpad в той же директории что и программа ( это просто пример )
|
|
|
|
| |
Пост N: 3799
Зарегистрирован: 17.05.05
|
|
Отправлено: 31.01.14 19:23. Заголовок: Avf Harbour 3.2 про..
Avf Harbour 3.2 проверил работает нормально Исходник proc main EXECANDWAIT("notepad.exe") return #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" #include "hbvm.h" #include "hbwinuni.h" HB_FUNC( EXECANDWAIT ) { void * hProg; HB_SIZE nLen; LPCTSTR lpProg = HB_PARSTR( 1, &hProg, &nLen ); DWORD dwResult = 0xFFFFFFFF; STARTUPINFO si; PROCESS_INFORMATION proc; memset( &si, 0, sizeof(si) ); si.cb = sizeof( si ); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = (WORD) hb_parnldef( 2, SW_SHOWDEFAULT ); if( CreateProcess( NULL, HB_STRUNSHARE( &hProg, lpProg, nLen ), /* Command line (Unicode version needs an non-const buffer) */ NULL, NULL, FALSE, CREATE_NO_WINDOW | NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &proc ) ) { hb_vmUnlock(); WaitForInputIdle( proc.hProcess, INFINITE ); if( WaitForSingleObject( proc.hProcess, INFINITE ) == WAIT_OBJECT_0 ) { if( ! GetExitCodeProcess( proc.hProcess, &dwResult ) ) dwResult = 0xFFFFFFFF; } CloseHandle( proc.hThread ); CloseHandle( proc.hProcess ); hb_vmLock(); } hb_retnint( dwResult ); hb_strfree( hProg ); } #pragma ENDDUMP
|
|
|
Новых ответов нет
, стр:
1
2
3
4
All
[см. все]
|
|