[VB] Tout résolu sauf une dernière pertinente ^^

Tout résolu sauf une dernière pertinente ^^ [VB] - VB/VBA/VBS - Programmation

Marsh Posté le 06-11-2004 à 19:19:54    

Salut,
 
 
 
j'ai 4 questions [:joce] :
 
- 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 :
 

Code :
  1. Private Sub Command1_Click()
  2. Dim i As Integer
  3. Command1.Enabled = False
  4. i = 0
  5. While i < 5
  6.     i = i + 1
  7.     status.Text = "boucle #" & i
  8.    
  9.     MyDOS.CommandLine = "test.exe > sortie.txt"
  10.     MyDOS.ExecuteCommand
  11. Wend
  12. Command1.Enabled = True
  13. End Sub


 
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 [:dawao]
 
Voilà ce que je voudrais faire :o
 
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 [:joce] :d
 
Je voudrais faire un truc au démarrage de l'interface graphique : Vérifier qu'un plaisantant n'aurait pas corrompu l'executable initial :d 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 [:dawao] ) et comparer la chaine hashé a celle que j'aurais saisie en constante dans le programme [:romf]
 
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 :sol: 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 [:romf]
 
 
Merci pour le coup de main :)


Message édité par zytrahus5 le 24-11-2004 à 21:34:47

---------------
http://www.zytratech.com
Reply

Marsh Posté le 06-11-2004 à 19:19:54   

Reply

Marsh Posté le 06-11-2004 à 20:19:38    

pas d'idée ?


---------------
http://www.zytratech.com
Reply

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 ? :)


---------------
http://www.zytratech.com
Reply

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 :
  1. Private Sub Command1_Click()
  2. Dim i As Integer
  3. Command1.Enabled = False
  4. i = 0
  5. While i < 5
  6.     i = i + 1
  7.     status.Text = "boucle #" & i
  8.    
  9.     MyDOS.CommandLine = "test.exe > sortie.txt"
  10.     MyDOS.ExecuteCommand
  11. Wend
  12. Command1.Enabled = True
  13. End Sub


 
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 ?


Message édité par zytrahus5 le 07-11-2004 à 10:19:55

---------------
http://www.zytratech.com
Reply

Marsh Posté le 07-11-2004 à 10:18:53    

si je remplace ma boucle par celle là, ça marche :
 

Code :
  1. While i < 1
  2.     i = i + 1
  3.     status = "TEST"
  4.     test = Shell("./test.exe > sortie.txt", 1)
  5. Wend


 
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 ?


Message édité par zytrahus5 le 07-11-2004 à 10:19:16

---------------
http://www.zytratech.com
Reply

Marsh Posté le 07-11-2004 à 10:36:51    

:/


---------------
http://www.zytratech.com
Reply

Marsh Posté le 07-11-2004 à 13:49:42    

pas d'idée ?


---------------
http://www.zytratech.com
Reply

Marsh Posté le 07-11-2004 à 15:25:20    

:whistle:

Reply

Marsh Posté le 07-11-2004 à 15:31:26    

[:ddr555]


---------------
http://www.zytratech.com
Reply

Marsh Posté le 07-11-2004 à 19:45:29    


- 4eme question [:dawao]
 
Voilà ce que je voudrais faire :o
 
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 [:joce] :d
 
Je voudrais faire un truc au démarrage de l'interface graphique : Vérifier qu'un plaisantant n'aurait pas corrompu l'executable initial :d 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 [:dawao] ) et comparer la chaine hashé a celle que j'aurais saisie en constante dans le programme [:romf]
 
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 ?


---------------
http://www.zytratech.com
Reply

Marsh Posté le 07-11-2004 à 19:45:29   

Reply

Marsh Posté le 07-11-2004 à 19:49:27    

[:noxauror]


---------------
RTCW & W:ET PlayerDawa Pack 1.28ハイテクなマスター
Reply

Marsh Posté le 07-11-2004 à 19:52:43    

:cry: personne il veut m'aider :d mes questions sont trop pertinentes [:dawao]


---------------
http://www.zytratech.com
Reply

Marsh Posté le 07-11-2004 à 20:17:51    

..;et si tu vérifiais la date de modif, plutôt?:o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 07-11-2004 à 20:19:37    

skeye a écrit :

..;et si tu vérifiais la date de modif, plutôt?:o

c'est juste pour de la lecture seule, pas d'écriture :/


---------------
http://www.zytratech.com
Reply

Marsh Posté le 07-11-2004 à 20:20:22    

zytrahus5 a écrit :

c'est juste pour de la lecture seule, pas d'écriture :/


[:delarue3]
Je vois pas le rapport...[:joce]


Message édité par skeye le 07-11-2004 à 20:20:40

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 07-11-2004 à 22:07:57    

tu voulais que je regarde quelle date de modif ? :d


---------------
http://www.zytratech.com
Reply

Marsh 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/  


Dim FileNum as Long
Dim fl as Long
Dim binByte() as Byte
 
FileNum = FreeFile
Open "test..exe" For Binary Access Read As #FileNum
fl = FileLen(bfilename)
ReDim binbyte(fl)
Get #FileNum, , binbyte
Close #FileNum


=> 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 :D
 
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 :D

Reply

Marsh Posté le 08-11-2004 à 10:08:36    

skeye a écrit :

..;et si tu vérifiais la date de modif, plutôt?:o


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é...

Reply

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 [:spamafote]

Reply

Marsh Posté le 08-11-2004 à 11:00:18    

zytrahus5 a écrit :


- 4eme question [:dawao]
 
Voilà ce que je voudrais faire :o
 
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 [:joce] :d
 
Je voudrais faire un truc au démarrage de l'interface graphique : Vérifier qu'un plaisantant n'aurait pas corrompu l'executable initial :d 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 [:dawao] ) et comparer la chaine hashé a celle que j'aurais saisie en constante dans le programme [:romf]
 
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 ?



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 ...

Reply

Marsh Posté le 08-11-2004 à 11:31:01    

je vais essayer de le renommer :)


Message édité par zytrahus5 le 08-11-2004 à 11:31:07

---------------
http://www.zytratech.com
Reply

Marsh Posté le 08-11-2004 à 11:43:35    

Une exe c'est du binaire. Je ne l'ouvrirais pas en texte à ta place.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

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 ?


---------------
http://www.zytratech.com
Reply

Marsh Posté le 08-11-2004 à 12:07:34    

L'ouvrir en bianire :whistle:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 08-11-2004 à 12:11:56    

HelloWorld a écrit :

L'ouvrir en bianire :whistle:

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 ?


---------------
http://www.zytratech.com
Reply

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.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

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é...

Reply

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


---------------
http://www.zytratech.com
Reply

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.
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/  


Dim FileNum as Long
Dim fl as Long
Dim binByte() as Byte
 
FileNum = FreeFile
Open "test..exe" For Binary Access Read As #FileNum
fl = FileLen(bfilename)
ReDim binbyte(fl)
Get #FileNum, , binbyte
Close #FileNum


=> 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 :D
 
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 :D


 
 
 
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...
 
 
:hello:


---------------
http://www.zytratech.com
Reply

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 ?


---------------
http://www.zytratech.com
Reply

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()

Reply

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()

Reply

Marsh Posté le 23-11-2004 à 22:52:02    

[:romf] vais chercher des infos sur cette fonction ;)


---------------
http://www.zytratech.com
Reply

Marsh Posté le 23-11-2004 à 23:04:13    

dans ton bout de code, la ligne :
 
f1 = FileLen(bfilename)  
 
 
elle corespond aquoi ?
 
 


Dim FileNum as Long
Dim fl as Long
Dim binByte() as Byte
 
FileNum = FreeFile
Open "test..exe" For Binary Access Read As #FileNum
fl = FileLen(bfilename)
ReDim binbyte(fl)
Get #FileNum, , binbyte
Close #FileNum


 
 
 
comme ça fonctionnait pas, j'avais mis :
 
fl = FileLen("test.exe" )


Message édité par zytrahus5 le 23-11-2004 à 23:05:57

---------------
http://www.zytratech.com
Reply

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)
iPos = InStr(sAns, Chr(0))
If iPos > 0 Then sAns = Left(sAns, iPos - 1)


 
mais sAns est vide aussi


---------------
http://www.zytratech.com
Reply

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.

Reply

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


---------------
http://www.zytratech.com
Reply

Marsh Posté le 24-11-2004 à 16:36:55    

c'est pas f1 mais fl, c'est peut-être ça le problème :??:

Reply

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 ;)


Message édité par Arjuna le 24-11-2004 à 16:38:37
Reply

Marsh Posté le 24-11-2004 à 16:38:30    

:cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry:


---------------
http://www.zytratech.com
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed