PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → Tcnicas de como evitar que o programa/serviço seja aberto mais de uma vez
Tcnicas de como evitar que o programa/serviço seja aberto mais de uma vez
Débuté par Boller, 11 mai 2022 18:00 - 2 réponses
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 11 mai 2022 - 18:00
IF ExeRunning(CompleteDir(fExeDir()) + "Wx.exe") > 1 THEN
InfoWithTimeout(500,"O Wx já está em execução.")
EndProgram()
END

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 11 mai 2022 - 18:10
PROCEDURE Processus_ChangePriorite(LOCAL nPriorité is int)

nIndiceProcessus is int


// Récupère l'indice du processus
nIndiceProcessus = Processus_DonneIndice()

// Change la priorité du processus
ExePriority(TH_Liste[nIndiceProcessus], nPriorité)

// Mise à jour des informations
ExecuteProcess(TH_Liste, trtSelection)

RESULT nIndiceProcessus




PROCEDURE Processus_DonneIndice()

nIndice is int


// Si la ligne courante n'a aucun ID de processus indiqué, il s'agit d'une dépendance
IF COL_ID[TH_Liste] = 0 THEN

// Récupère l'indice du parent qui correspond à l'indice du processus
nIndice = TableGiveParent(TH_Liste, TH_Liste)

ELSE

// Mémorise l'indice courante comme indice du processus
nIndice = TH_Liste

END

// Renvoie l'indice du processus
RESULT nIndice




PROCEDURE Processus_DonnePID()

sModèle is string = [
Informations sur le processus courant :
PID : %1
PID Parent : %2
TID : %3
]

ok is boolean = True

// Affiche les informations du processus courant
InfoBuild(sModèle, ExeGetPID(exePID), ExeGetPID(exeParentPID), ExeGetPID(exeTID))

RESULT ok



PROCEDURE Processus_Info()

nIndiceProcessus is int
sCheminProcessus is string

// Contrôle qu'un processus soit sélectionné
IF TH_Liste = -1 THEN
// Message d'erreur
Error("Vous n'avez sélectionné aucun processus.")
RETURN
END

// Récupère l'indice du processus
nIndiceProcessus = Processus_DonneIndice()
sCheminProcessus = TH_Liste[nIndiceProcessus].COL_REPERTOIRE+["\"]+TH_Liste[nIndiceProcessus].COL_NOM

sModèle is string = [
Copyright : %1
Description : %2
Mode : %3
Nom : %4
Répertoire : %5
Version : %6
Version (format standard Windows) : %7
Société : %8
]

InfoBuild(sModèle,
ExeInfo(exeCopyright, sCheminProcessus),
ExeInfo(exeDescription, sCheminProcessus),
ExeInfo(exeMode, sCheminProcessus),
ExeInfo(exeName, sCheminProcessus),
ExeInfo(exeDirectory, sCheminProcessus),
ExeInfo(exeVersion, sCheminProcessus),
ExeInfo(exeVersionWindowsFormat, sCheminProcessus),
ExeInfo(exeCompany, sCheminProcessus))




PROCEDURE Processus_Kill(WxProgramPID)

ok is boolean

ok = ExeTerminate(WxProgramPID)

ToastDisplay("Programas finalizados!", toastShort, vaMiddle, haCenter,RGB(255,0,0))

RESULT ok




PROCEDURE Processus_Lancé()

nIndiceProcessus is int
sMessage is string

// Récupère l'indice du processus
nIndiceProcessus = Processus_DonneIndice()

// Renvoie le nom d'occurrence du processus selon son PID, son nom et son chemin complet
sMessage = StringBuild("L'application de PID ""%1"" est-il en exécution : %2", TH_Liste.COL_ID[nIndiceProcessus], ExeRunning(TH_Liste.COL_ID[nIndiceProcessus]) ? "OUI" ELSE "NON")
sMessage += CR + StringBuild("L'exécutable ""%1"" est-il en exécution : %2 exécution(s).", TH_Liste.COL_NOM[nIndiceProcessus], ExeRunning(TH_Liste.COL_NOM[nIndiceProcessus]))
sMessage += CR + StringBuild("L'exécutable ""%1"" est-il en exécution : %2 exécution(s).", TH_Liste.COL_REPERTOIRE[nIndiceProcessus]+TH_Liste.COL_NOM[nIndiceProcessus], ExeRunning(TH_Liste.COL_REPERTOIRE[nIndiceProcessus]+TH_Liste.COL_NOM[nIndiceProcessus]))


// Mise à jour des informations
Info(sMessage)




PROCEDURE Processus_ListeDLL()

nIndiceProcessus is int


// Contrôle qu'un processus soit sélectionné
IF TH_Liste = -1 THEN
// Message d'erreur
Error("Vous n'avez sélectionné aucun processus.")
RETURN
END

// Récupère l'indice du processus
nIndiceProcessus = Processus_DonneIndice()


Info("Liste des DLL :",ExeListDLL(TH_Liste.COL_ID[nIndiceProcessus]))





PROCEDURE Processus_Termine()

nIndiceProcessus is int

// Contrôle qu'un processus soit sélectionné
IF TH_Liste = -1 THEN
// Message d'erreur
Error("Vous n'avez sélectionné aucun processus.")
RETURN
END

// Récupère l'indice du processus
nIndiceProcessus = Processus_DonneIndice()

Acao is string = COL_ID[nIndiceProcessus]

// Termine l'application
IF ExeTerminate(COL_ID[nIndiceProcessus]) THEN

ToastDisplay("Application terminée", toastShort, vaMiddle, haCenter,RGB(255,0,0))
// Si l'application a bien été terminée, supprime la ligne correspondante
TableDelete(TH_Liste, nIndiceProcessus)

ELSE

// Impossible d'arrêter le processus.
Error("Impossible de terminer ce processus", ErrorInfo(errMessage))

END


FONTES:
https://repository.windev.com/resource.awp…

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Posté le 13 septembre 2022 - 17:40
Wsge_Programa is ANSI string = "DEC - Sistema de Faturamento"
Wsge_retdll is int = 0
wsge_retdll = CallDLL32("USER32","FindWindowA",Null,Wsge_Programa)
if wsge_retdll > 0 // ja esta carregado o programa THEN
EndProgram("Sistema Nao esta Configurado para ser executado 2 vezes na mesma maquina")
end