Как закрыть определенное окно при закрытии программы?

Темный13

из проекта открываю другую программку с MutexName - 'GeneralBase'и при закрытии этого проекта хочу закрыть ранее открытое окно другой программкиprocedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction);var MutexHandle : THandle; MutexName : PChar;begin MutexName := 'GeneralBase'; MutexHandle := OpenMutex(MUTEX_ALL_ACCESS, false, MutexName); if MutexHandle <> 0 then CloseHandle(MutexHandle);end;но закрываться не хочет...... че добавить?
12 ответов

Темный13

PostMessage(ХендлЭтогоОкна,WM_CLOSE,0,0)


Темный13

PostMessage(ХендлЭтогоОкна,WM_CLOSE,0,0)
неа, эта зараза не хочет закрываться!!!!


Темный13

Думаю это ты его не хочешь закрывать. Судя по отсутствию вопроса "как узнать хендл окна" и той фигне что в первоначальном сообщении написана.


Темный13

Думаю это ты его не хочешь закрывать. Судя по отсутствию вопроса "как узнать хендл окна" и той фигне что в первоначальном сообщении написана.
хэндл окна я знаю!!!


Темный13

хэндл окна я знаю!!!
Если таки не закрывается, возможно, оно что-то в этот момент делает, не обрабатывая очередь сообщений?


Темный13

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


Темный13

Если окно в состоянии обрабатывать сообщения (а если ты специально не затыкал или не "загружал" приложение-владельца окна, например, бесконечным циклом, то так и есть), топри посылке WM_CLOSE этому окну оно закроется. Покажи код, где ты получаешь и хранишь Handle того окна, которое хочешь закрыть.


Темный13

var MutexHandle : THandle;const MutexName = 'Documents';begin MutexHandle := OpenMutex(MUTEX_ALL_ACCESS, false, MutexName); if MutexHandle <> 0 then begin CloseHandle(MutexHandle); halt; end; MutexHandle := CreateMutex(nil, false, MutexName);Application.Initialize; Application.CreateForm(TFormMain, FormMain); Application.CreateForm(TFormDocs, FormDocs); Application.Run;CloseHandle(MutexHandle);end.Это я открываю прогу, которую надо будет закрыть


Темный13

Молодец.Только где тут хэндл окна?


Темный13

Молодец.Только где тут хэндл окна?
MutexHandle ???или нет?


Темный13

Ты вообще читал (и внимательно?), что такое "мьютекс", как он создаётся, для чего нужен, или просто код откуда-то скопировал?Handle используется не только для "окон".


Темный13

да, попал в точку.... скопировал и вставил )))H:HWND;begin h:=FindWindow(nil, PChar('GeneralBase')); If h<>0 then SendMessage(h, wm_Close,0, 0);заработало!!!