Tout résolu sauf une dernière pertinente ^^ [VB] - VB/VBA/VBS - Programmation
Marsh Posté le 06-11-2004 à 21:04:39
la premiere question s'est résolué toute seule, bizarre, j'ai relancé VB, et visiblement il prenait en compte le ./
pas d'idée comment récupérée la sortie de mon EXE ?
Marsh Posté le 07-11-2004 à 10:02:13
- la troisieme, est que je comprends pas pourquoi mon code agit de cette manière, voilà le code :
Code :
|
le probleme c'est qu'il n'ecrit dans le label "status" que lorsque la premiere boucle est faite ! pourtant c'est placé au début de la boucle, et l'EXE est lancé malgré tout avant que le contenu du label "status" soit rafraichi et remplacé par : "boucle #1"
une idée pour ça ?
Marsh Posté le 07-11-2004 à 10:18:53
si je remplace ma boucle par celle là, ça marche :
Code :
|
le probleme c'est que la class de la premiere boucle permet de récupérer la sortie de l'EXE sans passer par un fichier.... et que le shell ne me le permet pas.
Pourquoi dans ce cas là, le status est bien updaté et pas dans l'autre ? les instructions ne se font pas dans un ordre précis ?
Marsh Posté le 07-11-2004 à 19:45:29
- 4eme question
Voilà ce que je voudrais faire
j'ai une interface graphique en VB qui appelle un fichier EXE (comme je l'ai dit plus haut), a part le probleme de la question 3, tout va bien
Je voudrais faire un truc au démarrage de l'interface graphique : Vérifier qu'un plaisantant n'aurait pas corrompu l'executable initial Pour ça j'avais une idée => ouvrir le fichier EXE en mode TEXTE, le hasher (sans cryptage ou avec cryptage mais c pas important ) et comparer la chaine hashé a celle que j'aurais saisie en constante dans le programme
le probleme c'est que je n'arrive pas du tout a lire le fichier EXE en mode texte (j'arrive a lire et a compteer le nombre de caractere) ... => vous auriez un conseil ?
Marsh Posté le 07-11-2004 à 19:49:27
ReplyMarsh Posté le 07-11-2004 à 19:52:43
personne il veut m'aider mes questions sont trop pertinentes
Marsh Posté le 07-11-2004 à 20:17:51
..;et si tu vérifiais la date de modif, plutôt?
Marsh Posté le 07-11-2004 à 20:19:37
skeye a écrit : ..;et si tu vérifiais la date de modif, plutôt? |
c'est juste pour de la lecture seule, pas d'écriture
Marsh Posté le 07-11-2004 à 20:20:22
zytrahus5 a écrit : c'est juste pour de la lecture seule, pas d'écriture |
Je vois pas le rapport...
Marsh Posté le 07-11-2004 à 22:07:57
ReplyMarsh Posté le 08-11-2004 à 10:07:43
3/ Parcequ'il faut faire un "Me.Refresh" ou "status.Refresh" pour que le contrôle se mette à jour pendant que le programme tourne.
En effet, ça prends énormément de temps de raffraîchir l'affichage d'un contrôle, donc VB préfère le faire lorsque le programme n'éxécute plus rien. Il faut donc forcer un refresh de toute la forme, ou d'éléments précis pour voir la mise à jour en temps réel.
4/
|
=> Ton fichier est chargé dans le tableau d'octets "binbyte".
=> PS: Ceci-dit, selon la taille de ton EXE, évite de le charger d'un coup de cette mannière, sinon tu va tout péter en mémoire
J'ai déjà joué avec des VOB (Rip de DVD) et même si ça pose pas de problème à VB pour créer un tableau de 4 Go en mémoire, ça pose un certain problème à Windows qui se met à swapper comme un gros tarré pour le faire
Marsh Posté le 08-11-2004 à 10:08:36
skeye a écrit : ..;et si tu vérifiais la date de modif, plutôt? |
Y'a rien de plus simple à changer. Deplus c'est pas une constante, si tu déploie ce prog sur plusieurs PC, t'es baisé...
Marsh Posté le 08-11-2004 à 10:09:31
PS: ceci dit, pour s'assurer que le fichier est bon, je pense que le mieu c'est quand même d'aller le chercher sur un serveur
Marsh Posté le 08-11-2004 à 11:00:18
zytrahus5 a écrit : |
Je ne connais pas VB ...
Mais ce ne serais pas possible de renommer le .EXE (en .TXT, par exemple), le hasher puis le remettre en .EXE ? Ou de le copier (en créant un fichier temporaire tmp_machin.TXT)
Et il n'y a pas la possibilité de lire le fichier en mode "hexa" sous VB ? Parce que les langages que je connais le permettent tous ...
Marsh Posté le 08-11-2004 à 11:31:01
je vais essayer de le renommer
Marsh Posté le 08-11-2004 à 11:43:35
Une exe c'est du binaire. Je ne l'ouvrirais pas en texte à ta place.
Marsh Posté le 08-11-2004 à 12:01:35
HelloWorld a écrit : Une exe c'est du binaire. Je ne l'ouvrirais pas en texte à ta place. |
qu'est ce que je pourrais pour faire un truc similaire sur le fond ?
Marsh Posté le 08-11-2004 à 12:07:34
ReplyMarsh Posté le 08-11-2004 à 12:11:56
HelloWorld a écrit : L'ouvrir en bianire |
oui ça je peux faire, mais qu'est ce que je peux faire du binaire ? vais pas le stocker entier dans une variable, ça serait énorme... comment utiliser le binaire pour vérifier qu'il est conforme à la trace/hash de l'original connu ?
Marsh Posté le 08-11-2004 à 13:59:29
Trouve toi une lib de hachage utilisable en VB et regarde comment on lui file un buffer à hacher. En fonction du niveau de sécurité que tu cherches tu pourras ou non utiliser une dll.
Marsh Posté le 08-11-2004 à 14:35:23
zytrahus5 a écrit : qu'est ce que je pourrais pour faire un truc similaire sur le fond ? |
Le code que je t'ai donné. La plupart des algos de Hashage se basent sur un array de bytes... Et ça tombe bien, c'est ce que tu récupères avec le code que je t'ai donné...
Marsh Posté le 08-11-2004 à 15:05:43
Arjuna a écrit : Le code que je t'ai donné. La plupart des algos de Hashage se basent sur un array de bytes... Et ça tombe bien, c'est ce que tu récupères avec le code que je t'ai donné... |
je sais pas comment j'ai fait mon compte mais j'ai pas vu ton code en répondant au topic tout a l'heure
je te remercie en tous cas, je vais tester ça cet apres midi :hello
Marsh Posté le 23-11-2004 à 21:58:20
Arjuna a écrit : 3/ Parcequ'il faut faire un "Me.Refresh" ou "status.Refresh" pour que le contrôle se mette à jour pendant que le programme tourne.
|
J'ai enfin eu le temps de m'y remettre !
j'ai appliqué ton code à mon programme, je n'ai pas d'errreur avec ça, en revanche, je me demande comment l'exploiter.
Est ce que le tableau d'octet je peux le Hasher avec ma fonction qui hache une chaine de caracteres ? a priori je pense pas, mais je vais essayer quand meme...
Marsh Posté le 23-11-2004 à 22:01:03
ma fonction ne veut en effet pas du binByte (tableau d'octets) ...
Est ce qu'il est possible de convertir un tableau d'octets en tableau de caracteres ?
Marsh Posté le 23-11-2004 à 22:11:14
C'est tout à fait possible. Par contre, je ne sais pas si en VB il y a une fonction pour passer un array de bytes en string. Si ce n'est pas le cas, il faut le faire à la main, en concaténant ligne par ligne les bytes du tableau en les passant en char avec cstr()
Marsh Posté le 23-11-2004 à 22:17:02
Regarde CstrB(), il me semble que ça permet de conserver le 7° bit au lieu de le shooter comme le fait le Cstr()
Marsh Posté le 23-11-2004 à 22:52:02
ReplyMarsh Posté le 23-11-2004 à 23:04:13
dans ton bout de code, la ligne :
f1 = FileLen(bfilename)
elle corespond aquoi ?
|
comme ça fonctionnait pas, j'avais mis :
fl = FileLen("test.exe" )
Marsh Posté le 23-11-2004 à 23:07:30
le probleme c'est que j'ai pas d'erreur a l'execution de ces lignes mais binByte est visiblement vide.
j'ai utilisé ce bout de code pour convertir :
sAns = StrConv(binByte, vbUnicode) |
mais sAns est vide aussi
Marsh Posté le 24-11-2004 à 10:40:23
Euh, chais plus si FileLen() prends un pointeur de fichier ou un nom de fichier.
Regarde la valeur de fl, si c'est 0 ou -1 alors c'est pas bon, ça doit contenir la taille du fichier.
Pour le nom du fichier, met le nom complète (en partant de la racine du disque) parceque, notamment si tu lances le mode debug, le prog ne s'éxécute pas du tout dans son répertoire, donc les chemins relatifs ne mercheront certainement pas.
Marsh Posté le 24-11-2004 à 16:35:23
j'ai pas d'exception quand au fait qu'il ne trouve pas le fichier (j'ai spécifié un faux nom pour voir comment il réagit dans ce cas, et il sort une exeption 53)
donc a priori il ouvre bien le fichier, mais pas moyen d'en avoir la longueur, faut dire que je sais meme pas si : Text1.Text = f1 ça marche ou pas
en tous cas si la syntaxe est bonne c'est qu'il arrive pas a donner la longueur car ça n'affiche rien
Marsh Posté le 24-11-2004 à 16:38:12
PS: Pour éviter ce genre de problème, écrit toujours en toute première ligne de chacun de tes modules VB :
Option Explicit |
=> VB plantera lors de tout appel à une variable non déclarée avec un "Dim"
Du coup il n'y a plus de confusion possible entre deux orthographes possibles pour une même variable, puisque la syntaxe fausse plantera
Marsh Posté le 06-11-2004 à 19:19:54
Salut,
j'ai 4 questions :
- la premiere, c'est que le fichier EXE est dans l'arborescence du disque dur, exactement dans le meme dossier que mon programme principal en VB. Quand j'appelle l'EXE avec la fonction SHELL de VB, je dois ecrire l'arbrorescence, j'ai cherché sur MSDN, et ils ne précisent pas comment je peux faire pour "préciser" que la cible est dans le meme dossier que le dossier courant (celui du prog VB). En PHP/HTML, on joue avec "./" ou "../" là j'ai essayé ne sachant pas, mais ça marche pas, donc y a t il un moyen de préciser ça ? RESOLU
- la seconde, est du meme registre (fonction SHELL, VB etc...). Mon EXE renvoie " printf " (pour faire simple), quand par exemple, je lance mon EXE en ligne de commande, si je tape TEST.EXE > text.txt et bien il me met tout ce qu'il sort en printf là dedans. Ce que je voudrais ça serait d'éviter de passer par un fichier, et récupérer le contenu directement dans une variable VB. Comment je veux faire ça ? RESOLU
- la troisieme, est que je comprends pas pourquoi mon code agit de cette manière, voilà le code :
le probleme c'est qu'il n'ecrit dans le label "status" que lorsque la premiere boucle est faite ! pourtant c'est placé au début de la boucle, et l'EXE est lancé malgré tout avant que le contenu du label "status" soit rafraichi et remplacé par : "boucle #1" RESOLU
- 4eme question
Voilà ce que je voudrais faire
j'ai une interface graphique en VB qui appelle un fichier EXE (comme je l'ai dit plus haut), a part le probleme de la question 3, tout va bien
Je voudrais faire un truc au démarrage de l'interface graphique : Vérifier qu'un plaisantant n'aurait pas corrompu l'executable initial Pour ça j'avais une idée => ouvrir le fichier EXE en mode TEXTE, le hasher (sans cryptage ou avec cryptage mais c pas important ) et comparer la chaine hashé a celle que j'aurais saisie en constante dans le programme
le probleme c'est que je n'arrive pas du tout a lire le fichier EXE en mode texte (j'arrive a lire et a compteer le nombre de caractere) ... => vous auriez un conseil ? RESOLU
- 5ème et derniere Tout est résolu sauf un probleme qui ressemble à la 3° :
Call keybd_event(vbKeySnapshot, 1, 0, 0)
SavePicture Clipboard.GetData(vbCFBitmap), Fichier
Le problème c'est que VB commence a executer la deuxieme ligne avant que la premiere soit totalement achevée, ce qui a pour conséquence de ne pas afficher ce que contient le presse papier, mais ce qu'il contenait avant de le reremplir
Si vous avez une idée !
PS : gros merci à Arjuna
Merci pour le coup de main
Message édité par zytrahus5 le 24-11-2004 à 21:34:47
---------------
http://www.zytratech.com