Le langage SMS est exclu sur les forums ProgBoards, tout message ne respectant pas la charte sera déplacé, modifié, ou supprimé par nos modérateurs.

Forum Langages » BASIC » Connaitre le chemin de l'executable en quickbasic 7.1

MisterWario
ProgBoarder
Citer Windows XP Firefox 2 - Posté le 14/06/2009 à 19:11
Bonsoir a toutes et a tous.
La question est dans le titre en fait.
Je sais qu'il est possible de le faire via une interruption.
Le soucis avec curdir c'est qu'il retourne LE REPERTOIRE COURANT et non celui de l'executable.
Comment qu'on fait please ?

Edit : cela dit l'estimation du navigateur/os sur le site est faussée j'utilise skyfire et non firefox et un telephone portable et non xp

Edité par MisterWario ( 14/06/2009 19:13:52 )
Francesco
Modérateur
RemonterCiter Linux Firefox 3 - Posté le 16/06/2009 à 11:12
Bonjour et bienvenu parmis nous (héhé)

Concernant le problème, je ne suis pas sur que cela soit possible, même avec une interruption. Désolé !
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
gm86
Visiteur
RemonterCiter Windows 98 Msie 6 - Posté le 15/10/2010 à 20:55
Si.
A partir de DOS 3, l'environnement du programme qui se termine par un double-mot nul est suivi d'un compteur sur un mot et de la spécification complète de l'application. Le segment de l'environnement est indiqué à l'offset 2Ch du PSP.
gm86
Visiteur
RemonterCiter Windows 98 Msie 6 - Posté le 15/10/2010 à 21:13
Je me corrige. L'environnement se termine par un simple mot nul.


REM $INCLUDE: 'QBX.BI' ' QB.BI pour QuickBASIC 4.x
DIM ENTREE AS RegType
DIM SORTIE AS RegType


' Obtenir le segment du PSP du programme en cours
ENTREE.AX = &H6200 ' Fonction 62h
CALL INTERRUPT(&H21, ENTREE, SORTIE) ' Interruption 21h (DOS)
PSP = SORTIE.BX ' BX donne le segment du PSP

' Obtenir le segment de l'environnement du programme
DEF SEG = PSP
ENVIRONNEMENT = PEEK(&H2D) * 256 + PEEK(&H2C) ' Lire le mot à l'offset 2Ch

' Faire pointer l'offset sur le mot nul
DEF SEG = ENVIRONNEMENT
OFFSET = 0
WHILE PEEK(OFFSET + 1) OR PEEK(OFFSET) ' Tant que mot non nul,
OFFSET = OFFSET + 1 ' incrémente par octet.
WEND

' Faire pointer l'offset après le mot nul et le compteur
OFFSET = OFFSET + 4 ' Pointe la spécification

' Lire la spécifiction complète du fichier exécuté
SPECIFICATION$ = ""
CARACTERE = PEEK(OFFSET)
WHILE CARACTERE <> 0
SPECIFICATION$ = SPECIFICATION$ + CHR$(CARACTERE)
OFFSET = OFFSET + 1
CARACTERE = PEEK(OFFSET)
WEND

DEF SEG


PRINT "La chaîne qui contient la spécification complète du programme exécuté"
PRINT "est longue de"; LEN(SPECIFICATION$); "caractères :"
PRINT SPECIFICATION$

Poster une réponse

STOP aux fautes volontaires !
Message
Formatage
Note: pour partager du code source, merci d'utiliser le wall !
Smileys (sourire) (yekyek) (clein d'oeil) (désapprouve) (triste) (cool) (langue) (confus) (gêné) (neutre) (eek) (surpris) (diable) (flèche) (exclamation) (question) (diable) (idée) (méchant)
Pseudonyme
Recopiez le code
v6 © Computaid SPRL 2005-2012 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,024 s - Crédits - Stats
1 connecté