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
» Détection connexion internet
par JL35 Aujourd'hui à 18:39

» Le parcours du cavalier sur un échiquier 8 x 8
par pascal10000 Hier à 13:26

» Casse-tête : Echanger les positions des cavaliers
par papydall Sam 22 Juil 2017 - 19:42

» Compilateur FBPano
par jean_debord Sam 22 Juil 2017 - 10:54

» demande pour recuperer un text speciale
par pascal10000 Ven 21 Juil 2017 - 22:04

» KGF_dll - nouvelles versions
par Klaus Ven 21 Juil 2017 - 14:29

» Amélioration de la commande HINT
par papydall Mer 19 Juil 2017 - 3:30

» TEST SUR SHAPE
par papydall Mer 19 Juil 2017 - 1:17

» Un challenge à relever
par papydall Mar 18 Juil 2017 - 21:25

» Astuce : Indenter plusieurs lignes de code à la fois
par papydall Mar 18 Juil 2017 - 1:32

» Suggestion pour le forum
par papydall Lun 17 Juil 2017 - 20:28

» Truver les handles des onglets de Panoramic Editor
par Klaus Lun 17 Juil 2017 - 18:20

» Synedit_Editor - nouvelles versions
par Klaus Lun 17 Juil 2017 - 13:46

» Détermine si oui ou non un objet est PARENT d'un autre objet
par Klaus Dim 16 Juil 2017 - 11:58

» Une autre façon de terminer une application.
par papydall Dim 16 Juil 2017 - 3:53

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juillet 2017
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
31      
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 : 5841
Age : 44
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 : 7930
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 : 7930
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 : 7930
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
» Gestion de la position de la souris
» Problème de gestion du temps d'animation

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: