crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 20 janv. 2006 à 21:44
ET puis executer un script est térriblement dangeureux !!! Qu'est-ce qui te dis que le script que tu va exectuer n'a pas été remplacé par un script destructeur ?
CR
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 20 janv. 2006 à 17:07
certes.
mais aucunement besoin d'un vbs pour ca....
l'IP donnée ici est l'IP internet, pas l'IP locale.
cs_phenX
Messages postés23Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention31 mars 2006 20 janv. 2006 à 16:51
ben c pareil, sauf que ca ce fait en deux lignes au lieux de autant que dans le code donné ci dessu
Dim objSocket
Set objSocket = CreateObject("MSWinsock.Winsock")
msgbox ("Votre Adresse IP est:" & objSocket.localip)
ca va quand même plus vite non?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 20 janv. 2006 à 16:45
quel interet de passer par un script VBS ?
cs_phenX
Messages postés23Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention31 mars 2006 20 janv. 2006 à 16:43
je vois pas bien l'intérêt dans le sens où un script VBS le ferais en deux lignes de code, il suffit alors d'appeller le script avec un shell et le tour est joué
ratala
Messages postés248Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention22 juin 2008 18 janv. 2006 à 13:06
A ok merci Renfield
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 18 janv. 2006 à 08:19
"Amabilité"
Mid$ (comme toutes les fonctions avec un '$' )
renvoie un String....
Mid, quant à elle renvoie un Variant, qui doit ensuite être transformé (casté) en String.
un étape de moins, en ajoutant simplement un '$' et un brin de rapidité supplémentaire...
ratala
Messages postés248Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention22 juin 2008 17 janv. 2006 à 22:32
salut tout le monde, quelqun aurait l'aimabilité de m'expliquer (clairement si possible...) quelle est la différence entre les fonction mid$ et mid ?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 16 janv. 2006 à 15:22
les exemples en C....
ce code est très facilement portable en VB, et convient tout autant aux contrôles TextBox de ce dernier....
bobjay
Messages postés66Date d'inscriptionmercredi 19 mai 2004StatutMembreDernière intervention 1 avril 2007 16 janv. 2006 à 13:59
Jack, je suis au courant que c'est la N-eme source à traiter le sujet (d'ailleurs tu n'as pas du lire la description de la fonction, tu aurais vu que je t'ai précédé sur cette remarque lol). Si j'ai décidé de publier ce code, c'est parce qu'il m'a semblé un poil plus clair que les autres, et qu'on n'est pas obligé de télécharger un fichier Zip pour pouvoir lire un code si simplet (je n'apprécie pas trop de devoir télécharger des fichiers pour lire 10 petites lignes de code). Ok ce sont des arguments de fainéant, mais n'est-ce pas le but de l'informatique de nous faciliter la vie ?
Neo.balastik, merci pour ta source qui nous permet d'économiser les controles, certes ce code est légèrement plus long que le mien à cause des déclarations de l'api, mais c'est génial et ça vaut vraiment le coup si on peu éviter d'utiliser des controles !
BruNews, ne le prends surtout pas mal, mais il me semble qu'il s'agit d'un site VB ici, alors les exemples en C, c'est bien gentil mais on peut surement s'en dispenser...
Crenaud76, on ne va pas se battre pour une histoire de capacité de variable tout de même lol. Pour la déclaration j'avoue avoir un comportement barbare, peut etre est-ce du à l'époque ou je programmais en Basic, ou il fallait jusqu'a déclarer le numéro de la ligne de code que l'on écrivait. Le VB fut pour moi assez "magique" justement de ne pas boguer pour un simple oubli de déclaration de variable alors j'en profite un petit peu, mais je ne suis vraiment pas un exemple à suivre, tout bon programmeur qui se respecte doit impérativement déclarer chaque variable, ne serait-ce que pour assurer un meilleur controle de l'application développée. De plus il est clair qu'une simple var string fait largement l'affaire pour ce genre de traitement, mais j'ai appris à toujours voir + grand car je ne suis pas à l'abris d'utiliser cette fonction pour trouver autre chose qu'une IP dans une page html (qui peut le plus peut le moins, mais l'inverse est plus difficile). Conclusion pour récupérer votre IP Internet avec le code que j'ai proposé, laissez tomber le RichText et utilisez une var String si vous désirez davantage simplifier ce code.
Merci à tous pour vos précieuses remarques, vos corrections et à bientot !
PS: Si je propose une autre source, promis je tacherais d'être plus rigoureux avec mes variables ;)
XtremDuke
Messages postés626Date d'inscriptionsamedi 28 septembre 2002StatutMembreDernière intervention18 mai 20094 16 janv. 2006 à 13:22
Oui c'est simple et efficace mais pas très souple : que se passe-t-il si le site est HS ?
Comme beaucoup, je te conseillerai l'utilisation d'API comme la source suivante : http://www.vbfrance.com/code.aspx?ID=5704
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 16 janv. 2006 à 10:59
Un textbox (classe 'EDIT' pour Windows) en multilne n'est virtuellement limité que par la mémoire disponible, 32 Ko est seulement le buffer qu'il alloue par défaut quand il est créé.
On peut tout à fait le changer à l'exécution, voici exemple en C que je vous laisse traduire:
Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Sub Form_Load()
Dim hOpen As Long
Dim hFile As Long
Dim Ret As Long
Dim lOffset1 As Long
Dim lOffset2 As Long
Dim sBuffer As String
Const sStart As String = "
Votre adresse IP est "
Const sEnd As String = "
"
'Create a buffer for the file we're going to download
sBuffer = Space(5000)
'Create an internet connection
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
'Open the url
hFile = InternetOpenUrl(hOpen, sURL, vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&)
'Read the first 5000 bytes of the file
InternetReadFile hFile, sBuffer, 5000, Ret
'clean up
InternetCloseHandle hFile
InternetCloseHandle hOpen
MsgBox "Adresse IP : " & Mid$(sBuffer, lOffset1, lOffset2)
End Sub
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 16 janv. 2006 à 10:35
N-ième source utilisant le même principe (cherche "IP public")
Non, une String est "limitée" à 2 Gbytes, sauf en utilisation à longueur fixe, genre "Dim monTexte As String * X" où X ne peut pas dépasser 65400.
Une TextBox est limitée à 2048 caractères ou 32k en mode MultiLigne.
Une RichTextBox n'a pas de limite (mémoire du PC)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 16 janv. 2006 à 09:47
je soutiens Crenaud76... ajoutes un Option Explicit, et lance ton programme en pressant Ctrl + F5 (ces deux aspects pouvant être rendus automatiques, dans les options)
gain de temps ? un Dim n'est pas bien long, accélère le code (pas de Variant)
et évite bien des tracas (fautes de frappe, casting, etc)
le RichTextBox est inutile....
un String suffit très largement.... surtout pour la page utilisée (7.5 ko)
le contrôle Inet aussi, mais c'est excusable... c'est un moyen simple d'accéder au Web...(je favoriserai les API)
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 16 janv. 2006 à 00:08
1- Le type String est limité à 64 Ko, soit 2 puissance 16 caractères : Avant de remplir tout ca avec le source d'une page HTML, il y aura de l'eau de couler sous les ponts
2- Exact pour la non déclaration de l1 et l2, cela m'avait échappé. Pour ce qui est de ne pas déclarer les variables, je suis ... TOTALEMENT CONTRE !!! Même pour un petit bout de code d'essai : Personnellement, j'ai activé l'option de VB qui ajoute automatiquement un "Option Explicit" quand tu crées un nouveau module, comme cela, je ne l'oublie jamais et je suis sur d'être obliger de déclarer mes variables, ce que, encore une fois, je pense être une tres bonne chose, même si un module de test va passer pour cela de 10 lignes à 20 lignes. Cela évite les bug du à une faute de frappe, fait que l'on sait toujours de quoi l'on parle et permet de fuir comme la peste les variants (cela rejoint ma croisade pourla réhabilitation des fonctions $)
3- Ma note à ta source, je la justifie en disant simplement que ton code est court (~20 lignes sans les comments), il est commenté et fait bien ce qu'ilest censé faire.
CR
bobjay
Messages postés66Date d'inscriptionmercredi 19 mai 2004StatutMembreDernière intervention 1 avril 2007 15 janv. 2006 à 23:52
crenaud76,
"Pourquoi utiliser un richtextbox pour ca "
=> Je l'ai expliqué dans les commentaires de ma source (voir ligne 5 et 6 du script): le richtext box me permet de stocker une plus grande quantité de caractères qu'une simple variable string (string est limité à je ne sais plus combien de caracteres tandis que je n'ai jamais encore atteint de limite avec un richtext)
"attention a ta variable "DebuT", qui est un variant et pas une String"
=> Je suis étonné que tu ne dise rien à propos de mes variables L1 et L2 que j'ai omis de déclarer :p
J'aime beaucoup le VB pour ça, on n'est pas obligé d'être super rigoureux au niveau des déclarations des variables pour que ça fonctionne, on gagne un temps fou lorsque l'on développe des bouts d'essais, par contre quand on réalise une appli sérieuse, il est clair qu'il vaut mieux faire attention et déclarer toutes ses variables (vive l'option Explicit pour retrouver ses oublis de déclaration hihihi). Néanmoins je peux t'assurer que cette source fonctionne telle qu'elle est affichée sur cette page, que les variables soient bien déclarées ou non, car je l'ai copié-collé direct de mon projet vb (j'aime bien tester avant de poster).
En tout cas, je te remercie pour ta note, c'est plutot sympa car je ne trouve pas que ça le mérite, vu le faible niveau de programmation que ça demande... Je suis certain que d'autres peuvent mieux faire que mon "bricolage",j'espère simplement que ça pourra aider quelques débutants en attendant qu'un code + court et + efficace se présente ;)
@+
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 15 janv. 2006 à 23:16
... mais j'ai oublié de dire que c'était, malgré toutes mes remarques, une bonne source : 7/10 pour moi
CR
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 15 janv. 2006 à 23:15
Salut,
Pourquoi utiliser un richtextbox pour ca ! Une simple variable de type String aurait fait
l'affaire !!
Et puis ton Doevents se trouve en dehors d ela boucle Do ... Until alors il ne sert pas à grand chose !
Et attention a ta variable "DebuT", qui est un variant et pas une String ! En VB6, il faut donner le type pour chaque variable, même si elles sont déclarées sur une seule et même ligne de déclaration, contrairement au VB.NET
Je te propose aussi d'utiliser la fonction Mid$(), plutot que Mid() : Ce qui me connaisse sauront que c'ets un de mes chevaux de bataille !
Reste plus qu'à essayer de se passer du controle Inet (qu'à défaut je transmettrais personnellement en tant qu'argument de la fonction) et se sera tres bien ...
20 janv. 2006 à 21:44
CR
20 janv. 2006 à 17:07
mais aucunement besoin d'un vbs pour ca....
l'IP donnée ici est l'IP internet, pas l'IP locale.
20 janv. 2006 à 16:51
Dim objSocket
Set objSocket = CreateObject("MSWinsock.Winsock")
msgbox ("Votre Adresse IP est:" & objSocket.localip)
ca va quand même plus vite non?
20 janv. 2006 à 16:45
20 janv. 2006 à 16:43
18 janv. 2006 à 13:06
18 janv. 2006 à 08:19
Mid$ (comme toutes les fonctions avec un '$' )
renvoie un String....
Mid, quant à elle renvoie un Variant, qui doit ensuite être transformé (casté) en String.
un étape de moins, en ajoutant simplement un '$' et un brin de rapidité supplémentaire...
17 janv. 2006 à 22:32
16 janv. 2006 à 15:22
ce code est très facilement portable en VB, et convient tout autant aux contrôles TextBox de ce dernier....
16 janv. 2006 à 13:59
Neo.balastik, merci pour ta source qui nous permet d'économiser les controles, certes ce code est légèrement plus long que le mien à cause des déclarations de l'api, mais c'est génial et ça vaut vraiment le coup si on peu éviter d'utiliser des controles !
BruNews, ne le prends surtout pas mal, mais il me semble qu'il s'agit d'un site VB ici, alors les exemples en C, c'est bien gentil mais on peut surement s'en dispenser...
Crenaud76, on ne va pas se battre pour une histoire de capacité de variable tout de même lol. Pour la déclaration j'avoue avoir un comportement barbare, peut etre est-ce du à l'époque ou je programmais en Basic, ou il fallait jusqu'a déclarer le numéro de la ligne de code que l'on écrivait. Le VB fut pour moi assez "magique" justement de ne pas boguer pour un simple oubli de déclaration de variable alors j'en profite un petit peu, mais je ne suis vraiment pas un exemple à suivre, tout bon programmeur qui se respecte doit impérativement déclarer chaque variable, ne serait-ce que pour assurer un meilleur controle de l'application développée. De plus il est clair qu'une simple var string fait largement l'affaire pour ce genre de traitement, mais j'ai appris à toujours voir + grand car je ne suis pas à l'abris d'utiliser cette fonction pour trouver autre chose qu'une IP dans une page html (qui peut le plus peut le moins, mais l'inverse est plus difficile). Conclusion pour récupérer votre IP Internet avec le code que j'ai proposé, laissez tomber le RichText et utilisez une var String si vous désirez davantage simplifier ce code.
Merci à tous pour vos précieuses remarques, vos corrections et à bientot !
PS: Si je propose une autre source, promis je tacherais d'être plus rigoureux avec mes variables ;)
16 janv. 2006 à 13:22
Comme beaucoup, je te conseillerai l'utilisation d'API comme la source suivante : http://www.vbfrance.com/code.aspx?ID=5704
16 janv. 2006 à 10:59
On peut tout à fait le changer à l'exécution, voici exemple en C que je vous laisse traduire:
hedtxt est le handle du textbox.
int __stdcall PrepBuffEdit()
{
HLOCAL pbuff;
pbuff = (HLOCAL) SendMessage(hedtxt, EM_GETHANDLE, 0, 0);
if(pbuff) LocalFree(pbuff);
pbuff = LocalAlloc(LHND, 2097152); // 2 Mo
if(!pbuff) return 0;
SendMessage(hedtxt, EM_SETHANDLE, (WPARAM) pbuff, 0);
SendMessage(hedtxt, EM_LIMITTEXT, 2097151, 0);
return 1;
}
ATTENTION, si on ferme la fenêtre contenat le EDIT sans finir le prog, il est de la responsabilité du développeur de libérer la mémoire.
16 janv. 2006 à 10:59
Devait déjà dormir à minuit quand j'ai posté !!
16 janv. 2006 à 10:53
Source sans passer par le contrôle Inet - Utilisation de l'API wininet
(tirée de l'API-Guide) et s'inspirant de la source postée :
Option Explicit
Const scUserAgent = "API-Guide test program"
Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PROXY = 3
Const INTERNET_FLAG_RELOAD = &H80000000
Const sURL As String = "http://www.mon-ip.com/"
Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Sub Form_Load()
Dim hOpen As Long
Dim hFile As Long
Dim Ret As Long
Dim lOffset1 As Long
Dim lOffset2 As Long
Dim sBuffer As String
Const sStart As String = "
Votre adresse IP est "
Const sEnd As String = "
"
'Create a buffer for the file we're going to download
sBuffer = Space(5000)
'Create an internet connection
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
'Open the url
hFile = InternetOpenUrl(hOpen, sURL, vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&)
'Read the first 5000 bytes of the file
InternetReadFile hFile, sBuffer, 5000, Ret
'clean up
InternetCloseHandle hFile
InternetCloseHandle hOpen
lOffset1 = InStr(1, sBuffer, sStart, vbTextCompare)
lOffset2 = InStr(lOffset1, sBuffer, sEnd, vbTextCompare)
lOffset1 = lOffset1 + Len(sStart)
lOffset2 = lOffset2 - lOffset1
MsgBox "Adresse IP : " & Mid$(sBuffer, lOffset1, lOffset2)
End Sub
16 janv. 2006 à 10:35
Non, une String est "limitée" à 2 Gbytes, sauf en utilisation à longueur fixe, genre "Dim monTexte As String * X" où X ne peut pas dépasser 65400.
Une TextBox est limitée à 2048 caractères ou 32k en mode MultiLigne.
Une RichTextBox n'a pas de limite (mémoire du PC)
16 janv. 2006 à 09:47
gain de temps ? un Dim n'est pas bien long, accélère le code (pas de Variant)
et évite bien des tracas (fautes de frappe, casting, etc)
le RichTextBox est inutile....
un String suffit très largement.... surtout pour la page utilisée (7.5 ko)
le contrôle Inet aussi, mais c'est excusable... c'est un moyen simple d'accéder au Web...(je favoriserai les API)
16 janv. 2006 à 00:08
2- Exact pour la non déclaration de l1 et l2, cela m'avait échappé. Pour ce qui est de ne pas déclarer les variables, je suis ... TOTALEMENT CONTRE !!! Même pour un petit bout de code d'essai : Personnellement, j'ai activé l'option de VB qui ajoute automatiquement un "Option Explicit" quand tu crées un nouveau module, comme cela, je ne l'oublie jamais et je suis sur d'être obliger de déclarer mes variables, ce que, encore une fois, je pense être une tres bonne chose, même si un module de test va passer pour cela de 10 lignes à 20 lignes. Cela évite les bug du à une faute de frappe, fait que l'on sait toujours de quoi l'on parle et permet de fuir comme la peste les variants (cela rejoint ma croisade pourla réhabilitation des fonctions $)
3- Ma note à ta source, je la justifie en disant simplement que ton code est court (~20 lignes sans les comments), il est commenté et fait bien ce qu'ilest censé faire.
CR
15 janv. 2006 à 23:52
"Pourquoi utiliser un richtextbox pour ca "
=> Je l'ai expliqué dans les commentaires de ma source (voir ligne 5 et 6 du script): le richtext box me permet de stocker une plus grande quantité de caractères qu'une simple variable string (string est limité à je ne sais plus combien de caracteres tandis que je n'ai jamais encore atteint de limite avec un richtext)
"attention a ta variable "DebuT", qui est un variant et pas une String"
=> Je suis étonné que tu ne dise rien à propos de mes variables L1 et L2 que j'ai omis de déclarer :p
J'aime beaucoup le VB pour ça, on n'est pas obligé d'être super rigoureux au niveau des déclarations des variables pour que ça fonctionne, on gagne un temps fou lorsque l'on développe des bouts d'essais, par contre quand on réalise une appli sérieuse, il est clair qu'il vaut mieux faire attention et déclarer toutes ses variables (vive l'option Explicit pour retrouver ses oublis de déclaration hihihi). Néanmoins je peux t'assurer que cette source fonctionne telle qu'elle est affichée sur cette page, que les variables soient bien déclarées ou non, car je l'ai copié-collé direct de mon projet vb (j'aime bien tester avant de poster).
En tout cas, je te remercie pour ta note, c'est plutot sympa car je ne trouve pas que ça le mérite, vu le faible niveau de programmation que ça demande... Je suis certain que d'autres peuvent mieux faire que mon "bricolage",j'espère simplement que ça pourra aider quelques débutants en attendant qu'un code + court et + efficace se présente ;)
@+
15 janv. 2006 à 23:16
CR
15 janv. 2006 à 23:15
Pourquoi utiliser un richtextbox pour ca ! Une simple variable de type String aurait fait
l'affaire !!
Et puis ton Doevents se trouve en dehors d ela boucle Do ... Until alors il ne sert pas à grand chose !
Et attention a ta variable "DebuT", qui est un variant et pas une String ! En VB6, il faut donner le type pour chaque variable, même si elles sont déclarées sur une seule et même ligne de déclaration, contrairement au VB.NET
Je te propose aussi d'utiliser la fonction Mid$(), plutot que Mid() : Ce qui me connaisse sauront que c'ets un de mes chevaux de bataille !
Reste plus qu'à essayer de se passer du controle Inet (qu'à défaut je transmettrais personnellement en tant qu'argument de la fonction) et se sera tres bien ...
CR