Le problème principal est de composer le code: Pendant que j'essayais j'ai fait face à d'autres problèmes. Bien que le code ci-dessus de Hogo, beaucoup aidé, mais il y a quelques conseils qui seraient utiles pour le codage sans tracas:
Tout d'abord les conseils suivants vous oblige à composer votre connexion manuellement et tester votre internet en exécutant un site Web sur votre Internet Explorer. Si Internet fonctionne, alors vous êtes bon d'aller le composer à travers le code.
Pour le faire manuellement:
Faire une nouvelle connexion nommée « GPRS » à l'aide « Réseau et connexions commutées » (utilisez ce lien: http://www.e-consystems.com/gprs.asp). Si vous utilisez airtel SIM changer baudarate de 19200 à 115200. Connectez-le et vérifiez si internet fonctionne.
Composition par code:
Lorsque vous créez une connexion nommée "GPRS" manuellement, 3 registres sont effectués sous le dossier GPRS. (HKEY_CURRENT_USER \ Comm \ RasBook \ GPRS). ces dossiers ne peuvent pas être affichés normalement. Nécessite une application à installer dans le PDA qui lit les registres. Il n'est pas nécessaire de voir ce qui est à l'intérieur, si vous les téléchargez ensuite en fonction des versions de Windows.
Sur 3 registres créés, seuls deux d'entre eux sont pertinents (DevCfg et Entrée). Une fois que vous avez composé et connecté manuellement à Internet, copiez les données des registres DevCfg et Entry dans un fichier texte (DevCfg.txt et Entry.txt) afin de pouvoir les copier ultérieurement. Pour copier vers/depuis des registres vers un fichier texte, utilisez: RegQueryValueEx (...), RegOpenKeyEx (..), RegSetValueEx (...) Et d'autres fonctions pertinentes (voir http://msdn.microsoft.com/en-us/library/windows/desktop/ms724911%28v=vs.85%29.aspx)
Par exemple: Lire registre et écrire dans le fichier texte:
public static bool ReadRegString(IntPtr hKey, string lpszSubKey, string lpValueName)
{
try
{
string str = "";
byte[] lpData = new byte[684];
uint lpcbValue = 684;
uint dwType = Utils.REG_BINARY;
IntPtr phkResult = new IntPtr();
Utils.RegOpenKeyEx(hKey, lpszSubKey, 0, 0, ref phkResult);
if (phkResult != IntPtr.Zero)
{
int x = Utils.RegQueryValueEx(phkResult, lpValueName, 0, ref dwType, lpData, ref lpcbValue);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 684; i++)
{
if (i != 683)
sb.Append(lpData[i].ToString() + "|");
else
sb.Append(lpData[i].ToString());
}
using (System.IO.StreamWriter outfile = new System.IO.StreamWriter(filePath))
{
outfile.Write(sb.ToString());
}
Utils.RegCloseKey(phkResult);
}
}
if (Utils.ReadRegString(Utils.HKEY_CURRENT_USER, @"Comm\RasBook\GPRS", "DevCfg"))
{
textBoxSysVers.Text = "Succeeded Make Text File.";
}
- maintenant composer avec make code nous utilisons des RASENTRY (ajouter des bibliothèques neccessary; vérifier réponse Hogo dans Making GPRS Connection programmatically using C# for windows CE 5.0?)
a) créer un objet RASENTRY
b) Copier les données du fichier texte créé "Entry.txt et DevCfg.txt" pour enregistrer les entrées et les devCfg de manière ré- férée.
c) Composez RasError re = cEntry.Dial (...)
Pour exmaple:
private const string CONNAME = "GPRS";
private const string PHONENR = "*99#";
private const string USER = "xx";
private const string PWD = "xx";
private const string DEVICE_TYPE = "modem";
private const string DEVICE_NAME = "Cellular Line";
{ RasEntry cEntry = new RasEntry()
{
Name = CONNAME,
CountryCode = 91,
AreaCode = "120",
PhoneNumber = PHONENR,
DeviceName = DEVICE_NAME,
DeviceType = DEVICE_TYPE,
IPAddress = "0.0.0.0",
IPAddressDns = "0.0.0.0",Options=4194304
};
RasDialParams dialParams = new RasDialParams()
{
UserName = USER,
Password = PWD,
EntryName = CONNAME,
Domain = " "
}
if (Utils.WriteRegValue(Utils.HKEY_CURRENT_USER, @"Comm\RasBook\GPRS", "DevCfg","Entry",3))
{
RasError re = cEntry.Dial(false, new RasDialParams(CONNAME, USER, PWD));
RasError rs = re;
textBoxInfo.Text = re.ToString() + " : Dial Status";
if(rs.ToString()=="Success")
textBoxInfo.Text = cEntry.Status.State.ToString() + " : Dial Status";
}
}
public static Boolean WriteRegValue(IntPtr hKey, string lpszSubKey, string lpValueName1, string lpValueName1,uint dwType)
{
int iOper = 1;
filePath = @"`enter code here`\DevCfg.txt";
IntPtr phkResult = new IntPtr();
Utils.RegOpenKeyEx(hKey, lpszSubKey, 0, 0, ref phkResult);
if (phkResult == IntPtr.Zero)
{
int iSecurity = 0;
int dwDisp = 0;
RegCreateKeyEx(hKey, lpszSubKey, 0, null, 0, 0, ref iSecurity, ref phkResult, ref dwDisp);
}
if (phkResult != IntPtr.Zero)
{
byte[] bytes = new byte[684];
string[] text = new string[684];
using (System.IO.StreamReader streamReader = new System.IO.StreamReader(filePath, Encoding.UTF8))
{
text = streamReader.ReadToEnd().Split('|');
}
for (int i = 0; i < 684; i++)
{
bytes[i] = Convert.ToByte(Convert.ToInt32(text[i]));
}
iOper = Utils.RegSetValueEx(phkResult, lpValueName1, 0, dwType, bytes, (uint)bytes.Length);
Utils.RegCloseKey(phkResult);
}}
// similairement faire de lpValueName2
}}
La différence entre le code de hogo et ceci est que RasEntry n'est pas créé ici. Il est alimenté à partir de registres. J'ai fait face à des difficultés lors de la création d'objet et donc de la suggestion. J'espère que ça aide :)
Où est l'APN dans vos paramètres? –
J'ai ajouté plus de détails au code source. – HoGo
Que se passe-t-il si vous supprimez test1 et test2, puis recréer seulement test2? Est-ce que test2 fonctionne alors? –