Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2016.01.24;
Скачать: CL | DM;

Вниз

как закрыть окно?   Найти похожие ветки 

 
Sakipiel   (2014-07-04 21:51) [0]

Есть приложение, которое я сам и написал, но запускаю его как екзешник из другого приложения, если же оно уже открыто, то перед запуском я бы его хотел закрыть. Делаю я для этого следующее:


procedure TSDIAppForm.LaunchDebugModeClick(Sender: TObject);
var
 param1:PChar;
begin
 param1 := "debugModeOn";
 SendMessage(RuntimeHandle,WM_SYSCOMMAND,SC_CLOSE,0);
 //SendMessage(RuntimeHandle, WM_CLOSE, 0, 0);
 RuntimeHandle := ShellExecute(self.Handle, nil, "RuntimeMode.exe", PChar(Param1), PWideChar(ExtractFilePath(Application.ExeName)), SW_SHOW);
end;


но на  SendMessage(RuntimeHandle,WM_SYSCOMMAND,SC_CLOSE,0); (и во втором варианте тоже)
мое приложение никак не реагирует. что ему надо то?


 
turbouser ©   (2014-07-04 23:45) [1]


> Sakipiel   (04.07.14 21:51)  

http://bit.ly/1pOVdkF


 
Sakipiel   (2014-07-05 06:36) [2]

мне не нужно ничего запрещать, мне нужно перезапустить


 
Sakipiel   (2014-07-05 06:57) [3]


procedure TSDIAppForm.LaunchDebugModeClick(Sender: TObject);
var
 param1:PChar;
begin
 param1 := "debugModeOn";
 //SendMessage(RuntimeHandle,WM_SYSCOMMAND,SC_CLOSE,0);
 //SendMessage(RuntimeHandle, WM_CLOSE, 0, 0);
 PostMessage(RuntimeHandle, WM_QUIT, 0, 0);
 RuntimeHandle := ShellExecute(self.Handle, nil, "RuntimeMode.exe", PChar(Param1), PWideChar(ExtractFilePath(Application.ExeName)), SW_SHOW);
end;


а так вообще озверел, закрывает self.Handle приложение вместо RuntimeHandle


 
Leonid Troyanovsky ©   (2014-07-05 08:09) [4]


> Sakipiel   (04.07.14 21:51)

> Есть приложение, которое я сам и написал, но запускаю его
> как екзешник из другого приложения, если же оно уже открыто,
>  то перед запуском я бы его хотел закрыть

У новозапущенного приложения нет ничего интересного, кроме,
возможно, комстроки. А уже поработавшему - есть чего терять.

Т.е., толковее было б просто передать старенькому новые параметры.
Например, RTFM SendMessage WM_COPYDATA.

>  SendMessage(RuntimeHandle
..
> RuntimeHandle := ShellExecute

Между вторым и первым нет никакой (практически) связи.
Окна находят путем, например, RTFM EnumWindows.

--
Regards, LVT.


 
Sakipiel   (2014-07-05 13:49) [5]

если я его даже закрыть не могу, то как ему что то передать уж тем более не понятно ) что за ужас.....неужели при запуске хендл нельзя получить на него, бред какой то...


 
turbouser ©   (2014-07-05 15:06) [6]


> Sakipiel   (05.07.14 06:36) [2]
>
> мне не нужно ничего запрещать, мне нужно перезапустить

вот это что?

>  если же оно уже открыто, то перед запуском я бы его хотел
> закрыть.

оно самое и есть. посмотри по ссылкам, там много хороших примеров.


 
Focus   (2014-07-05 15:08) [7]

Я необходимо открыть дверь, но если она уже открыта, то предварительно хочу ее закрыть, а уж только после этого открыть ...


 
Sakipiel   (2014-07-05 15:26) [8]

омг, делфи видели вообще? ) если запустить проект на отладку, то предыдущий сеанс закрывается и перекомпилируется и запускается заново, у меня тоже самое )


 
Focus   (2014-07-05 15:33) [9]

ОМГ, конечно, на сленге круто!
Но ты так и смог объяснить для чего тебе такое крутое извращение ...
читай:
Leonid Troyanovsky ©   (05.07.14 08:09) [4]


 
Sakipiel   (2014-07-05 15:52) [10]

Искать по имени плохой вариант, может быть запущено несколько приложений, из того же файла, но с разными параметрами, но закрыть мне нужно то, которое было запущено из второй программы, т.е. в режиме отладки. Если искать по имени - какое приложение я закрою? Не факт, что то что нужно.


 
Sakipiel   (2014-07-05 16:01) [11]

в том же делфи, я могу запустить свой проект откомпилированный нажав на exe файл и могу запустить его из делфи, но если в делфи я снова нажму запустить приложение, то он закроет именно то, которое было запущено из делфи, в этом суть. Меняется база данных, и мне нужно чтобы второе приложение пересоздалось по новым данным! Заморачиваться загрузкой новой базы в существующее приложение не хочу, и как я уже сказал, даже если и так делать то, суть та же: если я не могу отправить туда сообщение закрыться, то значит я вообще никакого сообщения отправить туда не могу!


 
Focus   (2014-07-05 16:04) [12]

> нажав на exe файл и могу запустить его из делфи

ты сейчас о ком печалишься, о себе или о пользователе твоей программы?


 
Плохиш ©   (2014-07-05 17:51) [13]


> Sakipiel   (05.07.14 15:26) [8]
>
> омг, делфи видели вообще?

Да не, куда уж нам до вас крютых.

PS. на пользуйся
dpr

var
   FHandle:  THandle;
   FBuffer:  Pointer;
   FAppHnd:  HWND;

begin
 FHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0,
                              4, "xxx");
 FBuffer := MapViewOfFile(FHandle, FILE_MAP_WRITE, 0, 0, 4);
 If HWND(FBuffer^) = 0 then
 begin
   HWND(FBuffer^) := Application.Handle;
   Application.Initialize;
   Application.CreateForm(TfrmMain, frmMain);
   Application.Run;
 end
 else
 begin
   FAppHnd := HWND(FBuffer^);
   Windows.SetForegroundWindow(FAppHnd);
   Windows.PostMessage(FAppHnd, msgFileRefresh, 0, 0);
 end;
 UnmapViewOfFile(FBuffer);
 CloseHandle(FHandle);
end.

TfrmMain

...
   procedure RunFileRefresh(var msg: TMsg; var Handled: Boolean); //message msgFileRefresh;
...
procedure TfrmMain.RunFileRefresh(var msg: TMsg; var Handled: Boolean);
begin
 if msg.message = msgFileRefresh then
 begin
   <--чей-то ваяем-->
 end;
end;
...
<--в FormCreate-->
procedure TfrmMain.FormCreate(Sender: TObject);
begin
 Application.OnMessage := RunFileRefresh;
...


 
turbouser ©   (2014-07-05 18:27) [14]


> Меняется база данных, и мне нужно чтобы второе приложение
> пересоздалось по новым данным!

что-то в консерватории не так, однако


 
Игорь Шевченко ©   (2014-07-07 10:27) [15]


> в том же делфи, я могу запустить свой проект откомпилированный
> нажав на exe файл и могу запустить его из делфи, но если
> в делфи я снова нажму запустить приложение, то он закроет
> именно то, которое было запущено из делфи, в этом суть


можно подробнее?


 
ВладОшин ©   (2014-07-07 17:43) [16]

как то делал, что на wm_user главному окну
// в первом параметре handle окна, во втором код подчинения (вычисляется от времени)
после этого подопытный слушался команд (message) от того окна и отчитывался на него как у него дела :)
естественно, все варианты команд предусмотрены должны быть

да, по сабжу - одна из команд предусматривала закрытие :)


 
sniknik ©   (2014-07-08 08:15) [17]

> если же оно уже открыто, то перед запуском я бы его хотел закрыть.
по идее должно быть наоборот... - если приложение открыто, и значит юзер в нем работает, то при нужде (пере инициализация) нужно закрыть это и запустить новое, с согласия юзера естественно. с этим проблем быть не должно, ничего искать, посылать не нужно.



Страницы: 1 вся ветка

Текущий архив: 2016.01.24;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.006 c
4-1275754881
akosh12345
2010-06-05 20:21
2016.01.24
Проблемы


15-1432299372
Дмитрий С
2015-05-22 15:56
2016.01.24
посоветуйте чтиво по postgresql


15-1432364202
Владимир Кладов
2015-05-23 09:56
2016.01.24
Астрономия


2-1404496296
Sakipiel
2014-07-04 21:51
2016.01.24
как закрыть окно?


15-1432582091
Pavelnk
2015-05-25 22:28
2016.01.24
Вот такое видео