Como posso fazer a segunda instância do meu programa passar o controle de volta para a primeira instância?
Eu criei um aplicativo com o Delphi XE3. Meu aplicativo tem um trayicon (eu uso o TCoolTrayIcon para isso); portanto, quando o usuário minimiza, não há um ícone na barra de tarefas, mas apenas no trayicon.
Para evitar mais de uma instância do meu aplicativo, eu uso este código:
procedure CreateMutexes(const MutexName: String);
const
SECURITY_DESCRIPTOR_REVISION = 1;
var
SecurityDesc: TSecurityDescriptor;
SecurityAttr: TSecurityAttributes;
MutexHandle: THandle;
begin
InitializeSecurityDescriptor(@SecurityDesc, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(@SecurityDesc, True, nil, False);
SecurityAttr.nLength := SizeOf(SecurityAttr);
SecurityAttr.lpSecurityDescriptor := @SecurityDesc;
SecurityAttr.bInheritHandle := False;
MutexHandle := CreateMutex(@SecurityAttr, False, PChar(MutexName));
if MutexHandle <> 0 then
begin
if GetLastError = ERROR_ALREADY_EXISTS then
begin
MessageBox(0, 'You cannot start more than one instance of ContLab.'
+ #13#10 + 'Use the instance has already started.',
'ContLab', mb_IconHand);
CloseHandle(MutexHandle);
Halt;
end
end;
CreateMutex(@SecurityAttr, False, PChar('Global\' + MutexName));
end;
Dessa maneira, quando o usuário inicia o aplicativo duas vezes, ele recebe uma mensagem de erro e a segunda instância é encerrada.
Agora, eu gostaria de não mostrar a mensagem de erro, mas abrir a forma principal da primeira instância do aplicativo e encerrar a segunda instância.
É possível?