Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: WinAPI и системное программирование > Запуск другой программы из своей |
Автор: ivan219 3.1.2006, 00:37 |
Мне надо из своего преложения запустить программу калькулятор котрый находится в виндовсе. Как это зделать. |
Автор: Poseidon 3.1.2006, 01:19 | ||
Не забудь в uses прописать ShellApi |
Автор: ivan219 3.1.2006, 02:30 |
ОК. Всё работает. Тогда ещё вопрос может у кого есть иходники этого или другого калькулятора а то в виндовском некоторых функций нехватает. |
Автор: FRAGNATIC 3.1.2006, 03:53 | ||
ivan219 а ещё CreateProcess() и WinExec()
правила: один вопрос - один топик а исходники есть на ya.ru |
Автор: ivan219 3.1.2006, 04:19 |
Ладно калькулятор нашол буду его до делыват чтоб всё было. CreateProcess() WinExec() Можно поподробнее чем отличастся. И как полностью писать как здесь ShellExecute(Handle, nil, 'calc.exe', nil,nil, SW_Restore); . |
Автор: Akella 3.1.2006, 09:35 | ||||
В справке есть, на форуме, точно есть, попробуй поискать. CreateProcess() - этой функцией и нужно создавать процессы (запускать программы). WinExec() - оставлен для совмнстимости твоей, например, программы, с новыми версиями ОС.
|
Автор: ivan219 25.1.2006, 21:26 |
Вот вопрос прешолось опять поднять так как уменя нечего невышло мне надо запустить прогу которая находится в определённом месте на диске как это зделать ![]() Если можно то поподробнее как эту функцию исползовать CreateProcess() |
Автор: bems 25.1.2006, 22:01 |
BOOL CreateProcess( LPCTSTR lpApplicationName, // pointer to name of executable module LPTSTR lpCommandLine, // pointer to command line string LPSECURITY_ATTRIBUTES lpProcessAttributes, // pointer to process security attributes LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes BOOL bInheritHandles, // handle inheritance flag DWORD dwCreationFlags, // creation flags LPVOID lpEnvironment, // pointer to new environment block LPCTSTR lpCurrentDirectory, // pointer to current directory name LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION ); 1 и 2й параметры -что исполнять тонкостей я не догоняю, но первый пишу нил, а второй - командная строка (можно с путем и параметрами) 3й и 4й - обычно нил 5й - истина если новый процесс наследует хэндлы от твоего 6й - флажки. я пишу ноль, но можно передать CREATE_SUSPENDED и первичный поток процесса будет замороженым Добавлено @ 22:11 чтобы разморозить - ResumeThread. можно также задать приоритет. 7й - нил, если ты не создавал для этого процесса особый набор перем. окружения 8й - текущий каталог, если нил - наследуется 9й - структура STARTUPINFO. делается так: var si:STARTUPINFO; begin ZeroMemory(@si,SizeOf(si)); si.cb:=SizeOf(si); CreateProcess(......................,si,...); 10й - структура PROCESS_INFORMATION В ней получаешь в случае успеха ид-ры потока и процесса и их хэндлы. Если не собираешся ничего с ними делать то хэндлы нужно побыстрее закрыть CloseHandle |
Автор: ivan219 26.1.2006, 00:08 | ||
Это всё слишком для меня я только наяинаю если можно то попроще. Мне надо: запустить EXE фаил который лежит в папке и находится вместе с управляющим EXE всё это находится в одной папке, некакого управления просто я в управляющем EXE нажемаю на кнопку и EXE из папки запускается. ![]() Добавлено @ 00:20 У меня ошибка ![]()
|
Автор: bems 26.1.2006, 01:17 | ||
|
Автор: ivan219 26.1.2006, 02:42 | ||
Чтото опять не то прога откомпилилась а фаил неоткрывает ![]()
|
Автор: bems 26.1.2006, 03:23 |
Ну да, я ж говорю - обычно пишу во втором параметре ![]() 6: if CreateProcess(nil,'Cmd.EXE',nil,nil,false,0,nil,nil,si,pi) then begin |
Автор: ivan219 26.1.2006, 20:16 | ||
Код дал bems, всё работает ![]()
![]() |
Автор: ivan219 28.1.2006, 23:35 | ||||
Вобщем опять проблема уменя есть фаил который запускается через вот этот код
Сам EXE запускается нормально. Но также есть фаил *.DLL который вместе с EXE но когда я его запускаю через свою прогу то получаю ошибку типа
Если запускать просто без моей проги то всё работает. Что делать ![]() |
Автор: Fighter 29.1.2006, 02:52 |
WinExec |
Автор: ivan219 29.1.2006, 06:09 |
Непонял ![]() |
Автор: Guedda 29.1.2006, 14:51 | ||
|
Автор: ivan219 29.1.2006, 18:48 | ||
Всё я проблему решит там надо указывать папку от куда запускать а уменя стоял nil так что всё снова ОК.
|
Автор: ivan219 21.9.2006, 13:54 | ||
Этот код работает в XP
А в 98 нет что делать ![]() |
Автор: _hunter 21.9.2006, 14:03 |
посмотреть на код ошибки. тогда все встанет понятно. + что именно не работает -- вообще ShellExecute или запуск ею куркулятора? |
Автор: ivan219 21.9.2006, 20:39 |
Она не запускает калькулятор. |
Автор: Alexeis 21.9.2006, 21:47 | ||
Какой код ошибки?
|
Автор: ivan219 22.9.2006, 02:01 |
А там вобще нет ни каких действий ни ошибки ни вызыва калькулятора, в XP нажимаю на кнопку и он появляется а в 98 нечего непроисходит. |
Автор: Yanis 22.9.2006, 09:05 | ||
Поставь этот код сразу после вызова ShellExecute и посмотри какая ошибка:
|
Автор: ivan219 22.9.2006, 14:55 | ||
Спасибо уменя нет файла калькулятора ![]() ![]() Вопрос закрыт ![]() |