Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2009, 18:17   #1
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
Вопрос Загрузить процесс в память, но не допустить запуска

Я не знаю возможно ли такое, но например есть firefox.exe, возможно ли при нажатии на Button1 загрузить этот исполняемый файл, а при нажатии на Button2 показать(запустить) программу.
Мне приходила идея для решения этой задачи, например запустив с помощью WinExec, а потом узнав хэндл firefox скрыть его с помощью функции ShowWindow. Но как тогда этот хэндл узнать?
Помогите пожалуйста найти другой способ решения этой задачи или как узнать хэндл чужого приложения.
Заранее благодарен!
Crivel вне форума Ответить с цитированием
Старый 27.05.2009, 18:48   #2
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Как вариант , найти его по названию окна , по идее функция может находить и окна с неточным указанием названия
function FindWindow(lpClassName, lpWindowName: PChar): HWND; stdcall;
На счёт указания в названии окна - не смотрел , может можно найти по маске .. а маска для фаерфокса не сложна ( хоть я и не пользуюсь , но название окна начинается с Firefox ... )

Как 2рой вариант , в интернете не сложно найти примеры как по процессу найти все привязанные к нему окна. Точнее их хэндлы.
Lime вне форума Ответить с цитированием
Старый 27.05.2009, 18:50   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

где то было про запуск процесса из памяти(то есть например из Мемори стрима чтоли), надо поискать...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.05.2009, 20:56   #4
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

Lime, дело в том что firefox.exe я привёл для примера, мне нужно чтобы это работало для любой программы, то есть указал путь к исполняемому файлу и всё ок.
Вообще-то по моему можно зная имя процесса, узнать хэндл главного окна или всех окон, но как это делается я ума не приложу.
Crivel вне форума Ответить с цитированием
Старый 27.05.2009, 21:23   #5
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Цитата:
Сообщение от Crivel Посмотреть сообщение
Lime, дело в том что firefox.exe я привёл для примера, мне нужно чтобы это работало для любой программы, то есть указал путь к исполняемому файлу и всё ок.
Вообще-то по моему можно зная имя процесса, узнать хэндл главного окна или всех окон, но как это делается я ума не приложу.
Как я уже написал поищи в нете) Когдато давно у меня было пару процедур на тему поиска хэндлов , по PID по имени процесса , по названию окна , по пути к файлу ...

а в общем там просто комбинация этих функций и доступ к ним на разных этапах ..
Вот обратная процедура ( топ гугла ) ссылка 1

В этой теме есть ответ на Ваш вопрос , необходимо лиш немного переделать приведённый код. Добавить несколько проверок и Вуаля ) ссылка 2
Lime вне форума Ответить с цитированием
Старый 27.05.2009, 21:35   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

ShellExecute возвращает хэндл запущенного процесса...
mihali4 вне форума Ответить с цитированием
Старый 27.05.2009, 22:45   #7
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

Lime, спасибо за ссылки, почитаю.
mihali4, я пробовал, но тот хэндл какой эта процедура возвращает не существует. На верно вы ошибайтесь.
Crivel вне форума Ответить с цитированием
Старый 27.05.2009, 23:35   #8
Hottabych
Форумчанин
 
Регистрация: 13.01.2008
Сообщений: 140
По умолчанию

Если функция ShellExecute успешна, то возвращается значение больше 32, то бишь хендл процесса, иначе возвращается код ошибки...

Совершенно верно.
Цитата:
Return Values
If the function succeeds, the return value is the instance handle of the application that was run, or the handle of a dynamic data exchange (DDE) server application.
If the function fails, the return value is an error value that is less than or equal to 32.

Последний раз редактировалось mihali4; 27.05.2009 в 23:38.
Hottabych вне форума Ответить с цитированием
Старый 28.05.2009, 11:17   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что CreateProcess с CREATE_SUSPENDED уже отменили?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контроль запуска SONce Общие вопросы Delphi 7 17.04.2009 17:43
Как загрузить свою DLL в атакуемый процесс, который не знает о ее существовании - Создание хуков KleoY Win Api 18 30.03.2009 14:31
проблема запуска приложения Mazaxaka Общие вопросы Delphi 2 27.03.2009 14:51
параметры запуска TaTT DoGG Общие вопросы .NET 5 19.03.2009 16:19