ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 24.06.2007, 22:11
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

ВОзникла проблема с закрытием стороней программы...
Вообщем я сделла чтобы через мою прогну можно было открыть другую..
Код:
 AppHI := ShellExecute(Handle, 'open',PChar(Edit3.Text), nil, nil, SW_SHOWNORMAL);
Но вот мне надо сделать чтобы можно было закрыть её через мою прогу...
Программа, которую запускаю через свою прогу - консольная....
 
Ответить с цитированием

  #2  
Старый 24.06.2007, 22:21
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

Цитата:
Сообщение от iNVLose  
Код:
Q-74: Как закрыть внешнюю программу?

 Например,  Блокнот  можно  закрыть  так:
 
 procedure  TForm1.Button1Click(Sender:  TObject);
 var
     phandle  :  HWND;
 begin
     phandle  :=  FindWindow('Notepad',  nil);
     if  phandle  =  0  then
           RaiseLastWin32Error;
     SendMessage(phandle,  WM_CLOSE,  0,  0);
 end;
_http://www.podgoretsky.com/ftp/Language/nps/ru.delphi.html#N74

некорректно терминэйтпроцесс..
Ну мне это ниче не дало...

Программа консольная, заголовки окна все время меняются...

Последний раз редактировалось Isis; 24.06.2007 в 22:26..
 
Ответить с цитированием

  #3  
Старый 24.06.2007, 22:27
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

Программа консольная, заголовки окна все время меняются...
 
Ответить с цитированием

  #4  
Старый 24.06.2007, 22:30
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

Pid ведь всегда меняется
 
Ответить с цитированием

  #5  
Старый 25.06.2007, 01:56
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию

Isis, небольшой примерчик:
Код:
var
  appname: string;
  start: TStartupInfo;
  procInfo: TProcessInformation;
begin
  appname := 'cmd.exe';
  fillchar(start, sizeof(start), 0);
  fillchar(procInfo,sizeof(procInfo), 0);
  CreateProcess(nil,pchar(appname),nil,nil,false,0,nil,nil,start,procInfo);
  sleep(1000);
  TerminateProcess(procInfo.hProcess,0);
end;

Последний раз редактировалось Joker-jar; 25.06.2007 в 02:05..
 
Ответить с цитированием

  #6  
Старый 25.06.2007, 02:17
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

Цитата:
Сообщение от Joker-jar  
Isis, небольшой примерчик:
Код:
var
  appname: string;
  start: TStartupInfo;
  procInfo: TProcessInformation;
begin
  appname := 'cmd.exe';
  fillchar(start, sizeof(start), 0);
  fillchar(procInfo,sizeof(procInfo), 0);
  CreateProcess(nil,pchar(appname),nil,nil,false,0,nil,nil,start,procInfo);
  sleep(1000);
  TerminateProcess(procInfo.hProcess,0);
end;

Хм, т.е. можно прогу закрыть по имени в процессах?
 
Ответить с цитированием

  #7  
Старый 25.06.2007, 02:26
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию

Не, appname := 'cmd.exe'; это я для примера запускаю консоль. CreateProccess создает процесс, структура procInfo заполняется информацией о процессе. Завершается процесс через TerminateProcess (подается procInfo.hProcess - хэндл созданного процесса). В примере через секунду. Тебе нужно будет procInfo объявить как глобальную, зарершить процесс сможешь когда тебе угодно.
 
Ответить с цитированием

  #8  
Старый 25.06.2007, 03:51
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

Ну тут опять надо знать заголовок проги, а он постояно меняется =\
 
Ответить с цитированием

  #9  
Старый 25.06.2007, 09:59
NetMan
Участник форума
Регистрация: 09.02.2004
Сообщений: 122
Провел на форуме:
1089794

Репутация: 134
По умолчанию

Isis, в примере, что дал Joker-jar не надо знать заголовок окна.
 
Ответить с цитированием

  #10  
Старый 25.06.2007, 11:21
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Цитата:
Сообщение от Isis  
Ну тут опять надо знать заголовок проги, а он постояно меняется =\
Ты не понял примера. Там запуск идет не через shellexecute, а через createprocess, что, кстати, более красиво, но суть не в том.
CreateProcess, если запуск прошел удачно, вернет тебе ThreadId, ProcessId, hThread, hProcess созданного процесса. Дальше можно смело орудовать этими значениями (конечно, стоит их гдето сохранить). Потом вызовешь TerminateProcess(pi.hProcess, 0) и все.

Кстати, а каким боком вопрос относится к дельфи? Тему разделяю.. автору -
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ