maudruidas Posted November 18, 2021 Report Share Posted November 18, 2021 Boa tarde, gostaria que alguém me explicasse como funciona o IsExeRunning(). Compilei meu sistema 2 vezes com nomes diferentes, porém ao abrir o sistema, mesmo com nomes diferentes ele diz que já está aberto. IF(IsExeRunning("SISC20.EXE")) MsgInfo("O Programa Já Está Aberto, Verifique na Barra de Tarefas do Windows ","Atenção") RETURN(NIL) ENDIF O outro que tento abrir chama SISPF.EXE, mas ele diz que já está aberto. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted November 18, 2021 Report Share Posted November 18, 2021 Se estiver compilando em Harbour, eu acho que a lógica é outra. Teste ai IF ISEXERUNNING( CFILENAME( HB_ARGV( 0 ) ) ) MsgInfo( "SISC20.EXE Já Está Rodando Nesta Máquina","SISC20.EXE") SHOWWINDOW( FINDWINDOW( 0, "SISC20" ), 9 ) SETFOREGROUNDWINDOW( FINDWINDOW( 0, "SISC20" ) ) LIBERA_TUDO() RETURN NIL ENDIF Quote Link to comment Share on other sites More sharing options...
kapiaba Posted November 18, 2021 Report Share Posted November 18, 2021 Assim, fica mais fácil de entender e sem mensagem, o uçuário nem percebe o que o antigiu, pois o .EXE "sobe" de novo no mesmo lugar. // \samples\ISEXERUN.PRG #Include "FiveWin.ch" STATIC oWnd FUNCTION Main() // LOCAL oWnd LOCAL cTitle := "This is a test" IF ISEXERUNNING( CFILENAME( HB_ARGV( 0 ) ) ) SHOWWINDOW( FINDWND( cTitle ), 9 ) SETFOREGROUNDWINDOW( FINDWND( cTitle ) ) RETURN NIL ENDIF DEFINE WINDOW oWnd TITLE "Prefix - " + cTitle + " - Postfix" ACTIVATE WINDOW oWnd RETURN NIL #define GW_HWNDFIRST 0 #define GW_HWNDLAST 1 #define GW_HWNDNEXT 2 #define GW_HWNDPREV 3 #define GW_OWNER 4 #define GW_CHILD 5 FUNCTION FINDWND( cTitle ) LOCAL hWnd := GETWINDOW( GETDESKTOPWINDOW(), GW_CHILD ) WHILE hWnd != 0 SYSREFRESH() IF Upper( cTitle ) $ Upper( GETWINDOWTEXT( hWnd ) ) RETURN( hWnd ) ENDIF hWnd = GETWINDOW( hWnd, GW_HWNDNEXT ) ENDDO RETURN NIL // FIN / END Regards, saludos. Quote Link to comment Share on other sites More sharing options...
maudruidas Posted November 19, 2021 Author Report Share Posted November 19, 2021 Bom dia, obrigado pela ajuda Kapiaba, porém ainda não deu certo. Fiz desta forma: IF ISEXERUNNING( CFILENAME( HB_ARGV( 0 ) ) ) MsgInfo("O Programa Já Está Aberto, Verifique na Barra de Tarefas do Windows ","Atenção") SHOWWINDOW( FINDWINDOW( 0, "SISC20" ), 9 ) SETFOREGROUNDWINDOW( FINDWINDOW( 0, "SISC20" ) ) RETURN(NIL) ENDIF mas quando chamo o outro programa SISCPF.EXE ele continua dando a mensagem que já está aberto. Uso: xHarbour 21.02 Quote Link to comment Share on other sites More sharing options...
maudruidas Posted November 19, 2021 Author Report Share Posted November 19, 2021 Deu certo kkk, depois analisando melhor que percebi que a busca da window era pelo ctitle : SHOWWINDOW( FINDWND( cTitle ), 9 ) SETFOREGROUNDWINDOW( FINDWND( cTitle ) ) e no meu caso não era SISC20 e sim a Razão Social do cliente. Obrigado mais uma vez Kapiaba. Quote Link to comment Share on other sites More sharing options...
Ladinilson Posted November 20, 2021 Report Share Posted November 20, 2021 Desculpe a minha segnolenta dúvida, mas em rede ou ambiente corporativo, o que seria "testar" se o windows encontra um mesmo executável já que no mesmo você pode definir acessos a operaçoes a subsistemas? Um simples bloqueio a operações não seria o suficiente já que o caso em questão o nome do executável ser diferente não implica a outro projeto? Quote Link to comment Share on other sites More sharing options...
rochinha Posted November 20, 2021 Report Share Posted November 20, 2021 Amiguinhos, Tente adapatar este trecho no prg principal. SOSFile := "c:\seusistema\" + alltrim(str(nSerialHD("C:")))+".sos" if file(SOSFile) fErase(SOSFile) // Tenta eliminar o arquivo de controle if fError() <> 0 // Se não conseguir... if ! MsgNoYes( "O sistema ja se encontra aberto. Veja o icone ao lado do relogio"+CRLF+CRLF+"Deseja abrir novamente?", "Multiplas instancias" ) quit endif endif endif SOSHandle := fCreate(SOSFile) // Cria o arquivo de controle SOSHandle := fOpen(SOSFile,1) // Abre travando o arquivo de controle Quote Link to comment Share on other sites More sharing options...
Ladinilson Posted November 20, 2021 Report Share Posted November 20, 2021 36 minutos atrás, rochinha disse: Amiguinhos, Tente adapatar este trecho no prg principal. SOSFile := "c:\seusistema\" + alltrim(str(nSerialHD("C:")))+".sos" if file(SOSFile) fErase(SOSFile) // Tenta eliminar o arquivo de controle if fError() <> 0 // Se não conseguir... if ! MsgNoYes( "O sistema ja se encontra aberto. Veja o icone ao lado do relogio"+CRLF+CRLF+"Deseja abrir novamente?", "Multiplas instancias" ) quit endif endif endif SOSHandle := fCreate(SOSFile) // Cria o arquivo de controle SOSHandle := fOpen(SOSFile,1) // Abre travando o arquivo de controle Teu café parece ser o mesmo que o meu mano kkk Quote Link to comment Share on other sites More sharing options...
kapiaba Posted November 20, 2021 Report Share Posted November 20, 2021 Oi? Num intindi Ladinilson? Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted November 20, 2021 Report Share Posted November 20, 2021 9 horas atrás, Ladinilson disse: Teu café parece ser o mesmo que o meu mano kkk O mesmo que o nosso. Só para complicar mais um pouco... // Para avisar ao servidor que aqui o aplicativo está aberto cLocal := gete('CLIENTNAME') ; cPref := "CLI:" if empty( cLocal ) cLocal := gete('COMPUTERNAME') ; cPref := "PC:" endif if empty( cLocal ) cLocal := gete('USERNAME') ; cPref := "USR:" endif cApelid := Alltrim(cFileNoExt(HB_ARGV(0)))+"_"+cLocal cFiSrv := cPasta+"\"+ALLTRIM(cApelid)+".tmp" // cFoldr := STRTRAN(UPPER(cPasta), "\DADOS", "\FOTOS") cFlXml := STRTRAN(UPPER(cPasta), "\DADOS", "\BKPXML") cFlRes := STRTRAN(UPPER(cPasta), "\DADOS", "\resp_nfe") cFiLoc := CurDrive()+":\"+CurDir()+"\"+ALLTRIM(cApelid)+".tmp" if file(cFiSrv) fErase(cFiSrv) // Tenta eliminar o arquivo de controle no servidor. if fError() <> 0 // Não excluiu. Sistema já aberto no servidor. fErase(cFiLoc) // Tenta eliminar o arquivo de controle localmente. if file(cFiLoc) // Não excluiu. Sistema já aberto aqui também. IF ! lReOpen GeneralUnlock() // Remover o bloqueio geral, só para garantir. SysRefresh() ; MsgWait("Sistema já aberto!","Atenção!...", 1) ELSE IF MsgNoYes("Sistema já aberto. Gostaria de reinicializar?","Sistema já aberto") cAtuInf := "@ECHO OFF"+CRLF+; "COLOR F1"+CRLF+; 'TASKKILL /IM '+Alltrim(cFileNoExt(HB_ARGV(0)))+'.EXE /F /FI "USERNAME eq '+gete('USERNAME')+'"'+CRLF+; 'TIMEOUT /T 2 /NOBREAK'+CRLF+; // Esperar 2 segundos ignorando pressionamento de teclas "START "+Alltrim(cFileNoExt(HB_ARGV(0)))+".EXE"+CRLF+; "EXIT" if file(".\reabrir.bat") ; ferase(".\reabrir.bat") ; endif arq2 := fcreate(".\reabrir.bat") fwrite(arq2, cAtuInf) fclose(arq2) GeneralUnlock() // Remover o bloqueio geral, só para garantir. WAITRUN( GetEnv( 'ComSpec' )+' /C START .\reabrir.bat"', 0 ) SysWait(10) // Precisa disso, senão o programa prossegue com a execução ENDIF ENDIF SETFOREGROUNDWINDOW( FINDWINDOW( 0, cFileNoExt(HB_ARGV(0))+" - Gestao Comercial" ) ) // Para evitar erro de codepage, deixar sem acento o titulo da janela principal PostQuitMessage( 0 ) QUIT ENDIF ENDIF ENDIF SRFhnd := fCreate(cFiSrv) // Cria o arquivo de controle no servidor SRFhnd := fOpen(cFiSrv,1) // Abre travando o arquivo de controle no servidor LOChnd := fCreate(cFiLoc) // Cria o arquivo de controle localmente LOChnd := fOpen(cFiLoc,1) // Abre travando o arquivo de controle localmente Quote Link to comment Share on other sites More sharing options...
kapiaba Posted November 20, 2021 Report Share Posted November 20, 2021 Jesus Ariston, qual o intuito disso? abs. Quote Link to comment Share on other sites More sharing options...
rochinha Posted November 20, 2021 Report Share Posted November 20, 2021 Amiguinhos, Café é o combustível do cérebro. kkkkkkkkk. Não dá pra começar a programar sem encher o tanque. A ansiedade em responder foi tanta que sobrou letra. Quote Link to comment Share on other sites More sharing options...
Ladinilson Posted November 22, 2021 Report Share Posted November 22, 2021 Em 20/11/2021 at 19:36, rochinha disse: Amiguinhos, Café é o combustível do cérebro. kkkkkkkkk. Não dá pra começar a programar sem encher o tanque. A ansiedade em responder foi tanta que sobrou letra. hehehehe, duas vezes por dia e extras e caneca porruda mano Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted November 23, 2021 Report Share Posted November 23, 2021 Em 20/11/2021 at 18:51, kapiaba disse: Jesus Ariston, qual o intuito disso? abs. É José Ariston O intuito dessa função é me informar se o EXE está aberto no PC local e/ou no servidor. Isso me ajuda em algumas decisões, tipo: Posso atualizar o programa? Posso reiniciar o servidor? Quote Link to comment Share on other sites More sharing options...
kapiaba Posted November 23, 2021 Report Share Posted November 23, 2021 2 horas atrás, Ariston Santos disse: É José Ariston O intuito dessa função é me informar se o EXE está aberto no PC local e/ou no servidor. Isso me ajuda em algumas decisões, tipo: Posso atualizar o programa? Posso reiniciar o servidor? kkkkkkkkkkkkk, blz. entendi. Mey loko, mas tá valendo. kkkkkk, abs. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.