Page 1 sur 1

Cerber

Publié : jeu. 16/mars/2017 23:39
par Zorro
Cerber est un prg de base pour montrer comment on peut filtrer
et choisir les prg qui peuvent etre ouvert sur votre Ordi

le prg commence par demander un mot de pass , pour eviter que n'importe qui puisse changer les regles
entrez "zorro"

ensuite l'interface s'affiche , vous aurez alors la liste des fenetres actuellement ouvertes sur votre Ordi
dans une ListIconGadget muni de cases a cocher

il suffit de cocher une ou plusieurs case des prg (ou fenetres) que vous ne voulez pas qu'ils soient en marche (ça va les arreter ..) ou ouverte (pour les fenetres)
bref, on creer les regles !

une fois la case "Activ" coché , le timer vérifiera toutes les 10 secondes si l'une des fenetres dont la case est cochée , est ouverte, si c'est le cas, Cerber, va la refermer

il peut s'agir d'une fenetre de navigateur, ou d'une fenetre pointant sur l'un de vos dossiers ...

si on reduit cerber , le fait de vouloir le reafficher, redemande le mot de pass


en l'etat, je ne sauve rien, donc si on quitte cerber, il faudrai bien sur re-cocher les fenetres qu'on ne veux pas voir actives
il suffirai de sauver les regles pour ensuite les retrouver au prochain lancement de cerber

de plus, je n'actualise pas la liste de applications ouvertes APRES le lancement de Cerber


c'est une base pour faire un programme qui pourrai empêcher un membre de la famille d'utiliser un jeux, ou une adresse internet précise
voir carrement une application

bref un Cerber de votre ordinateur

il demande a etre paufiné , je pense toutefois, que c'est une bonne base pour commencer

je n'ai pas ajouté de test pour relancer Cerber si celui-ci etait viré de la ram par un Ctrl+Alt+Del
mais ce serai relativement simple a ajouter :)

Image
le code :

Code : Tout sélectionner

;***********************************************
;Titre  :*Cerber
;Auteur  : ZORRO
;Date  :16/03/2017
;Heure  :16:21:04
;Version Purebasic :  PureBasic 5.50 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune 
;***********************************************

;{- Enumerations / DataSections
;{ Windows
Enumeration
		#Win
EndEnumeration
;}
;{ Gadgets
Enumeration
		#ListView_0
		#Text_1
		#Text_2
		#Text_3
		#Button_Ajout_Prg
		#Button_supr_prg
		#CheckBox_activ
		#Timer
EndEnumeration
;}
;{ Fonts
Enumeration
		#Font_Text_2
EndEnumeration
;}
Define.l Event
Global Activ,pass.s,Flag_reduc.i
;}

Declare openwindow_win()
Declare liste_window(liste_id)



; Verifie si on lance 2 fois Cerber , si c'est le cas, demande a nouveau le mot de passe
; et ne lance pas 2 fois Cerbert mais réactualise Cerber
#MUTEX_ALL_ACCESS = $1F0001
Application.s= "Cerber"

Hmutex = OpenMutex_( #MUTEX_ALL_ACCESS , #False ,Application)

If Hmutex=0
		;Si le mutex existe alors l'application est déjà lancée.
		;sinon on le crée
		Hmutex = CreateMutex_( #Null , #True , Application)
		If Hmutex=0
				;Fin du programme mutex non créer
				CloseHandle_(Hmutex)
				End
		EndIf
Else
		;On recherche l'application
		;pour la mettre au premier plan.
		pass.s=InputRequester( "info","Entrez le password","")
		if pass.s="zorro"
				Handle= FindWindow_( #Null , Application)
				ShowWindow_(Handle, #SW_HIDE )
				ShowWindow_(Handle, #SW_MINIMIZE )
				ShowWindow_(Handle, #SW_RESTORE )
		Endif
		End
EndIf






pass.s=InputRequester( "info","Entrez le password","")

OpenWindow_Win()
;;ListeProcessCourt(#ListView_0)
Liste_Window(#ListView_0)

;{- Event loop
Repeat

; on teste si on cherche  a activer la fenetre de Cerber
		if  GetWindowState(#win)=#PB_Window_Minimize
				Flag_reduc=#true
		Endif
		if GetWindowState(#win)=#PB_Window_Normal and Flag_reduc=#true				 ; on cherche a ouvrir la fenetre de Cerber	
				SetWindowState(#win,#PB_Window_Minimize)  ; on force a etre minimisé par defaut
				
				Flag_reduc=#False
				pass.s=InputRequester( "info","Entrez le password","") ; test le password
				if pass.s="zorro"
				SetWindowState(#win,#PB_Window_Normal) ; c'est le bon password, on active la fenetre pour pouvoir utiliser Cerber modifier ses parametres
				Endif
				
		Endif
		Event = WaitWindowEvent(12)
		Select Event
				; ///////////////////
		Case #PB_Event_Timer  ; chaque seconde		
				If EventTimer() = #Timer ; ok Timer On
						;Liste_Window(#ListView_0) ; on remplis la liste avec le nom des fenetres ouvertes
						Activ= GetGadgetState(#CheckBox_activ) ; on verifie si on a activé
						If Activ=#true ; si actif
								For i=0 to CountGadgetItems(#ListView_0) ; pour chaque ligne de la liste
										if GetGadgetItemState(#ListView_0,i)=#PB_ListIcon_Checked   ; le prg est coché !!
												
												Nom_appli.s=trim(GetGadgetItemText(#ListView_0, i) ); on recupere le nom de l'appli a bloquer
												hWinCalc = FindWindow_(#Null,Nom_appli.s) ; on regarde si le prg est present
												if hWinCalc ; Present ??
														SendMessage_(hWinCalc,#WM_SYSCOMMAND,#SC_CLOSE,0) ; ben on  le ferme 
												Endif
										Endif
								Next i								
						Endif
				Endif
		Case #PB_Event_Gadget
				Select EventGadget()
				Case #ListView_0
				Case #Text_1
				Case #Text_2
				Case #Text_3
				Case #CheckBox_activ 
				EndSelect
				; ////////////////////////
		Case #PB_Event_CloseWindow
				Select EventWindow()
				Case #Win
						CloseWindow(#Win)
						Break
				EndSelect
		EndSelect
Forever
Procedure OpenWindow_Win()
		If OpenWindow(#Win, 536, 143, 362, 494, "Cerber", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
				if pass.s="zorro"
						;ListViewGadget(#ListView_0, 35, 70, 290, 355, #PB_ListView_ClickSelect)
						ListIconGadget(#ListView_0, 35, 70, 290, 355, "Process", 355,#PB_ListIcon_CheckBoxes         )
						TextGadget(#Text_1, 40, 45, 155, 20, "Liste des Applis a bloquer")
						TextGadget(#Text_2, 120, 5, 110, 35, "Cerber")
						TextGadget(#Text_3, 240, 25, 80, 20, "V1.00  By Zorro")					
						CheckBoxGadget(#CheckBox_activ, 255, 45, 60, 20, "Active")
						; Gadget Fonts
						SetGadgetFont(#Text_2, LoadFont(#Font_Text_2, "Microsoft Sans Serif", 24, #PB_Font_Bold|#PB_Font_HighQuality))
						; Timer
						AddWindowTimer(#Win, #Timer, 10000) ; chaque seconde
				Endif
		EndIf
EndProcedure

;-*********************************



Procedure Liste_Window(liste_ID)
		ClearGadgetItems(liste_ID)
		hwnd.l = FindWindow_ ( 0, 0 )
		While hwnd <> 0
				If GetWindowLong_ (hwnd, #GWL_STYLE ) & #WS_VISIBLE = #WS_VISIBLE
						; If GetwindowLong_(Hwnd, #GWL_EXSTYLE) & #WS_EX_TOOLWINDOW <> #WS_EX_TOOLWINDOW
						txt.s = Space (256)
						GetWindowText_ (hwnd, txt, 256)
						If txt <> ""
								;   Debug txt
								AddGadgetItem(liste_ID, -1, txt)
						EndIf
						; EndIf
				EndIf
				hwnd = GetWindow_ (hwnd, #GW_HWNDNEXT )
		Wend
EndProcedure


;Epb
;}





Re: Cerber

Publié : ven. 17/mars/2017 6:35
par Micoute
Merveilleux, merci pour le partage

Re: Cerber

Publié : ven. 17/mars/2017 10:48
par Ar-S
J'avais utilisé ça pour une protection d'un logiciel de slideshow spécifique que j'avais fait pour un client.
Il s'occupait de fermer le taskmanager des que l'utilisateur l'appelait, et de bloquer les captures d'ecran.
Le tiens est un bon début pour de programme en tout cas. Merci pour le partage.

Note : Il faut que tu vires cerber de la liste sinon la protection va vite être outrepassée :D

Re: Cerber

Publié : ven. 17/mars/2017 11:06
par Zorro
Ar-S a écrit :Note : Il faut que tu vires cerber de la liste sinon la protection va vite être outrepassée :D
ben en principe seul l'administrateur du prg a acces aux autorisations
si le mec est assez con pour interdire le programme d'interdiction
là, je peux plus rien pour lui :lol:

Re: Cerber

Publié : sam. 18/mars/2017 13:43
par JohnJohnsonSHERMAN
Exellent :)

Ca me rapelle un utilitaire que j'avait fait, qui listait et loggait toutes les fenêtres ouvertes, avec possibilité de killer le processus associé ;) Je dois l'avoir encore quelquepart sur un vieux disque

Re: Cerber

Publié : sam. 18/mars/2017 16:21
par Ar-S
Petit correctif de ton post
un Endif² => Endif ;)

Re: Cerber

Publié : sam. 18/mars/2017 18:59
par Zorro
toujours le meme probleme de mon Starter :)

Re: Cerber

Publié : sam. 18/mars/2017 23:48
par ChaudEf
Très intéressant, merci pour le partage :D

Que veut tu dire par

Code : Tout sélectionner

ou une adresse internet précise

Re: Cerber

Publié : dim. 19/mars/2017 11:11
par Zorro
ben avant de lancer Cerber

ouvre une adresse url precise avec ton navigateur exemple: http://www.meteofrance.com/previsions-meteo-montagne/
la partie "Montagne" de meteo France ...
si c'est bien l'onglet Actif dans ton navigateur ,
en lançant cerber , tu aura la fenetre affichée dans la liste sous la forme :
Image

donc tu pourra faire fermer le navigateur seulement si cette adresse est affichée dedans et l'onglet actif

on peux tout aussi bien ajouter 2 boutons dans Cerber pour ajouter dans la liste a la main un lien vers
une adresse ou un prg local ...

je le ferai tres bientot... (pour le moment je suis sur autre chose ) qui n'a rien a voir (je telecharge des tuilles satellites
pour le decors de mon simulateur de Vol X-plane :) )

ps: en meme temps je me rends compte que mon systeme de fermeture d'applications est trop propre
pour le navigateur mozilla par exemple, avant de fermer un onglet, ça demande si on veux bien le faire ....

il faudrai passer par une autre façon de tuer le Process , qui ferme RADICALEMENT le prg ans avoir a passer
par une autorisation .... :)
enfin ici le but etait surtout de montrer qu'on peut detecter une application, pour éventuellement la fermer
(voir simplement la deplacer....en dehors de l'ecran , ça peut se faire aussi :) )

Re: Cerber

Publié : dim. 19/mars/2017 14:51
par Ar-S
L'idée serait de faire un second timer listant les process ouvert (ou fenêtres) et d'ajouter les éléments non présents dans la liste.
Je suis en train de faire ma version de cerber avec ton squelette ;), je l’appellerai Argus Protector :D

Re: Cerber

Publié : dim. 19/mars/2017 15:24
par Zorro
Ar-S a écrit :L'idée serait de faire un second timer listant les process ouvert (ou fenêtres) et d'ajouter les éléments non présents dans la liste.
Je suis en train de faire ma version de cerber avec ton squelette ;), je l’appellerai Argus Protector :D
oui c'etait bien l'idée de base (l'utilisation d'un autre timer pour la mise a jour :) )

Re: Cerber

Publié : dim. 19/mars/2017 15:33
par Ar-S
Pour Argus je prends un autre chemin, je m'oriente vers le nom de l'exe et non de la fenêtre. Je me suis rendu compte que je cherchais firefox mais que la fenêtre indiquait le nom de l'onglet en cours.. Ce qui n'est pas des plus intéressant pour bloquer l'appli.
Je pense aussi arrêter le Scan auto des process. L'utilisateur choisira ses exe via un explorateur. (ou permettre les 2 je me tâte encore).