Автор | Сообщение |
|
| |
Пост N: 2
Зарегистрирован: 23.06.08
|
|
Отправлено: 24.06.08 17:47. Заголовок: Как запуcкать приложения без использования __Run
Здравствуйте ! Подскажите пожалуйста, как можно запустить приложение не используя командную строку ?
|
|
|
Ответов - 72
, стр:
1
2
3
4
All
[только новые]
|
|
|
| |
Пост N: 318
Зарегистрирован: 08.04.06
|
|
Отправлено: 05.06.09 14:03. Заголовок: Andrey пишет: Ура, ..
Andrey пишет: цитата: | Ура, нашел на нашем языке...... |
| Где нашёл? Поделись на aynn[at]li.ru
|
|
|
|
| постоянный участник
|
Пост N: 863
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.06.09 14:20. Заголовок: Да не помню где взял..
Да не помню где взял... Давай адрес - вышлю ..
|
|
|
|
| |
Пост N: 319
Зарегистрирован: 08.04.06
|
|
Отправлено: 05.06.09 14:51. Заголовок: Andrey пишет: Давай..
Andrey пишет: Так написан адрес-то! Или тебя [at] смутило?
|
|
|
|
| постоянный участник
|
Пост N: 864
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.06.09 15:52. Заголовок: Лукашевский пишет: ..
Лукашевский пишет: Смутило ! Это на каком языке ? aynn@li.ru - не прокатило !
|
|
|
|
| |
Пост N: 321
Зарегистрирован: 08.04.06
|
|
Отправлено: 05.06.09 16:01. Заголовок: Andrey пишет: aynn@..
Andrey пишет: цитата: | aynn@li.ru - не прокатило ! |
| Очень странно... Сегодня мне отправляли письмо на этот ящик, я его получил. Может, ты чего не так пишешь? Смотри в uppercase: AYNN@LI.RU
|
|
|
|
| постоянный участник
|
Пост N: 866
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.06.09 16:11. Заголовок: :sm189: Файлы опуб..
Файлы опубликованы: http://files.mail.ru/FCT0WW Файлы будут храниться до 10 июня 2009 года, каждое скачивание файлов продлевает их срок хранения еще на 5 дней.
|
|
|
|
| постоянный участник
|
Пост N: 131
Зарегистрирован: 21.04.09
|
|
Отправлено: 06.08.09 11:54. Заголовок: Добрый день. Подска..
Добрый день. Подскажите, а можно ли затормозить выполнение программы до того момента, пока то, что вызывалось ShellExecute, завершит свою работу?
|
|
|
|
| постоянный участник
|
Пост N: 891
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.08.09 19:19. Заголовок: Один из вариантов: ..
Один из вариантов: 1) Создать файл, любой хоть текстовый... (например exit.txt) 2) Вызвать ShellExecute() 3) Пока существует файл exit.txt программа не работает.... Можно повесить табличку типа: Работайте с программой такой-то... 4) А из программы вызываемой ShellExecute() удалите файл exit.txt 5) И переключите фокус на предыдущую программу.
|
|
|
|
| постоянный участник
|
Пост N: 257
Зарегистрирован: 25.12.07
|
|
Отправлено: 09.08.09 09:53. Заголовок: Подскажите, а можно ..
цитата: | Подскажите, а можно ли затормозить выполнение программы до того момента, пока то, что вызывалось ShellExecute, завершит свою работу? |
| На Delphi это делается следующим образом: function WinExec32AndWait(const Cmd: String; const CmdShow: Integer): Cardinal; var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin Result := Cardinal($FFFFFFFF); FillChar(StartupInfo, SizeOf(TStartupInfo), #0); StartupInfo.cb := SizeOf(TStartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := CmdShow; if CreateProcess(nil, PChar(Cmd), nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then begin WaitForInputIdle(ProcessInfo.hProcess, Infinite); if WaitForSingleObject(ProcessInfo.hProcess, Infinite) = WAIT_OBJECT_0 then begin if not GetExitCodeProcess(ProcessInfo.hProcess, Result) then Result := Cardinal($FFFFFFFF); end; CloseHandle(ProcessInfo.hThread); CloseHandle(ProcessInfo.hProcess); end; end; Один в один переведите в С-синтаксис и все.
|
|
|
|
| постоянный участник
|
Пост N: 132
Зарегистрирован: 21.04.09
|
|
Отправлено: 11.08.09 09:28. Заголовок: Не сложилась у меня ..
Не сложилась у меня дружба с Delphi, с С тоже не очень, так что спасибо за совет, которій мне не удастся воплотить в жизнь
|
|
|
|
| Администратор
|
Пост N: 1199
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.08.09 11:40. Заголовок: #pragma BEGINDUMP #..
#pragma BEGINDUMP #include <windows.h> #include "hbapi.h" HB_FUNC( EXECANDWAIT ) { char * szProg = hb_parc(1); int iShow = hb_parni(2); LONG lResult = -1; 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) &lResult ) ) lResult = -1; } CloseHandle(proc.hThread); CloseHandle(proc.hProcess); } hb_retnl( lResult ); } #pragma ENDDUMP Извини, не проверял (с)
|
|
|
|
|
| постоянный участник
|
Пост N: 259
Зарегистрирован: 25.12.07
|
|
Отправлено: 12.08.09 13:04. Заголовок: Urri пишет: так что..
Urri пишет: цитата: | так что спасибо за совет, которій мне не удастся воплотить в жизнь |
| Pasha пишет: Ну, я надеялся, что с переводом вам помогут Паш, у меня, правда есть одно небольшое примечание: Тип Cardinal в дельфях это DWORD, поэтому, вообще говоря, $FFFFFFFF - это не -1, а 4294967295 К тому же в GetExitCodeProcess второй параметр идет указателем, поэтому, скорее всего, неявного приведения типов здесь не будет. То есть, результат может оказаться другим числом. Если я правильно понимаю LONG используется, потому что нельзя вернуть DWORD? Если так, то, может быть, несколько лучше будет так: Добавить еще переменную: DWORD dResult = 0хFFFFFFFF; В GetExitCodeProcess использовать ее: GetExitCodeProcess(proc.hProcess, (LPDWORD) &dResult ) ) Ну и перед возвратом - hb_retnl( lResult ); сделать явное присвоение: lResult = dResult;
|
|
|
|
| Администратор
|
Пост N: 1200
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.08.09 13:38. Заголовок: С учетом исправлений..
С учетом исправлений Сергея, функция будет выглядеть так: HB_FUNC( EXECANDWAIT ) { char * szProg = hb_parc(1); int iShow = hb_parni(2); DWORD dResult = 0хFFFFFFFF; 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 = 0хFFFFFFFF; } CloseHandle( proc.hThread ); CloseHandle( proc.hProcess ); } lResult = (LONG) dResult; hb_retnl( lResult ); } Заодно вопрос. Какой тэг использовать для кода, чтобы форум его не форматировал ?
|
|
|
|
| постоянный участник
|
Пост N: 728
Зарегистрирован: 09.10.06
|
|
Отправлено: 12.08.09 16:58. Заголовок: Тип Cardinal в Pasca..
Тип Cardinal в Pascal - это unsigned int или unsigned long в C или DWORD в терминологии Microsoft. Для того чтобы вернуть unsigned long необходимо использовать Harbour API функцию hb_retnint без всякого приведения и боязни получить неправильный результат. Pasha пишет: цитата: | Заодно вопрос. Какой тэг использовать для кода, чтобы форум его не форматировал ? |
| Я использую моношириннный шрифт + цитата
|
|
|
|
| постоянный участник
|
Пост N: 260
Зарегистрирован: 25.12.07
|
|
Отправлено: 12.08.09 18:42. Заголовок: Петр пишет: Для тог..
Петр пишет: цитата: | Для того чтобы вернуть unsigned long необходимо использовать Harbour API функцию hb_retnint без всякого приведения |
| Ну, если можно вернуть ulong, то, конечно, его и надо возвращать Хотя, взглянув на объявление hb_retnint догадаться об этом трудно (возможно у меня старенькая версия харбура, и тем более я не С-шник). Например в hbapi.h: extern HB_EXPORT void hb_retnl( long lNumber );/* returns a long number */ extern HB_EXPORT void hb_retnint( HB_LONG lNumber );/* returns a long number */ Как видим даже комменты одинаковые, а в определении HB_LONG: typedef LONG HB_LONG; ?
|
|
|
|
| Администратор
|
Пост N: 1201
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.08.09 19:24. Заголовок: В харборе тип данных..
В харборе тип данных NUMERIC - только знаковый. Неважно, как описана переменная в С-коде, на уровне prg она будет всегда signed. Внутренний фомат при этом может быть разным: 16/32/64-битовое целое, или double
|
|
|
|
| постоянный участник
|
Пост N: 729
Зарегистрирован: 09.10.06
|
|
Отправлено: 12.08.09 22:19. Заголовок: Sergey Spirin пишет:..
Sergey Spirin пишет: цитата: | Как видим даже комменты одинаковые, а в определении HB_LONG: typedef LONG HB_LONG; |
| О комментариях - без комментариев HB_LONG в зависимости от условий принимает значение #if defined( HB_CLIPPER_INT_ITEMS ) .. typedef LONG HB_LONG; typedef ULONG HB_ULONG; .. #elif !defined( HB_LONG_LONG_OFF ) && ULONG_MAX == UINT_MAX .. typedef LONGLONG HB_LONG; typedef ULONGLONG HB_ULONG; #else .. typedef LONG HB_LONG; typedef ULONG HB_ULONG; .. #endif При сборке Harbour по умолчанию HB_LONG_LONG_OFF не используется (как и HB_CLIPPER_INT_ITEMS). Для С компиляторов под Win ULONG_MAX == UINT_MAX. К примеру, можно посмотреть для bcc (_lim.h) #define UINT_MAX ULONG_MAX /* maximum unsigned int value */ Т.е. HB_LONG - это не long или LONG, а LONGLONG. LONGLONG в зависимости от компилятора и платформы это signed long long или __int64 и может принимать значение от –9,223,372,036,854,775,808 до 9,223,372,036,854,775,807. Поэтому этот тип данных можно спокойно использовать для возврата данных из диапазона 0L - (ULONG) ~0L
|
|
|
|
| постоянный участник
|
Пост N: 261
Зарегистрирован: 25.12.07
|
|
Отправлено: 13.08.09 13:35. Заголовок: Петр пишет: HB_LONG..
Петр пишет: цитата: | HB_LONG в зависимости от условий принимает значение.... |
| Ok Чтож, будем знать теперь, что int в названии функции не просто int, а целый Int64, да и HB_LONG не просто long, а по-long-ее будет
|
|
|
|
| |
Пост N: 2800
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.03.13 15:34. Заголовок: Pasha пишет: HB_FUN..
Pasha пишет: что то не компилится по Harbour hbmk2: Compiling... obj\pew.c: Warning W8075 pew.prg 224: Suspicious pointer conversion in function HB_FUN_EXECANDWAIT Error E2206 pew.prg 226: Illegal character 'х' (0xe5) in function HB_FUN_EXECANDWAIT Error E2141 pew.prg 226: Declaration syntax error in function HB_FUN_EXECANDWAIT Error E2206 pew.prg 244: Illegal character 'х' (0xe5) in function HB_FUN_EXECANDWAIT Error E2379 pew.prg 244: Statement missing ; in function HB_FUN_EXECANDWAIT
|
|
|
|
| |
Пост N: 2801
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.03.13 15:42. Заголовок: ага , понял. в 0хFFF..
ага , понял. в 0хFFFFFFFF буковка х русская в исходнике
|
|
|
Ответов - 72
, стр:
1
2
3
4
All
[только новые]
|
|