FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Tout est tranquille
par Jean Claude Ven 22 Sep 2017 - 21:41

» Texte en gif animé
par JL35 Ven 22 Sep 2017 - 13:29

» BasicEditor
par Yannick Mer 20 Sep 2017 - 17:17

» Simuler l’appui d'une touche ou combinaison de touches.
par pascal10000 Lun 18 Sep 2017 - 19:30

» Utilisation de HVIEWER pour afficher des images
par papydall Lun 18 Sep 2017 - 17:43

» Panoramic et les gifs animés.
par papydall Lun 18 Sep 2017 - 16:32

» recover source
par pascal10000 Dim 17 Sep 2017 - 14:21

» Recent dans vos menu
par Jean Claude Sam 16 Sep 2017 - 11:41

» Comment centrer un texte 3D.
par pascal10000 Ven 15 Sep 2017 - 20:20

» Carte interface 16 entrées et 16 sorties
par Jicehel Ven 15 Sep 2017 - 16:30

» Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT
par pascal10000 Ven 15 Sep 2017 - 16:20

» Compilateur FBPano
par jean_debord Ven 15 Sep 2017 - 9:59

» 1 (en analyse): 3D_TARGET_IS ne fonctionne pas sur 3D_TEXT
par Jack Jeu 14 Sep 2017 - 19:52

» Problème avec la 3D.
par Jack Jeu 14 Sep 2017 - 18:06

» Test de la 3D.
par mindstorm Mer 13 Sep 2017 - 19:45

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

Partagez | 
 

 V3.13 du 10/07/2014 - gestion des ressources

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: V3.13 du 10/07/2014 - gestion des ressources   Ven 11 Juil 2014 - 2:56

Nouvelle version:
KGF.dll V3.13 du 10/07/2014

Nouveauté:
un jeu de 8 fonctions pour gérer les ressources dans un fichier en format PE (*.EXE et *.DLL)

Modules modifiés:
KGF.dll
KGF.chm
KGF.doc
KGF.pdf


La doc et les sources sont à jour. Ces fonctions sont documentées dans la rubrique Gestion des ressources, tout à la fin de la liste des rubriques dans le fichier d'aide.

Ceci représente un gros morceau, et c'est fonctionnellement assez puissant. Avec cela, on peut ajouter, remplacer ou supprimer des ressources pour un programme Panoramic (mais pas que...). Ces ressources, dans cette conception, sont des fichiers dont le contenu est copié dans le fichier visé, sous forme de ressource Windows.

Ceci permet de créer des installateurs en un seul fichier, en y incluant tous les modules à distribuer, y compris des fichiers binaires, des fichiers EXE, DLL, ZIP, DOC etc. N'importe quoi qui soit sous forme de fichier. On peut les extraire dans un fichier du même nom que celui d'origine (celui-ci sera mémorisé !) ou sous un autre nom. On peut tester l'existence d'une ressource, la remplacer par une autre ou la supprimer. On peut aussi récupérer les noms de toutes les ressources présentes dans le fichier, ainsi que les ressources spécifiques à un type de ressource donné.

Cela peut aussi servir pour un jeu, par exemple, qui peut embarquer tous ses modules spécifiques, comme des objets 3D, des mesh, des musiques, des textures, des fichiers de configuration etc. Contrairement à la notion d'application de Panoramic, on peut ici utiliser n'importe quel fichier, texte, image de toutes sortes, fichiers binaires etc. Aucune limite.

Seule contrainte: on ne peut pas modifier le fichier EXE ou DLL du programme lui-même, celui qui est en cours. Mais on peut le lire et extraire les ressources. Avec les fonctions présentes, il est facile d'écrire un petit programme Panoramic qui ajoute les ressources nécessaires à un EXE écrit en Panoramic, de sorte que celui-ci puisse ensuite à s'en servir, à l'aide également de ces fonctions.

Juste un petit rappel de ce que sont les ressources Windows. Une ressource est une portion de données quelconques, qui est référencée dans Windows par un type de ressource et un nom de ressource. Ces deux informations forment l'identification unique d'une ressource. Normalement, l'ensemble des ressources sont copiées dans l'exécutable lors de sa création, à partir d'un fichier *.RES qui doit au préalable être compilé à partir d'un fichier *.RC. Mais des API Windows permettent de modifier cela dynamiquement, et c'est ce que je rends accessible ici.

Mise en garde importante:
Les ressources sont une partie vitale pour n'importe quel programme. Leur modification ou suppression inconsidérées peuvent empêcher le programme de fonctionner, voire même conduire à des plantages sévères. C'est pourquoi je conseille fortement d'utiliser systématiquement des noms des types de ressources inconnus de Windows, par exemple PANORAMIC_RESSOURCE_1 ou similaire. Et toutes les ressources chargées par ces fonctions doivent se trouver sous un de ces types privatifs.

On peut créer autant de types de ressources que nécessaire. Et chaque type peut contenir un nombre quelconque de ressources. Et afin de mieux gérer ces ressources, mes routines créent autiomatiquement une ressource spécifique pour chaque type: c'est une ressource indexe du nom de !INDEX_xxxxxx est le nom du type correspondant. Et cette ressource indexe contient une liste en format texte dont chaque ligne décrit une ressource créée pour ce type de ressources, selon le format
NomDeRessource="X:\...\...\fichier_de_ressource.ext"
Une des nouvelles fonctions permet de retourner le contenu de cette ressource indexe pour un type de ressources donné. On a ainsi, pour chaque ressource, le nom du fichier et son type.

Et pour finir, un petit programme Panoramic qui peut servir de gestionnaire de ressources:
Code:
' gextion_ressources.bas

label ouvrir, sel3, sel4, click7, click12
label click15, click16, click17, click18, click20

dim res%, f$, s$, t$, n$, r$

full_space 0
caption 0,"Gestion des ressources"

button 1 : top 1,10 : left 1,10 : caption 1,"Ouvrir"
  on_click 1,ouvrir
open_dialog 2
alpha 8 : top 8,10 : left 8,1000 : caption 8,"Toutes les ressources dans fichier EXE/DLL:"
list 3 : top 3,30 : left 3,1000 : width 3,250 : height 3,500
  on_click 3,sel3
alpha 9 : top 9,10 : left 9,740 : caption 9,"Indexe de type de ressource actuel:"
list 4 : top 4,30 : left 4,740 : width 4,250 : height 4,500
  on_click 4,sel4
  
alpha 5 : top 5,70 : left 5,10 : caption 5,"Type de ressource:"
edit 6 : top 6,70 : left 6,130 : width 6,150
button 7 : top 7,70 : left 7,290 : width 7,150
  caption 7,"Indexe de ce type" : on_click 7,click7

alpha 10 : top 10,100 : left 10,10 : caption 10,"Nom de ressource:"
edit 11 : top 11,100 : left 11,130 : width 11,150
button 12 : top 12,100 : left 12,290 : width 12,150
  caption 12,"Fichier de la ressource" : on_click 12,click12
edit 13 : top 13,130 : left 13,10 : width 13,700
  inactive 13 : font_bold 13
  
button 15 : top 15,180 : left 15,10 : width 15,150
  caption 15,"Ajouter fichier ressource" : on_click 15,click15
button 16 : top 16,180 : left 16,170 : width 16,150
  caption 16,"Remplacer fichier ressource" : on_click 16,click16
button 17 : top 17,180 : left 17,330 : width 17,150
  caption 17,"Supprimer fichier ressource" : on_click 17,click17
button 18 : top 18,180 : left 18,490 : width 18,150
  caption 18,"Tester existence de ressource" : on_click 18,click18
edit 19 : top 19,210 : left 19,10 : width 19,700
  inactive 19 : font_bold 19

button 20 : top 20,260 : left 20,240 : width 20,150
  caption 20,"Extraire ressource dans fichier" : on_click 20,click20
edit 21 : top 21,290 : left 21,10 : width 21,700
  inactive 21 : font_bold 21
save_dialog 22


dll_on "KGF.dll"
  
end

' ***** ouvrir un fichier EXE/DLL
ouvrir:
  filter 2,"Fichiers exécutables|*.exe;*.dll"
  f$ = file_name$(2)
  text 6,""
  clear 4
  if f$="_"
    return
  end_if
  res% = dll_call2("GetListOfResources",handle(3),adr(f$))
  return
  
' ***** sélectionner un type de ressource
sel3:
  s$ = item_index$(3)
  text 6,""
  clear 4
  if left$(s$,1)=" " then return
  if instr(s$,"Resource Number")=1 then return
  res% = dll_call3("GetIndexOfResourceType",handle(4),adr(f$),adr(s$))
  text 6,s$
  return
  
' ***** sélectionner une resource
sel4:
  s$ = item_index$(4)
  text 11,""
  s$ = left$(s$,instr(s$,"=")-1)
  text 11,s$
  return
  
' ***** charger l'indexe du type de ressource choisi
click7:
  clear 4
  s$ = upper$(text$(6))
  if s$="" then return
  if left$(s$,1)="!" then s$ = mid$(s$,2,len(s$))
  if s$="" then return
  text 6,s$
  res% = dll_call3("GetIndexOfResourceType",handle(4),adr(f$),adr(s$))
  return
  
' **==* charger le contenu des données de la ligne indexe de la ressource choisie
click12:
  s$ = string$(255," ")
  t$ = text$(6)
  n$ = text$(11)
  res% = dll_call4("GetResourceIndexItemData",adr(f$),adr(t$),adr(n$),adr(s$))
  s$ = trim$(s$)
  text 13,s$
  return
  
' ***** ajouter une nouvelle ressource
click15:
  filter 2,"Tous fichiers|*.*"
  Text 19,""
  r$ = file_name$(2)
  if r$="_" then return
  text 19,r$
  t$ = text$(6)
  n$ = text$(11)
  res% = dll_call4("AddNewResource",adr(f$),adr(r$),adr(t$),adr(n$))
  ' actualiser la liste des ressources
  res% = dll_call2("GetListOfResources",handle(3),adr(f$))
  clear 4
  text 6,""
  text 11,""
  text 13,""
  return
  
' ***** remplacer une ressource
click16:
  filter 2,"Tous fichiers|*.*"
  Text 19,""
  r$ = file_name$(2)
  if r$="_" then return
  text 19,r$
  t$ = text$(6)
  n$ = text$(11)
  res% = dll_call4("ReplaceExistingResource",adr(f$),adr(r$),adr(t$),adr(n$))
  return

' ***** supprimer une ressource
click17:
  t$ = text$(6)
  if t$="" then return
  n$ = text$(11)
  if n$="" then return
  res% = dll_call3("DeleteExistingResource",adr(f$),adr(t$),adr(n$))
  ' actualiser la liste des ressources
  res% = dll_call2("GetListOfResources",handle(3),adr(f$))
  clear 4
  text 6,""
  text 11,""
  text 13,""
  return

' ***** tester si une ressource existe
click18:
  t$ = text$(6)
  if t$="" then return
  n$ = text$(11)
  if n$="" then return
  res% = dll_call3("FindExistingResource",adr(f$),adr(t$),adr(n$))
  if res%=0
    message "La ressource n'existe pas"
  else
    message "La ressource existe"
  end_if
  return
  
' ***** extraire une ressource existante dans un fichier
click20:
  text 21,""
  t$ = text$(6)
  if t$="" then return
  n$ = text$(11)
  if n$="" then return
  r$ = file_name$(22)
  if r$="_" then return
  res% = dll_call3("FindExistingResource",adr(f$),adr(t$),adr(n$))
  if res%=0 then return
  res% = dll_call4("ExtractExistingResource",adr(f$),adr(t$),adr(n$),adr(r$))
  if res%>0 then text 21,r$
  return

A vous d'inventer votre utilisation de ces fonctions !


Dernière édition par Klaus le Ven 11 Juil 2014 - 16:07, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5855
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: V3.13 du 10/07/2014 - gestion des ressources   Ven 11 Juil 2014 - 8:23

Je n'ai pas encore essayé, mais c'est pratique et puissant. C'est vrai que les premières idées d'utilisation est la création de programme d'installation mais il peut y avoir d'autres usages.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: V3.13 du 10/07/2014 - gestion des ressources   Sam 12 Juil 2014 - 1:55

J'ai ajouté une DLL dans mon WebDav, dossier DLLs\. Cette DLL s'appelle Resource.dll. Elle contient uniquement les 5 fonctions suivantes:
GetIndexOfResourceType = récupérer l'indexe d'un type de ressource dans un LIST
GetListOfResources = récupérer la liste de toutes les resources dans un LIST
GetResourceIndexItemData = récupérer le chemin d'accès au fichier d'origine d'une ressource
FindExistingResource = tester si une ressource existe
ExtractExistingResource = extraire une ressource dans un fichier

Ainsi, cette DLL peut servir de "véhicule" pour des ressources. On peut lui intégrer toutes les ressources nécessaires, par exemple par le gestionnaire de ressources publié ci-dessus. Ensuite, elle peut être intégrée elle-même dans un exécutable Panoramic, également par le gestionnaire de ressources posté ci-dessus.

Puis, cet exécutable Panoramic peut l'extraire de lui-même au premier démarrage (c'est-à-dire si ce fichier n'existe pas). A partir de là, le programme peut l'utiliser, en fermant KGF.dll et en ouvrant Resource.dll pour utiliser les fonctions ci-dessus, ou alors en utilisant ces fonctions directement à partir de KGF.dll, pour en extraire les ressources nécessaires dans des fichiers individuels.

Le grand avantage, c'est que le programme Panoramic en cours peur librement modifier les ressources dans cette DLL, par ajout d'autres ressources, remplacement de ressources voire même suppression de ressources, et ce en cours d'exécution, sans contrainte, a condition que cette DLL ne soit pas chargée à ce moment-là. On évite ainsi le blocage sécuritaire de Windows et on obtient un système de gestion dynamique des ressources.

Ceci peut servir, par exemple, pour la sécurisation de données sensibles. KGF.dll contient une fonction de cryptage, propriétaire, assez puissante. On peut imaginer un fichier sensible, crypté et mémorisé sous forme de ressource dans cette petite DLL. En cours d'exécution, on l'extrait et on le décrypte. A chaque modification, on le recrypte et on le met à jour dans la DLL. Et dans l'évènement ON_CLOSE de la form 0, on supprime ce fichier, si possible avec la fonction de suppression sécurisée également disponible dans KGF.dll. Ce n'est peut-être pas parfait comme sécurité, mais c'est déjà une bonne approche...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7991
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 12 Juil 2014 - 13:21

Je vais sans doute dire une grosse bêtise... Laughing 

Ceci peut il servir, par exemple, à changer l' icône d' un *.exe créé avec panoramic ?...


Aïe,aïe,aïe...tapez pas trop fort sur la pauvre bête... lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: V3.13 du 10/07/2014 - gestion des ressources   Sam 12 Juil 2014 - 13:42

Non, on ne peut pas. Il est très délicat d'intervenir sur les ressources existantes d'un fichier exécutable. Comme je l'ai dit dans mon post initial, cela peut entraîner des conséquences graves, et c'est pourquoi j'ai bloqué cela.

Pour changer l'icône d'un exécutable Panoramic, il y a l'excellent ResHacker (freeware) qui fait ça très bien.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7991
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 12 Juil 2014 - 13:56

C' est ce que j'utilise actuellement.

Je trouvais que le faire avec Panoramic et KGF aurait été sympa... Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: V3.13 du 10/07/2014 - gestion des ressources   Sam 12 Juil 2014 - 14:14

Certes. Mais les icônes sont gérées d'une manière particulière, différente des autres ressources. Et je n'ai pas envie de me risquer à semer la pagaille dans ce bazar, d'autant que ce serait juste pour une unique fois, après la génération de l'EXE. Et que ce soit un programme Panoramic ou ResHacker, dans ce cas, ça revient au même.

Ce que j'ai fait, c'est de donner le moyen de gérer ce que la notion "application" de Panoramic fait, mais avec plus de souplesse (en acceptant absolument tous les fichiers) et en le gérant dynamiquement. donc, installateurs, jeux, applications auto-extractibles, programmes sécurisés par des données cryptées, ... Voilà un peu le créneau que je vise.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: V3.13 du 10/07/2014 - gestion des ressources   Dim 13 Juil 2014 - 17:45

J'ai trouvé un code Visual Basic qui arrive à faire cela: changer l'icône d'un fichier EXE. Je vais le traduire en Delphi et l'intégrér dans KGF.dll.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7991
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Dim 13 Juil 2014 - 17:52

Chouette ! Merci Klaus !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: V3.13 du 10/07/2014 - gestion des ressources   

Revenir en haut Aller en bas
 
V3.13 du 10/07/2014 - gestion des ressources
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Gestion de gare ferroviaire et train
» [Résolu] Gestion commerciale avec SoftwareZator 2014, faisable ou pas ?
» Gestion des cantons en mode hors ligne
» je cherche de l'aide pour un jeu de gestion d'animalerie
» Zumo 660 Gestion des Cartes

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: