Category: Blog

(Français) Récupérer les attributs d’un exécutable

(Français) Récupérer les attributs d’un exécutable

Certify a WinDev application in 6 steps).

Le résultat est mis ici sous forme de structure pour faciliter son accès.

STFileProperty est une Structure
	sInternalName						est une chaîne
	sOriginalFileName					est une chaîne
	nFileBuildPart						est un entier
	nFileMajorPart						est un entier
	nFileMinorPart						est un entier
	nFilePrivatePart					est un entier
	nProductBuildPart					est un entier
	nProductMajorPart					est un entier
	nProductMinorPart					est un entier
	nProductPrivatePart					est un entier
	sFileVersion						est une chaîne
	sFileDescription					est une chaîne
	sProduct						est une chaîne
	sProductVersion						est une chaîne
	sSpecialBuild						est une chaîne
	bDebug							est un booléen
	bPatch							est un booléen
	bPreRelease						est un booléen
	bSpecialBuild						est un booléen
	bPrivateBuild						est un booléen
	sPrivateBuild						est une chaîne
	sLanguage						est une chaîne
	sComments						est une chaîne
	sCompanyName						est une chaîne
	sProductName						est une chaîne
	sLegalCopyright						est une chaîne
	sLegalTrademarks					est une chaîne
	sCertificateSignerSubject				est une chaîne
	sCertificateSignerIssuer				est une chaîne
	sCertificateSignerSerialNumber				est une chaîne
	dhCertificateSignerNotBefore				est une DateHeure
	dhCertificateSignerNotAfter				est une DateHeure
	sCertificateSignerThumbprint				est une chaîne
	sCertificateTimeStamperSubject				est une chaîne
	sCertificateTimeStamperIssuer				est une chaîne
	sCertificateTimeStamperSerialNumber			est une chaîne
	dhCertificateTimeStamperNotBefore			est une DateHeure
	dhCertificateTimeStamperNotAfter			est une DateHeure
	sCertificateTimeStamperThumbprint			est une chaîne
	sCertificateStatus					est une chaîne
	sCertificateStatusMessage				est une chaîne
FIN
stUneInfo est un STFileProperty
sCheminFichier est une chaîne = //ICI VOTRE FICHIER
SI fFichierExiste(sCheminFichier) ALORS	//gestion par volume
	clMaConsole		est un cConsole
	sSuivant,sLigne		est une chaîne
	bTimeStamper		est un booléen
	sPowerShellCmd		est une chaîne ANSI	= "Powershell.exe -Command "
	sMaCommande		est une chaîne ANSI	= "Get-AuthenticodeSignature '"+sCheminFichier+"' | Format-List"
	clMaConsole.SetCmd(sPowerShellCmd + sMaCommande)
	clMaConsole.ExécuterCmd()
	sRésultat			est une chaîne ANSI = OemVersAnsi(clMaConsole.Sortie())
 
	POUR TOUTE CHAÎNE sLigne DE sRésultat SÉPARÉE PAR RC
		sLigne=SansEspace(sLigne)
		SI sLigne="TimeStamperCertificate : [Subject]" ALORS 
			bTimeStamper=Vrai;sSuivant="sCertificateTimeStamperSubject"
		SINON SI bTimeStamper ALORS
			SELON sLigne
				CAS "[Issuer]"			: sSuivant="sCertificateTimeStamperIssuer"
				CAS "[Serial Number]"		: sSuivant="sCertificateTimeStamperSerialNumber"
				CAS "[Not Before]"		: sSuivant="dhCertificateTimeStamperNotBefore"
				CAS "[Not After]"		: sSuivant="dhCertificateTimeStamperNotAfter"
				CAS "[Thumbprint]"		: sSuivant="sCertificateTimeStamperThumbprint"	
				AUTRE CAS
					SELON SansEspace(ExtraitChaîne(sLigne,1,":"))
						CAS "Status"						: stUneInfo.sCertificateStatus 			= SansEspace(ExtraitChaîne(sLigne,2,":"))
						CAS "StatusMessage"					: stUneInfo.sCertificateStatusMessage 	= SansEspace(ExtraitChaîne(sLigne,2,":"))
						AUTRE CAS
							SI sLigne~="" ALORS 
								sSuivant=""
							SINON SI sSuivant>"" ALORS
								SI sSuivant DANS ("dhCertificateTimeStamperNotBefore","dhCertificateTimeStamperNotAfter") ALORS
									{"stUneInfo."+sSuivant,indVariable}=ChaîneVersDate(Gauche(sLigne,10),"AAAA-MM-JJ")+ChaîneVersHeure(Milieu(sLigne,12,8),"HH:MM:SS")
								SINON
									{"stUneInfo."+sSuivant,indVariable}+=sLigne
								FIN
							FIN
					FIN			
			FIN
		SINON
			SELON sLigne
				CAS "SignerCertificate      : [Subject]"	: sSuivant="sCertificateSignerSubject"
				CAS "[Issuer]"					: sSuivant="sCertificateSignerIssuer"	
				CAS "[Serial Number]"				: sSuivant="sCertificateSignerSerialNumber"
				CAS "[Not Before]"				: sSuivant="dhCertificateSignerNotBefore"
				CAS "[Not After]"				: sSuivant="dhCertificateSignerNotAfter"
				CAS "[Thumbprint]"				: sSuivant="sCertificateSignerThumbprint"
				AUTRE CAS
					SI sLigne~="" ALORS 
						sSuivant=""
					SINON SI sSuivant>"" ALORS
						SI sSuivant DANS ("dhCertificateSignerNotBefore","dhCertificateSignerNotAfter") ALORS
							{"stUneInfo."+sSuivant,indVariable}=ChaîneVersDate(Gauche(sLigne,10),"AAAA-MM-JJ")+ChaîneVersHeure(Milieu(sLigne,12,8),"HH:MM:SS")
						SINON
							{"stUneInfo."+sSuivant,indVariable}+=sLigne
						FIN
					FIN
			FIN
		FIN
 
	FIN
 
	sMaCommande		= "Get-childitem '"+sCheminFichier+"' | % {$_.VersionInfo} | Select *"
	clMaConsole.SetCmd(sPowerShellCmd + sMaCommande)
	clMaConsole.ExécuterCmd()
	sRésultat		= OemVersAnsi(clMaConsole.Sortie())
	sSuivant		= ""
	POUR TOUTE CHAÎNE sLigne DE sRésultat SÉPARÉE PAR RC
		sLigne=SansEspace(sLigne)
		SI sLigne[[1]]>"" ALORS
			SELON SansEspace(ExtraitChaîne(sLigne,1,":"))
				CAS "Comments"					: sSuivant="scomments"
				CAS "CompanyName"				: sSuivant="sCompanyName"
				CAS "FileDescription"				: sSuivant="sFileDescription"
				CAS "FileBuildPart"				: sSuivant="nFileBuildPart"
				CAS "FileMajorPart"				: sSuivant="nFileMajorPart"
				CAS "FileMinorPart"				: sSuivant="nFileMajorPart"
				CAS "FilePrivatePart"				: sSuivant="nFilePrivatePart"
				CAS "FileVersion"				: sSuivant="sFileVersion"
				CAS "InternalName"				: sSuivant="sInternalName"
				CAS "IsDebug"					: sSuivant="bDebug"
				CAS "IsPatched"					: sSuivant="bPatch"
				CAS "IsPrivateBuild"				: sSuivant="bPrivateBuild"
				CAS "IsPreRelease"				: sSuivant="bPreRelease"
				CAS "IsSpecialBuild"				: sSuivant="bSpecialBuild"
				CAS "Language"					: sSuivant="sLanguage"
				CAS "LegalCopyright"				: sSuivant="sLegalCopyright"
				CAS "LegalTrademarks"				: sSuivant="sLegalTrademarks"
				CAS "OriginalFilename"				: sSuivant="sOriginalFilename"
				CAS "PrivateBuild"				: sSuivant="sPrivateBuild"
				CAS "ProductBuildPart"				: sSuivant="nProductBuildPart"
				CAS "ProductMajorPart"				: sSuivant="nProductMajorPart"
				CAS "ProductMinorPart"				: sSuivant="nProductMinorPart"
				CAS "ProductName"				: sSuivant="sProductName"
				CAS "ProductPrivatePart"			: sSuivant="nProductPrivatePart"
				CAS "ProductVersion"				: sSuivant="sProductVersion"
				CAS "SpecialBuild"				: sSuivant="sSpecialBuild"
				AUTRES CAS					: sSuivant=""
			FIN
			SI PAS sLigne~="" _ET_ sSuivant>"" ALORS	
				{"stUneInfo."+sSuivant,indVariable}+=(sSuivant[[1]]="b" ? SansEspace(ExtraitChaîne(sLigne,2,":"))="True" SINON SansEspace(ExtraitChaîne(sLigne,2,":")))
			SINON
				sSuivant=""
			FIN
		FIN
	FIN
 
FIN
(Français) Assistant de sélection de l’heure

(Français) Assistant de sélection de l’heure

Sorry, this entry is only available in French. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

Dans WinDev, il y a une option, sur les champs “date”, pour ajouter un “bouton” calendrier à droite permettant ainsi de choisir la date facilement. Par contre, aucune option n’a été prévue pour choisir une heure à part dans une combo pré-remplie. On peut faire mieux ! Continue reading “(Français) Assistant de sélection de l’heure”

(Français) Animation de tuile

(Français) Animation de tuile

Sorry, this entry is only available in French. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

Sur le tableau de bord de l’éditeur de WinDev s’affiche une série de tuiles, dont celle du projet, de l’analyse, du GDS, du code, … Il y a quelques versions de cela, ces tuiles étaient animées par un mouvement suivant la diagonale. Comment donner cet effet à vos tuiles ? Continue reading “(Français) Animation de tuile”

(Français) URLEncode

(Français) URLEncode

Sorry, this entry is only available in French. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

La fonction URLEncode, disponible au moins depuis la version 12, encode les caractères ASCII afin qu’ils soit correctement reconnus dans une URL.

Depuis la version 17, WinDev propose les projets nativement en Unicode. Par contre, la fonction URLEncode ne gère pas l’Unicode. Il faut attendre la version 22 pour cela. Continue reading “(Français) URLEncode”

(Français) Liste de mots + phonétique en français

(Français) Liste de mots + phonétique en français

Sorry, this entry is only available in French. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

Cet article vous propose rien de moins qu’une liste de mots de plus de 330.000 mots français, avec leur pluriel et leur traduction phonétique. Continue reading “(Français) Liste de mots + phonétique en français”

(Français) Liste de prénoms

(Français) Liste de prénoms

Sorry, this entry is only available in French. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

Que ce soit pour alimenter une table de contacts (pour des tests) ou pour distinguer nom et prénom dans une colonne unique, voici une liste de plus de 16627 prénoms qui vous permettent de faire d’envisager ce type de traitement. Continue reading “(Français) Liste de prénoms”

(Français) M4V + M4A

(Français) M4V + M4A

Sorry, this entry is only available in French. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

Ces deux extensions de fichiers, m4v pour vidéo MPEG4 et m4a pour audio MPEG4, sont populaires. Voici un moyen simple de les remettre ensemble dans un seul fichier mp4 qui contiendra alors audio+vidéo. Continue reading “(Français) M4V + M4A”