OVH Cloud OVH Cloud

[WD9] Wake On Lan

8 réponses
Avatar
Fredo MT
Bonjour,

Quelqu'un parmi vous a-t-il déjà créé une procédure WOL pour allumer des PC
sur un réseau ? Je me suis servi d'un code source C# avec lequel j'ai fais
une assembly que j'ai importé dans mon appli Windev. Cela fonctionne, mais
je n'aime pas trop cette solution, dès que j'utilise un assemblage .NET dans
une appli Windev et que je lance l'exe via une lettre réseau j'ai toujours
un message d'erreur sur les DLL WD90NET.DLL et WD90VM.DLL que je ne
m'explique pas. Avez-vous déjà réalisé cela, par des API ou autre ?

Merci pour vos réponses.

8 réponses

Avatar
Gilles TOURREAU
Fredo MT a formulé la demande :
Bonjour,

Quelqu'un parmi vous a-t-il déjà créé une procédure WOL pour allumer des PC
sur un réseau ? Je me suis servi d'un code source C# avec lequel j'ai fais
une assembly que j'ai importé dans mon appli Windev. Cela fonctionne, mais je
n'aime pas trop cette solution, dès que j'utilise un assemblage .NET dans une
appli Windev et que je lance l'exe via une lettre réseau j'ai toujours un
message d'erreur sur les DLL WD90NET.DLL et WD90VM.DLL que je ne m'explique
pas. Avez-vous déjà réalisé cela, par des API ou autre ?

Merci pour vos réponses.



Je pense que ton problème vient d'un paramètrage de .NET. J'ai vu dans
des forums .NET que des gens avait des problèmes lorsqu'il lançait un
exe .NET sur un poste réseau. (Ce sont en fait des réglages de sécurité
.NET qui faut désactiver...)

Maintenant si tu veux faire de l'API pour ta procédure WOL, est ce que
tu peux m'envoyer le code source C# de la procédure et je pourrais
peut-être faire quelque chose...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Fredo MT
No problemo Gilles,

merci d'avance pour ton aide, je pense que cette fonction sera utile à
beaucoup de monde.

Voici le code source C#, si tu préfères par mail dis-le moi :

using System;

using System.Collections.Generic;

using System.Globalization;

using System.Net;

using System.Net.Sockets;

using System.Security;

using System.Text;

using System.Text.RegularExpressions;

namespace MonNameSpace.Net

{

public class WakeOnLan

{

#region Fields

protected string _sMacAddress;

#endregion

#region Constructors

public WakeOnLan(string macAddress)

{

if (macAddress == null)

throw new ArgumentNullException("macAddress");

if (!IsValid(ref macAddress))

throw new ApplicationException(

string.Format("The MAC address is not valid ("{0}")",

macAddress)

);

//TODO Check mac address validity

_sMacAddress = macAddress;

}

#endregion

#region Properties

public string MacAddress

{

get

{

return _sMacAddress;

}

}

#endregion

#region Methods

public void Wake()

{

UdpClient oClient = new UdpClient();

oClient.Connect(new

IPAddress(0xffffffff), //255.255.255.255 i.e broadcast

0x2fff); // port287 let's use this one

oClient.Client.SetSocketOption(SocketOptionLevel.Socket,

SocketOptionName.Broadcast, 0);

//set sending bites

int counter = 0;

//buffer to be send

byte[] bytes = new byte[1024]; // more than enough :-)

//first 6 bytes should be 0xFF

for (int y = 0; y < 6; y++)

bytes[counter++] = 0xFF;

//now repeate MAC 16 times

for (int y = 0; y < 16; y++)

{

int i = 0;

for (int z = 0; z < 6; z++)

{

bytes[counter++]
byte.Parse(_sMacAddress.Substring(i, 2),

NumberStyles.HexNumber);

i += 2;

}

}

//now send wake up packet

int reterned_value = oClient.Send(bytes, 1024);

oClient.Close();

}

#endregion

#region Helpers

protected static bool IsValid(ref string macAddress)

{

if (macAddress.IndexOf('-') != -1)

macAddress = macAddress.Replace("-", "");

Regex rx = new Regex("([0-9a-fA-F][0-9a-fA-F]){5}([0-9a-fA-F][0-9a-fA-F])",
RegexOptions.IgnoreCase);

return rx.IsMatch(macAddress) && rx.Matches(macAddress)[0].Length == 12;

}

#endregion

}

}


"Gilles TOURREAU" a écrit dans le message de news:

Fredo MT a formulé la demande :
Bonjour,

Quelqu'un parmi vous a-t-il déjà créé une procédure WOL pour allumer des
PC sur un réseau ? Je me suis servi d'un code source C# avec lequel j'ai
fais une assembly que j'ai importé dans mon appli Windev. Cela
fonctionne, mais je n'aime pas trop cette solution, dès que j'utilise un
assemblage .NET dans une appli Windev et que je lance l'exe via une
lettre réseau j'ai toujours un message d'erreur sur les DLL WD90NET.DLL
et WD90VM.DLL que je ne m'explique pas. Avez-vous déjà réalisé cela, par
des API ou autre ?

Merci pour vos réponses.



Je pense que ton problème vient d'un paramètrage de .NET. J'ai vu dans des
forums .NET que des gens avait des problèmes lorsqu'il lançait un exe .NET
sur un poste réseau. (Ce sont en fait des réglages de sécurité .NET qui
faut désactiver...)

Maintenant si tu veux faire de l'API pour ta procédure WOL, est ce que tu
peux m'envoyer le code source C# de la procédure et je pourrais peut-être
faire quelque chose...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr




Avatar
Fredo MT
Encore merci Gilles.

Pour ceux que cela intéresse demander moi le code par mail
Grâce à Gilles nous avons pu créer la procédure WakeOnLan qui permet
d'allumer des PC sur un réseau 100 % W-Langage.

"Gilles TOURREAU" a écrit dans le message de news:

Fredo MT a formulé la demande :
Bonjour,

Quelqu'un parmi vous a-t-il déjà créé une procédure WOL pour allumer des
PC sur un réseau ? Je me suis servi d'un code source C# avec lequel j'ai
fais une assembly que j'ai importé dans mon appli Windev. Cela
fonctionne, mais je n'aime pas trop cette solution, dès que j'utilise un
assemblage .NET dans une appli Windev et que je lance l'exe via une
lettre réseau j'ai toujours un message d'erreur sur les DLL WD90NET.DLL
et WD90VM.DLL que je ne m'explique pas. Avez-vous déjà réalisé cela, par
des API ou autre ?

Merci pour vos réponses.



Je pense que ton problème vient d'un paramètrage de .NET. J'ai vu dans des
forums .NET que des gens avait des problèmes lorsqu'il lançait un exe .NET
sur un poste réseau. (Ce sont en fait des réglages de sécurité .NET qui
faut désactiver...)

Maintenant si tu veux faire de l'API pour ta procédure WOL, est ce que tu
peux m'envoyer le code source C# de la procédure et je pourrais peut-être
faire quelque chose...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr




Avatar
Alexey K.
Pourquoi ne pas le publier ici ou sur un site dédié a WD?

Le code m'intéresse :

Merci par avance,

Cordialement,

Alexey K.
Avatar
Freddie
Bonjour,
Je suis également très intéressée par ce code.
Freddie


Fredo MT vient de nous annoncer :
Encore merci Gilles.

Pour ceux que cela intéresse demander moi le code par mail
Grâce à Gilles nous avons pu créer la procédure WakeOnLan qui permet d'allumer des PC sur un réseau 100 %
W-Langage.

"Gilles TOURREAU" a écrit dans le message de news:

Fredo MT a formulé la demande :
Bonjour,

Quelqu'un parmi vous a-t-il déjà créé une procédure WOL pour allumer des PC sur un réseau ? Je me suis
servi d'un code source C# avec lequel j'ai fais une assembly que j'ai importé dans mon appli Windev.
Cela fonctionne, mais je n'aime pas trop cette solution, dès que j'utilise un assemblage .NET dans une
appli Windev et que je lance l'exe via une lettre réseau j'ai toujours un message d'erreur sur les DLL
WD90NET.DLL et WD90VM.DLL que je ne m'explique pas. Avez-vous déjà réalisé cela, par des API ou autre
?

Merci pour vos réponses.



Je pense que ton problème vient d'un paramètrage de .NET. J'ai vu dans des forums .NET que des gens
avait des problèmes lorsqu'il lançait un exe .NET sur un poste réseau. (Ce sont en fait des réglages de
sécurité .NET qui faut désactiver...)

Maintenant si tu veux faire de l'API pour ta procédure WOL, est ce que tu peux m'envoyer le code source
C# de la procédure et je pourrais peut-être faire quelque chose...

Cordialement

-- Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr







--

Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Avatar
Fredo MT
PROCEDURE WakeOnLan(sAdresse)

ch est une chaîne

i est un entier

j est un entier

mac est une chaîne = sAdresse

// Récupération de la taille de l'adresse MAC

SELON Taille(sAdresse)

CAS 12


CAS 17

SELON Milieu(sAdresse,3,1)

CAS ":"

sAdresse = Remplace(sAdresse,":","")

CAS "-"

sAdresse = Remplace(sAdresse,"-","")

AUTRE CAS

Erreur("Adresse MAC incorrecte !")

RETOUR

FIN

AUTRE CAS

Erreur("Taille de l'adresse MAC incorrecte !")

RETOUR

FIN

SI VérifieExpressionRégulière(sAdresse,"[a-fA-F0-9]{12}") ALORS

SI SocketCréeUDP("WOL",12287) = Vrai ALORS

POUR i = 1 A 6

ch += Caract(255)

FIN

POUR i = 1 A 16

POUR j = 1 A 12 PAS 2

ch += Caract(HexaVersEntier(mac[[j sur 2]]))

FIN

FIN

j = Taille(ch)

POUR i = j A 1023

ch += Caract(0)

FIN

SI PAS SocketEcrit("WOL",ch,"255.255.255.255",12287) ALORS

Erreur("Erreur lors de l'écriture sur la socket !")

SINON

SocketFerme("WOL")

FIN

SINON

Erreur("Erreur lors de la création de la socket !")

FIN

SINON

Erreur("Adresse MAC incorrecte !")

FIN


FONCTION HexaVersEntier(ch)

ValD est un entier

ValH est une chaîne

i est un entier

ValD=0

ValH=Majuscule(ch)

// Si la chaîne n'est pas nulle

SI ValH<>"" ALORS

// Pour chaque lettre de la chaîne

POUR i=Taille(ValH) A 1 PAS -1

// On la convertit en sa valeur décimale

// et on l'ajoute au résultat en la multipliant par la puissance de 16
correspondante

SELON ValH[[Taille(ValH)+1-i]]

CAS "A": ValD*Puissance(16,i-1)+ValD

CAS "B": ValD*Puissance(16,i-1)+ValD

CAS "C": ValD*Puissance(16,i-1)+ValD

CAS "D": ValD*Puissance(16,i-1)+ValD

CAS "E": ValD*Puissance(16,i-1)+ValD

CAS "F": ValD*Puissance(16,i-1)+ValD

AUTRES CAS: ValD=Val(ValH[[Taille(ValH)+1-i]])*Puissance(16,i-1)+ValD

FIN

FIN

FIN

// Renvoie le résultat

RENVOYER ValD




"Fredo MT" a écrit dans le message de news:
44774b35$0$6154$
Encore merci Gilles.

Pour ceux que cela intéresse demander moi le code par mail
Grâce à Gilles nous avons pu créer la procédure WakeOnLan qui permet
d'allumer des PC sur un réseau 100 % W-Langage.

"Gilles TOURREAU" a écrit dans le message de
news:
Fredo MT a formulé la demande :
Bonjour,

Quelqu'un parmi vous a-t-il déjà créé une procédure WOL pour allumer des
PC sur un réseau ? Je me suis servi d'un code source C# avec lequel j'ai
fais une assembly que j'ai importé dans mon appli Windev. Cela
fonctionne, mais je n'aime pas trop cette solution, dès que j'utilise un
assemblage .NET dans une appli Windev et que je lance l'exe via une
lettre réseau j'ai toujours un message d'erreur sur les DLL WD90NET.DLL
et WD90VM.DLL que je ne m'explique pas. Avez-vous déjà réalisé cela, par
des API ou autre ?

Merci pour vos réponses.



Je pense que ton problème vient d'un paramètrage de .NET. J'ai vu dans
des forums .NET que des gens avait des problèmes lorsqu'il lançait un exe
.NET sur un poste réseau. (Ce sont en fait des réglages de sécurité .NET
qui faut désactiver...)

Maintenant si tu veux faire de l'API pour ta procédure WOL, est ce que tu
peux m'envoyer le code source C# de la procédure et je pourrais peut-être
faire quelque chose...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr








Avatar
Alexey K.
Félicitations,

le WOL fonctionne parfaitement.

Cordialement,

Alexey K.
Avatar
Fredo MT
Pour info,

l'adresse mac doit être de la forme 00123456789A pour que cela fonctionne.
L'adresse MAC doit subir une transformation si elle est de la forme
00-12-34-56-78-9A ou 00:12:34:56:78:9A

"Fredo MT" a écrit dans le message de news:
44774b35$0$6154$
Encore merci Gilles.

Pour ceux que cela intéresse demander moi le code par mail
Grâce à Gilles nous avons pu créer la procédure WakeOnLan qui permet
d'allumer des PC sur un réseau 100 % W-Langage.

"Gilles TOURREAU" a écrit dans le message de
news:
Fredo MT a formulé la demande :
Bonjour,

Quelqu'un parmi vous a-t-il déjà créé une procédure WOL pour allumer des
PC sur un réseau ? Je me suis servi d'un code source C# avec lequel j'ai
fais une assembly que j'ai importé dans mon appli Windev. Cela
fonctionne, mais je n'aime pas trop cette solution, dès que j'utilise un
assemblage .NET dans une appli Windev et que je lance l'exe via une
lettre réseau j'ai toujours un message d'erreur sur les DLL WD90NET.DLL
et WD90VM.DLL que je ne m'explique pas. Avez-vous déjà réalisé cela, par
des API ou autre ?

Merci pour vos réponses.



Je pense que ton problème vient d'un paramètrage de .NET. J'ai vu dans
des forums .NET que des gens avait des problèmes lorsqu'il lançait un exe
.NET sur un poste réseau. (Ce sont en fait des réglages de sécurité .NET
qui faut désactiver...)

Maintenant si tu veux faire de l'API pour ta procédure WOL, est ce que tu
peux m'envoyer le code source C# de la procédure et je pourrais peut-être
faire quelque chose...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr