IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Sommaire > Système
        Comment obtenir la version de mon application ?
        Comment obtenir la version du framework .NET en cours ?
        Comment obtenir la version de l'OS en cours ?
        Comment obtenir le répertoire d'éxécution de mon application ?
        Comment obtenir le répertoire courant ?
        Comment obtenir le répertoire sytème ?
        Comment obtenir le nom de l'utilisateur dont la session est en cours ?
        Comment obtenir la quantité de mémoire physique allouée à mon application ?
        Comment obtenir la ligne de commande de l'application ?
        Comment obtenir les variables d'environement ?
        Comment obtenir les chemins des répertoires spéciaux comme "Mes Documents" ?
        Comment obtenir la liste des lecteurs logiques ?
        Comment ne lancer qu'une seule instance de mon application ?
        Comment générer des nombres aléatoires
        Comment lancer un processus ?
        Comment ouvrir un fichier avec l'application associée à son extension ?
        Comment rediriger la sortie standard d'un processus ?
        Comment lister les processus en cours d'éxécution ?
        Comment arrêter un processus ?
        Comment convertir un objet d'un type de base en un objet d'un autre type de base ?
        Comment lire et écrire des données sur la console ?
        Comment fonctionne le Garbage Collector ?
        Comment forcer la libération de la mémoire par le Garbage Collector ?
        Comment puis-je appeler une fonction présente dans une DLL win32 ?
        Comment instancier un caractère nul ?
        Comment vérifier la validité d'une adresse IP ?

        


Comment obtenir la version de mon application ?
auteur : abelman
Pour obtenir la version de mon application, on utilise la classe System.Diagnostics.FileVersionInfo

Dim ver As FileVersionInfo = FileVersionInfo.GetVersionInfo(Environment.GetCommandLineArgs()(0)) Dim MyVer as String = ver.FileMajorPart & "." & ver.FileMinorPart & "." & ver.FileBuildPart & "." & ver.FilePrivatePart
Pour obtenir la version d'un fichier (EXE, DLL, OCX, etc..) quelconque, il suffit de passer le chemin du fichier à la fonction GetVersionInfo

lien :  System.Diagnostics.FileVersionInfo
lien :  System.Environment

Comment obtenir la version du framework .NET en cours ?
auteur : abelman
On utilise la propriété Version de la classe System.Environment.

'Version Framework Dim ver as Version = Environment.Version Console.WriteLine("Version Framework = {0}", ver)
lien :  System.Environment
lien :  System.Version

Comment obtenir la version de l'OS en cours ?
auteur : freegreg
On utilise la propriété OSVersion de la classe System.Environment.

'Version du système d'exploitation Dim ver as Version = Environment.OSVersion Console.WriteLine("Version Framework = {0}", ver)
lien :  System.Environment
lien :  System.Version

Comment obtenir le répertoire d'éxécution de mon application ?
auteur : abelman
On utilise la fonction GetCommandLineArgs de la classe System.Environment

'Chemin de l'éxécutable 'Pour les WinForm, on peut aussi utiliser Application.ExecutablePath Dim exepath As String = Environment.GetCommandLineArgs()(0) 'Répertoire de l'executable Dim exedir As String = exepath.Substring(0, exepath.LastIndexOf("\"c))
lien :  System.Environment

Comment obtenir le répertoire courant ?
auteur : abelman
On utilise la propriété CurrentDirectory de la classe Environment

'Répertoire courant Console.WriteLine("Le repertoire courant est : {0}", Environment.CurrentDirectory)
lien :  System.Environment

Comment obtenir le répertoire sytème ?
auteur : abelman
On utilise la propriété SystemDirectory de la classe Environment

'Repertoire systeme Console.WriteLine("Repertoire systeme = {0}", Environment.SystemDirectory)
lien :  System.Environment

Comment obtenir le nom de l'utilisateur dont la session est en cours ?
auteur : abelman
On utilise la propriété UserName de la classe Environment

Console.WriteLine("Nom utilisateur = {0}", Environment.UserName)
lien :  System.Environment

Comment obtenir la quantité de mémoire physique allouée à mon application ?
auteur : abelman
On utilise la propriété WorkingSet de la classe Environment

Console.WriteLine("Mémoire allouée au process en cours = {0} octets", Environment.WorkingSet)
lien :  System.Environment

Comment obtenir la ligne de commande de l'application ?
auteur : abelman
On utilise la propriété CommandLine de la classe Environment pour avoir la ligne entière dans une chaines de caratères

Console.WriteLine("La ligne de commande est : {0}", Environment.CommandLine)
On utilise GetCommandLineArgs pour obtenir un tableau de chaines de caractères contenant chaque argument.

'Arguments de ligne de commande Console.WriteLine("Arguments de ligne de commande") Dim i As Integer Dim args As String() = Environment.GetCommandLineArgs() Dim j As Integer = args.Length For i = 0 To j - 1 Console.WriteLine("Args({0}) = {1}", i, args(i)) Next
lien :  System.Environment

Comment obtenir les variables d'environement ?
auteur : abelman
On utilise la fonction GetEnvironmentVariables de la classe Environment.

Dim env As IDictionary = Environment.GetEnvironmentVariables() 'Pour afficher une variable dont on connait le nom Console.WriteLine("USERNAME = {0}", env("USERNAME")) 'Pour lister toutes les variables Dim en As IEnumerator = env.Keys.GetEnumerator() While en.MoveNext Console.WriteLine("{0} = {1}", en.Current, env(en.Current())) End While
lien :  System.Environment
lien :  System.Collection.IDictionnary
lien :  System.Collection.IEnumerator

Comment obtenir les chemins des répertoires spéciaux comme "Mes Documents" ?
auteur : abelman
On utilise la fonction GetFolderPath de la classe Environment avec l'énumération Environment.SpecialFolder

'Répertoire spéciaux Console.WriteLine("Répertoire spéciaux") Dim specfolderenum As Array = [Enum].GetValues(GetType(Environment.SpecialFolder)) For i As Integer = 0 To specfolderenum.Length - 1 Console.WriteLine(Environment.GetFolderPath(CType(specfolderenum.GetValue(i), Environment.SpecialFolder))) Next
lien :  System.Environment

Comment obtenir la liste des lecteurs logiques ?
auteur : abelman
On utilise la fonction GetLogicalDrives de la classe Environment

'Lecteurs logiques Console.WriteLine("Lecteurs logiques") Dim drives() As String = Environment.GetLogicalDrives() For i As Integer = 0 To drives.Length - 1 Console.WriteLine(drives(i)) Next
lien :  System.Environment

Comment ne lancer qu'une seule instance de mon application ?
auteur : abelman
Il arrive souvent de souhaiter interdire à une application d'avoir plusieurs instances lancées.
Voici une petite classe qui lors du démarrage de l'application, s'assure qu'elle n'est pas déjà en cours d'exécution.
Elle utilise un objet mutex nommé, donc potentiellement visible par tous les autres processus.

Imports System.Threading Class SingleInstanceApp Implements IDisposable Private _siMutex As Mutex Private _siMutexOwned As Boolean Public Sub New(ByVal name As String) _siMutex = New Mutex(False, name) _siMutexOwned = False End Sub Public Function IsRunning() As Boolean _siMutexOwned = _siMutex.WaitOne(0, True) Return Not (_siMutexOwned) End Function Public Sub Dispose() Implements System.IDisposable.Dispose If _siMutexOwned Then _siMutex.ReleaseMutex() End If End Sub End Class
Pour utiliser notre classe, il suffit de procéder ainsi dans le Main de notre application.

Shared Sub Main() Dim app As SingleInstanceApp = New SingleInstanceApp("{123456789 - ABCD - EFEG - XXXX}") Try If app.IsRunning Then MessageBox.Show("Application déjà lancée") Else Application.Run(New Form1) End If Finally CType(app, IDisposable).Dispose() End Try End Sub
Important :

Si une application lambda en cours d'exécution crée un mutex ayant le même nom que celui de notre application, cette dernière ne pourra plus se lancer.
Elle se comportera comme si une autre instance de l'application était déjà en cours.
Il existe une technique pour l'éviter mais cela sort de notre sujet. Veuillez donc à choisir un nom assez compliqué pour votre mutex.


Comment générer des nombres aléatoires
auteur : abelman
La classe System.Random nous permet de générer des nombres aléatoires. Il s'agit en fait de nombres pseudo-aléatoires, car la séquence générée dépend de l'initialisation.

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'Dim rnd As New Random(100) ' Pour générer toujours la même séquence, on passe la même valeur au constructeur. 'Initialisation par défaut basée sur le temp. La séquence est différente à chaque fois. Dim rnd As New Random 'Génération de 15 nombres aléatoires compris entre 0 et 255 (Type Byte) Dim rndNumbers As Byte() = New Byte(14) {} rnd.NextBytes(rndNumbers) ListBox1.Items.Clear() For i As Byte = 0 To 14 ListBox1.Items.Add(rndNumbers(i)) 'On peut aussi faire un modulo pour n'obtenir que des nombres entre 0 et 100 par exemples ListBox2.Items.Add(IIf(rndNumbers(i) > 100, rndNumbers(i) Mod 100, rndNumbers(i))) Next 'Pour Générer des nombres aléatoire de type Integer Dim i As Integer = rnd.Next() Dim j As Integer = rnd.Next(500, 1000) 'j sera compris entre 500 et 1000 'Pour générer des nombre aléatoire de type Double 'd sera compris entre 0,0 et 1,0. 'Il suffit de combiner cet appel à celui de Next() pour avoir des doubles supérieurs à 1,0 Dim d As Double = rnd.NextDouble() End Sub
lien :  System.Random

Comment lancer un processus ?
auteurs : abelman, freegreg
Pour lancer un processus depuis notre application, on utilise la classe System.Diagnostics.Process

Exemple : lancer une instance de internet explorer qui ouvre www.developpez.com

'Instance de la classe Process Dim proc As New System.Diagnostics.Process() 'Nom de l'executable à lancer proc.StartInfo.FileName = "iexplore.exe" 'Arguments à passer à l'éxécutable à lancer proc.StartInfo.Arguments="http://www.developpez.com" 'Démarrage du processus proc.Start() 'On libère les ressources dont on a plus besoin. proc.Close() 'Attention Close ne met pas fin au processus.
lien :  System.Diagnostics.Process

Comment ouvrir un fichier avec l'application associée à son extension ?
auteur : abelman
On peut ouvrir des documents dont l'extension est connue du shell windows comme les .txt ou les .doc avec la classe System.Diagnostics.Process
Exemple : Ouverture d'un fichier texte .txt.

'Instance de la classe System.Diagnostics.Process Dim proc As New Process() 'Nom du fichier dont l'extension est connue du shell à ouvrir proc.StartInfo.FileName = "monfichier.txt" 'Démarrage du processus. Notepad (si il est associé aux fichiers .txt) sera alors lancé et ouvrira le fichier monfichier.txt proc.Start() 'On libère les ressources proc.Close()
lien :  System.Diagnostics.Process

Comment rediriger la sortie standard d'un processus ?
auteur : abelman
Il est possible de rediriger la sortie standard d'un processus et de l'afficher dans un TextBox multiligne par exemple.

Dim proc As New Diagnostics.Process 'On désactive le shell proc.StartInfo.UseShellExecute = False 'On redirige la sortie standard proc.StartInfo.RedirectStandardOutput = True 'On définit la commande proc.StartInfo.FileName = "mem.exe" 'Démarrage de la commande proc.Start() 'Lecture de la sortie de la commande Dim output As String = proc.StandardOutput.ReadToEnd() Console.WriteLine(output) 'Attente de la fin de la commande proc.WaitForExit() 'Libération des ressources proc.Close()
lien :  System.Diagnostics.Process

Comment lister les processus en cours d'éxécution ?
auteur : abelman
Pour lister les processus en cours on utilise la fonction

'Pour tous les processus en cours sur l'ordinateur local Dim prc as System.Diagnostics.Process() = Process.GetProcesses() 'Pour tous les processus notepad en cours sur l'ordinateur local Dim prc as System.Diagnostics.Process() = Process.GetProcessesByName("notepad")
lien :  System.Diagnostics.Process

Comment arrêter un processus ?
auteur : abelman
Pour arrêter un processus, il faut disposer d'un objet System.Diagnostics.Process qui représente le processus.

'Pour les applications consoles proc.Kill() proc.Close() 'Libération des ressources
Pour les applications WinForm il est préférable d'utiliser CloseMainWindow afin que l'application reçoive le message de fermeture et se ferme correctement.

'Pour les applications avec une interface graphique (et donc une pompe de messages) proc.CloseMainWindow() 'Si l'appel échoue, on peut alors forcer la fermeture avec Kill. proc.Close() 'Libération des ressources
lien :  System.Diagnostics.Process

Comment convertir un objet d'un type de base en un objet d'un autre type de base ?
auteur : abelman
La classe System.Convert permet de convertir des objets de types de base. Il existe d'autres méthodes pour le faire mais l'avantage de la classe System.Convert est qu'elle est indépendante du langage utilisé.
System.Convert dispose d'une multitude de méthodes pour effectuer toutes les conversions possibles entre les types de bases.

Voici quelques exemples

'Conversion d'un entier vers une chaine de caractère Dim i as Integer = 10 Dim s as string = Convert.ToString(i) 'Conversion d'une chaine vers un entier i = Convert.ToInt32(s) 'Notez que si la conversion ne peut se faire, une exception est levée. Ce serait le cas si s = "NonNumérique"
Il est aussi possible d'utiliser la méthode Parse de chaque type de base.

Dim s as String = "35000" Dim i as Integer = Integer.Parse(s)
On peut aussi utiliser l' opérateur de cast CType

Dim s as string = "35000" Dim i as Integer = CType(s, Integer)
Enfin les méthodes VB6 (pour la compatibilité, à éviter pour les nouveaux projets) sont toujours présentes.
Il s'agit de CBool, CInt, CStr, CSingle, etc ....

Dim s as String = "35000" Dim i As Integer = CStr(s)
lien :  System.Convert

Comment lire et écrire des données sur la console ?
auteur : abelman
Il vous faut utiliser la classe System.Console et les méthodes qui la compose.

Public Class SaisiTexte Private Shared _Texte As String Public Shared Sub Main() Console.WriteLine("Saisissez un texte: ") _Texte = Console.ReadLine Console.WriteLine("Vous avez écrit : " + _Texte) End Sub End Class
Console.Writeline écrit par défaut sur
  • La console si il y en a une active
  • La fenêtre de debug (onglet Sortie - Déboguer) si l'application ne possède pas de console. Une application WinForm par exemple

lien :  System.Console

Comment fonctionne le Garbage Collector ?
auteur : Keihilin
Ce qui suit est extrait d'un échange sur le forum dotnet.
C'est très shématique mais cela résume bien comment le .NET Framework s'y prend pour gérer la mémoire

Le .NET Framework : Salut OS, j'ai des trucs à lancer, j'peux te prendre de la ram ?
L'OS : Hé Salut ! Je t'en pris, sers-toi !
Le .NET Framework : Sympa mec. J't'en prend 50Mo maintenant, j'ai besoin que de 15 Mo,
mais comme ça je te dérange pas si j'ai besoin de plus.

...

Le .NET Framework : Hé l'OS, t'es short niveau mémoire ?
L'OS : Non non, tout va bien.
Le .NET Framework : Bon, alors je garde mes 50 Mo encore un peu.
L'OS : Oki.

...

SQL Server : Bonjour M. l'OS, j'ai un gros besoin de mémoire...au moins 200 Mo.
L'OS : Ben sers-toi donc.
SQL Server : Ouais mais y a plus que 180Mo !
L'OS : Ah OK, attend 2 millisecondes stp...
L'OS : Hé Framework, tu peux me rendre un peu de RAM ?
Le .NET Framework : No problemo, j'te fais ça tout de suite...
Le .NET Framework : Garbage Collector, soit un amour et va rendre de la mémoire à l'OS.
Garbage Collector : J'y cours patron.

C'est clair non ?


Comment forcer la libération de la mémoire par le Garbage Collector ?
auteur : morpheus
Pour forcer le Garbage Collector à libérer la mémoire inutilisée par le .NET Framework, on peut appeller la méthode Collect de la classe GC.

System.GC.Collect()
Par contre, pour des raisons qui justifieraient à elles seules un article, il n'est pas conseillé d'appeller GC.Collect() directement.
Par conséquent, ne le faites pas à moins d'être un expert du garbage collector.


Comment puis-je appeler une fonction présente dans une DLL win32 ?
auteur : abelman
Pour appeler une fonction présente dans une DLL, vous devez utiliser DllImport et vous devez toujours faire précéder le type de la méthode du mot clé extern (cela permet de spécifier que la méthode est appelée dans un fichier externe à l'application).
Vous devez aussi connaître :
  • - le nom de la méthode
  • - le type qu'elle renvoie
  • - les paramètres qu'elle peut accepter
Ces informations vous sont généralement fournies avec la documentation de la méthode désirée.
Voici un exemple :

Imports System.Runtime.InteropServices class Class1 Private Declare Function FlashWindow Lib "user32.dll" ( _ ByVal hwnd As Integer, _ ByVal bInvert As Integer) As Integer End class
Cette méthode, extraite du fichier user32.dll, renvoie un entier et prend en paramètre 2 autres entiers.


Comment instancier un caractère nul ?
auteur : abelman
Dim c As Char = Convert.ToChar(0)
C'est aussi simple que cela


Comment vérifier la validité d'une adresse IP ?
auteurs : pharaonix, abelman
Avec les expressions régulières.
On utilise le namespace System.Text.RegularExpressions.

Public Function CheckIpAddr(ByVal ipAddress As String) As Boolean Dim re As String = "^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$" Return Regex.IsMatch(ipAddress, re) End Function
Version sans expression régulière.
On se sert de la fonction Split de la classe String pour parser la chaine, puis on analyse les différentes sous-chaînes.

Public Function CheckIpAddrNoRegex(ByVal ipAddress As String) As Boolean Dim ipPartList As String() If ipAddress Is Nothing OrElse ipAddress = "" Then Return False End If ipPartList = ipAddress.Split("."c) If Not (ipPartList.Length = 4) Then Return False End If Try Dim ipPartNumber As Byte = Convert.ToByte(ipPartList(0)) ipPartNumber = Convert.ToByte(ipPartList(1)) ipPartNumber = Convert.ToByte(ipPartList(2)) ipPartNumber = Convert.ToByte(ipPartList(3)) Catch Return False End Try Return True End Function
lien :  Regex

        

Consultez les autres F.A.Q's

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2005 Abel Mandengue Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.