Форум: "Начинающим";
Текущий архив: 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