Форум » [x]Harbour » Как запуcкать приложения без использования __Run » Ответить

Как запуcкать приложения без использования __Run

SkyNET: Здравствуйте ! Подскажите пожалуйста, как можно запустить приложение не используя командную строку ?

Ответов - 72, стр: 1 2 3 4 All

Dima: еще не все ;) Suspicious pointer conversion in function HB_FUN_EXECANDWAIT в строке char * szProg = hb_parc(1); что ему надо ? ;) PS Harbour 3.2

Петр: Ему надо const char * szProg = hb_parc(1);

Dima: Петр Да теперь там не ругается но ругается в другом месте Warning W8075 pew.prg 238: Suspicious pointer conversion in function HB_FUN_EXECANDWAIT на этой строке if( CreateProcess(NULL, szProg, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &proc ) )


Петр: Это естественно - обычное приведение типов Или игнорируйте, или функцию для использования с Harbour нужно переписать. За пример можно взять WIN_RUNDETACHED, библиотека hbwin

Dima: Петр Понятно ;) Знал бы С сюда бы не написал ;) Спасибо и на этом.

Петр: Понятно ;) Возможно потребуется напильник - не компилировал и не тестировал. #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, 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

Andrey: Дима, ты про эту функцию спрашивал ? Я для хХарбора сделал - http://clipper.borda.ru/?1-4-0-00000660-000-0-0-1330208704 Хорошую вещь сделал Pasha - функцию EXECANDWAIT в http://clipper.borda.ru/?1-4-0-00000327-000-10001-0-1250159714 Только сейчас оценил. Можно вызвать через батник Notepad или WinWord и пока не завершишь работу в них, программа "заморожена" !!! Спасибо БОЛЬШОЕ Pasha ! Пример заново выкладываю ( давно уже было, сам там посмотришь) - http://files.mail.ru/7F726EC71C0C4B38A06A75252CBFDEFF

Dima: Петр пишет: Возможно потребуется напильник - не компилировал и не тестировал Спасибо но... [pre2] Warning W8065 pew.prg 226: Call to function 'HB_PARSTR' with no prototype in function HB_FUN_EXECANDWAIT Warning W8069 pew.prg 226: Nonportable pointer conversion in function HB_FUN_EXECANDWAIT Warning W8065 pew.prg 239: Call to function 'HB_STRUNSHARE' with no prototype in function HB_FUN_EXECANDWAIT Error E2342 ped.prw 240: Type mismatch in parameter 'lpCommandLine' (wanted 'signed char *', got 'int') in function HB_F UN_EXECANDWAIT Warning W8065 pew.prg 242: Call to function 'hb_vmUnlock' with no prototype in function HB_FUN_EXECANDWAIT Warning W8065 pew.prg 254: Call to function 'hb_vmLock' with no prototype in function HB_FUN_EXECANDWAIT Warning W8065 pew.prg 257: Call to function 'hb_retint' with no prototype in function HB_FUN_EXECANDWAIT Error E2379 ped.prw 259: Statement missing ; in function HB_FUN_EXECANDWAIT Warning W8004 pew.prg 260: 'lpProg' is assigned a value that is never used in function HB_FUN_EXECANDWAIT [/pre2]

Петр: А теперь ?

Dima: Петр пишет: А теперь ? Теперь все собирается. Проверю завтра. Спасибо ! Каковы параметры функции (как в WAPI_ShellExecute) ?

Петр: Dima пишет: Каковы параметры функции (как в WAPI_ShellExecute) ? Не совсем понял, как в оригинале function WinExec32AndWait(const Cmd: String; const CmdShow: Integer): Cardinal; Из примера Андрея cFile := CurDrive()+":"+DirName()+"\backup_test2.bat" EXECANDWAIT(cFile) 2-й параметр в ExecAndWait == 6-й параметр в wapi_ShellExecute, по умолчанию SW_SHOWDEFAULT, можно на SW_SHOWNORMAL поменять Что, собственно, делать-то нужно?

Dima: Петр пишет: Что, собственно, делать-то нужно? Ни чего ;) 2 параметра я понял. Просто уточнил. Этот язык С для меня как китайская грамота ;) Завтра проверю и отпишу. Спасибо !

Dima: Петр пишет: 2-й параметр в ExecAndWait Все работает как надо , но если вторым параметром поставить 0 (он же SW_HIDE) то экран портится тем что выводит вызываемая программа. Похоже SW_HIDE не срабатывает. В WAPI_ShellExecute если вызвать туже программу с установкой SW_HIDE то все нормально Хотелось бы что бы запускаемый процесс происходил скрыто. PS GTWIN

Dima: Переделал сам (вроде пашет как и хотел) Вот этот кусочек [pre2] if( CreateProcess( NULL, HB_STRUNSHARE( &hProg, lpProg, nLen ), /* Command line (Unicode version needs an non-const buffer) */ NULL, NULL, FALSE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &proc ) ) { [/pre2]

Andrey: Dima пишет: Переделал сам (вроде пашет как и хотел) Пример (готовый) в студию !

Dima: Andrey пишет: Пример (готовый) в студию ! Да не вопрос. [pre2] Proc main EXECANDWAIT("c:\winprint\winprint test.txt -c",SW_HIDE) 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_NEW_CONSOLE | 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 [/pre2]

Dima: Andrey пишет: Пример (готовый) в студию ! Что в студии говорят ?

Andrey: Dima пишет: Что в студии говорят ? Да еще не добрался... Целый день как пчелка тружусь, с 10 и вот сейчас до ночи 01:33.... Отвечаю и между делом пытаюсь что-то написать своё...

nick_mi: Работает, запускает и в обычном режиме и в скрытом. Но в обычном режиме данные за вызванным приложением портятся. Но это, наверное, издержки ожидания окончания вызванного процесса Терминал GTWVT

PSP: Может вместо CREATE_NEW_CONSOLE использовать CREATE_NO_WINDOW?



полная версия страницы