Boa tarde, tenho 5 sistemas, 4 são sistemas que clientes usam dependendo de suas necessidades, 1 é o controle de clientes, o Formulário principal de ambos se chama frmPrincipal, e uso uma função do nosso amigo Churc, para executar o programa mesmo se já estiver aberto no Tray, (http://scriptbrasil.com.br/forum/index.php?showtopic=137378), ele não deixa abrir outro programa porque ele procura pelo nome frmPrincipal, se ve que já encontra aberto ele não abre nenhum otro.... o problema é que não posso renomear para frmPrincipal1, frmPrincipal2, pois há muitas coisas ligadas a esse formulário, e isso pode estragar tudo, ehehe, no entando segue o código de um dos programas, não lembro bem o nome da unit... acho que é o DPR:
program SIGI;
uses
Forms,
Windows,
Dialogs,
SysUtils,
Messages,
formtal in C:\blabla\form.pas,
..........................................,
.......................,
...................,
..........................;
{$R *.RES}
Var
HprevHist : HWND;
MutexHandle : THandle;
szParams: String = '';
procedure GetParams;
var
i: Integer;
begin
for i := 1 to ParamCount do
if (i = 1) then szParams := ParamStr(i) else
szParams := szParams + ' ' + ParamStr(i);
end;
function fromBackup: Boolean;
begin
Result := Pos('-reiniciar', LowerCase(szParams)) > 0;
end;
function OneInstanceAndRunning: Boolean;
begin
result := false;
if (MutexHandle <> 0) and (GetLastError = ERROR_ALREADY_EXISTS)
then
begin
GetParams;
if not fromBackup then
MessageDlg('O Programa já está em Execução nessa Maquina!', mtWarning,
[mbOK], 0);
result := true;
end;
end;
begin
GetParams;
MutexHandle := CreateMutex(nil, True, 'AdministraIgrejas');
if OneInstanceAndRunning and not (fromBackup) then
begin
hPrevInst := FindWindow('TFrmPrincipal', nil);
if hPrevInst <> 0 then
begin
SendMessage(hPrevInst, WM_SYSCOMMAND, SC_RESTORE, 0);
SendMessage(hPrevInst, WM_RESTFROMTRAY, 0, 0);
end;
CloseHandle(MutexHandle);
Halt;
end;
try
Application.Initialize;
Application.Title := 'AdministraIgrejas';
//frmTabelas := TfrmTabelas.Create(Application);
//frmTabelas.ShowModal;
//frmTabelas.Free;
frmAbertura := TfrmAbertura.Create(Application); // Cria o form de abertura
frmAbertura.Show;
frmAbertura.Update;
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.CreateForm(TdtmPrincipal, dtmPrincipal);
Application.CreateForm(TfrmSelAnoDiz, frmSelAnoDiz);
Application.CreateForm(TfrmSelMesAd, frmSelMesAd);
Application.CreateForm(TFrmPesqCaixa, FrmPesqCaixa);
Application.CreateForm(TFrmPesqBanco, FrmPesqBanco);
Application.CreateForm(TfrmSemConexao, frmSemConexao);
frmAbertura.Hide;
frmAbertura.Free;
Application.Run;
finally
if LongBool(MutexHandle) then
CloseHandle(MutexHandle);
end;
end.
Creio que o problema está bem naquela Linha hPrevInst := FindWindow('TFrmPrincipal', nil);, porem não sei como fazer de outra forma.....
Pergunta
Douglas Soares
Boa tarde, tenho 5 sistemas, 4 são sistemas que clientes usam dependendo de suas necessidades, 1 é o controle de clientes, o Formulário principal de ambos se chama frmPrincipal, e uso uma função do nosso amigo Churc, para executar o programa mesmo se já estiver aberto no Tray, (http://scriptbrasil.com.br/forum/index.php?showtopic=137378), ele não deixa abrir outro programa porque ele procura pelo nome frmPrincipal, se ve que já encontra aberto ele não abre nenhum otro.... o problema é que não posso renomear para frmPrincipal1, frmPrincipal2, pois há muitas coisas ligadas a esse formulário, e isso pode estragar tudo, ehehe, no entando segue o código de um dos programas, não lembro bem o nome da unit... acho que é o DPR:
Creio que o problema está bem naquela Linha hPrevInst := FindWindow('TFrmPrincipal', nil);, porem não sei como fazer de outra forma.....
alguma ajuda? :rolleyes:
Obrigado
Editado por Douglas_SoaresLink para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.