Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2016.01.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.002 c
15-1432556013
Jeer
2015-05-25 15:13
2016.01.24
Занятно:


15-1432380919
Pavelnk
2015-05-23 14:35
2016.01.24
RAD 2010 конфликтует с виндой


11-1262316863
Dimon1982
2010-01-01 06:34
2016.01.24
Как создать иконку из Bitmap (для SysTray).


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


15-1432503004
Юрий
2015-05-25 00:30
2016.01.24
С днем рождения ! 25 мая 2015 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский