سؤال احتار فيه كثير من المبرمجين المصممين
وهو كيف يممكن تغيير ال IP ADDRESS للجهاز عن طريق برنامج بواسطة فيجوال بيسك
وبدون ان تدخل الى اعدادات ال TCP \ IP
ساطرح هذا السؤال لاعظاء المنتدى ليبدوا أرائهم فيه وكل واحد يعطي ما لديه من اقتراحات
سؤال احتار فيه كثير من المبرمجين المصممين
وهو كيف يممكن تغيير ال IP ADDRESS للجهاز عن طريق برنامج بواسطة فيجوال بيسك
وبدون ان تدخل الى اعدادات ال TCP \ IP
ساطرح هذا السؤال لاعظاء المنتدى ليبدوا أرائهم فيه وكل واحد يعطي ما لديه من اقتراحات
综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容
إن أفضل جندي هو الذي لا يقــــــــــــاتل
والمقاتل المتمكن هو الذي ينجح بلا عنف
وأعظم فاتح يكسب دون حـــــــــــــــــرب
وأنجح مدير يقود دون إصدار الأوامـــــــر
إن هذا ما يسمى ذكاء عدم الهجـــــــــــــوم
وما يطلق عليه سيادة الرجــــــــــــــــــــال
综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容
أخي الفاضل :
لكي تقوم بتغيير رقم الـ IP لجهازك فسوف يتم ذلك عن طريق الـ Regisrty من خلال مفتاحين و إليك طريقه سهلة للتعامل مع الريجيستري , طبعا هناك طرق أخرى, لكن هذه أبسطهم , و قد كنت تعلمتها من الأخ عبدالله فتحي جزاه الله خيرا:
أولا سنعتمد على استخدام الكائن Wscript :
في منطقة الإعلان العام General :
Dim wsh As Object Dim strServiceName As String
ثم نكتب الأسطر التالية في الحدث Click لزر الأمر:
Set wsh = CreateObject("wscript.shell")
strServiceName = wsh.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\1\ServiceName")
wsh.RegWrite "HKLM\SYSTEM\CurrentControlSet\Services\" & strServiceName & "\Parameters\Tcpip\IPAddress", Text1.Textو الآن إلى الشرح:
السطر الأول نقوم فيه بإنشاء كائن و هذه السطر بسيط .
أما السطر الثاني فنقوم من خلاله بقراءة قيمة مدخل موجود في الريجيستري و هو ServiceName و الموجودة في الموقع التالي :
strServiceName = wsh.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\1الرقم واحد يعني أنه أول كارت شبكة موجود على الجهاز , فإذا كان هناك أكثر من كارت شبكة ستجدهم مرقمين بالترتيب : 1 , 2 , 3 , ... و هكذا
و سنجد كما قلنا في هذا المسار المدخل ServiceName , سنأخذ القيمة الموجودة في هذا المدخل و نذهب بها إلى مكان آخر في الريجيستري و هو :
HKLM\SYSTEM\CurrentControlSet\Services\
و نبحث داخل هذا المفتاح الأخير عن مفتاح فرعي يحمل نفس القمية التي سبق أن أخذناها من المفتاح السابق , ثم ندخل إليها فنجد التالي : \Parameters ثم \Tcpip فنجد رقم الأيبي في مدخل يسمى IPAddress و هو مانحتاجه لتغيير رقم الأيبي للجهاز , فيصبح السطر الثاني :
wsh.RegWrite "HKLM\SYSTEM\CurrentControlSet\Services\" & strServiceName & "\Parameters\Tcpip\IPAddress", Text1.Text
هو الوسيلة للوصول لهذا المدخل و تغيير قيمته بالقيمة الموجودة في مربع النص المدخل سابقا...
بقي أن أذكر أن تأثير العملية السابقة ستقوم بتغيير رقم الأيبي للجهاز داخل الريجيستري لكن لن يأخذ مجراه الفعلي على كارت الشبكة إلا بعد عمل Restart للجهاز.
و لك مني جزيل الشكر,,, (h)
____________________________________________________________________________
{ اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ } سورة الأنبياء (1)
____________________________________________________________________________
In a world without walls and fences, who needs Windows and Gates
الاخ الفاضل Alaa Awaad
اشكرك كل الشكر على اهتمامك بالموضوع
الفكرة ممتازة ولكني للاسف حاولت انفذ الكود ولكنه يظهر اخطاء
الخطأ هو "INVALID ROOT IN REGISTRY KEY "
اضافة الى ان الكود يقبل بادخل IP ADDRESS ولكنه لا يقبل بادخال
Ddfault gateway
ارجو التوضيح اذا كان ذلك ممكنا
شاكرا لك اهتمامك ونشاطك في المنتدى
ابو بشار
综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容
إن أفضل جندي هو الذي لا يقــــــــــــاتل
والمقاتل المتمكن هو الذي ينجح بلا عنف
وأعظم فاتح يكسب دون حـــــــــــــــــرب
وأنجح مدير يقود دون إصدار الأوامـــــــر
إن هذا ما يسمى ذكاء عدم الهجـــــــــــــوم
وما يطلق عليه سيادة الرجــــــــــــــــــــال
综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容
أخي الفاضل:
بالنسبة لرسالة الخطأ فيجب أن تتأكد من رقم المفتاح الموجود فيه رقم الأيبي ( رقم 1 أو 2 أو .... أتذكر؟؟ ), و لتجنب هذه المشكله من الممكن أن تقوم بعمل Loop من 1 إلى 10 ليبحث عن المفتاح فمن الممكن أن يأخذ كارت الشبكة مفتاح رقم 5 أو 6 أو 9 , و لتجنب ذلك نقوم بعمل Loop للبحث عن المفتاح المطلوب كما يلي :
نقوم بعمل روتين للبحث عن قمية المفتاح فإن كانت القيمة موجودة إذا ننهي الـ Loop
private sub NCheck()
dim Ncard as integer
for Ncard =1 to 10
strServiceName = wsh.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\" & Ncard & "\ServiceName")
if strServiceName <> "" then exit sub
next
end subو نقوم بعد ذلك بطل هذا الروتين من الكود الأساسي , و هذا الشكل النهائي له :
Set wsh = CreateObject("wscript.shell")
call Ncheck
wsh.RegWrite "HKLM\SYSTEM\CurrentControlSet\Services\" & strServiceName & "\Parameters\Tcpip\ IPAddress ", Text1.Textهذا بالنسبة للرقم .
بالنسبة للـ Defualtgateway نقوم بعمل نفس الخطوات بدون أي تغيير إلا في السطر الأخير نستبدل IPAddres بـ Defualtgateway مع إضافة Textbox لأخذ القيمة الجديدة.
و أذكرك أخي مرة أخرى أنه يجب عمل Restart للجهاز ليتم تفعيل الكود.
و لك مني جزيل الشكر ,,, (h)
تم تعديل هذه المشاركة بواسطة Alaa Awaad في 30 أغسطس 2005 في 10:59
____________________________________________________________________________
{ اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ } سورة الأنبياء (1)
____________________________________________________________________________
In a world without walls and fences, who needs Windows and Gates
اخي العزيز
عفوا على ازعاجك
اريد ان اخبرك باني جربت الكود ولكن للاسف انه لا يتعرف على ال opject فعندما اكتب wsh. لا تظهر قائمة حتى نختار منها regRead
وبذلك يظهر خطا دون ان يضيف اي اسم الى strservicename
طبعا نفس الرسالة السابقة رقم الخطأ هو 2147024894 -
و لك مني جزيل الشكر,,,
综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容
إن أفضل جندي هو الذي لا يقــــــــــــاتل
والمقاتل المتمكن هو الذي ينجح بلا عنف
وأعظم فاتح يكسب دون حـــــــــــــــــرب
وأنجح مدير يقود دون إصدار الأوامـــــــر
إن هذا ما يسمى ذكاء عدم الهجـــــــــــــوم
وما يطلق عليه سيادة الرجــــــــــــــــــــال
综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容
أخي الحبيب:
نسيت أن أضيف السطر التالي في بداية الـ Sub الخاص بالبحث عن رقم كارت الشبكة و هو :
On error resume next
فتصبح كالتالي :
Private Sub NCheck()
On Error Resume Next
For Ncard = 1 To 10
strServiceName = wsh.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\" & Ncard & "\ServiceName")
If strServiceName <> "" Then Exit Sub
Next
End Subو لكي تتأكد مما يحدث أجر إختبار للكود من خلال msgbox بعد أن تضع إعلان المتغير Ncard في المنطقة العامة و ليس في داخل الـ Sub كالتالي:
Dim wsh As Object
Dim strServiceName As String
Dim ipnum As String
Dim Ncard As Integer
Private Sub NCheck()
On Error Resume Next
For Ncard = 1 To 10
strServiceName = wsh.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\" & Ncard & "\ServiceName")
If strServiceName <> "" Then Exit Sub
Next
End Sub
Private Sub cmdread_Click()
Set wsh = CreateObject("wscript.shell")
Call NCheck
MsgBox Ncard
MsgBox strServiceName
End Subهذا الكود كاملا لإختبار مكان المفتاح الخاص بكارت الشبكة
و لك مني جزيل الشكر,,, (h)
____________________________________________________________________________
{ اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ } سورة الأنبياء (1)
____________________________________________________________________________
In a world without walls and fences, who needs Windows and Gates
الاخ العزيز لقد تتبعت مسار الرجستري Regedit فوجدت ان الاسم الموجود في البرنامج strServiceName لا يوجد فيه اي ip ووجدت بان فيه {6FA019A8-7CD7-4986-BE3D-48104CC4EA9B}
فاعتقد انه يختلف وجود ال ip من جهاز الى آخر اما المفتاح فقد وجدت انه المفتاح رقم 6 وبرنامجك ياخذ هذا المفتاح ولكن البرنامج يعطيني في الرسالة الثانية نفس الكتابة الموجودة في الرجستري وهي 6FA019A8-7CD7-4986-BE3D-48104CC4EA9B}
فاعتقد انه لا توجد فائدة
اشكرك على الاهتمام ولك مني جزيل الشكر والامتنان - وعفوا على الازعاج
ابو بشار
综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容
إن أفضل جندي هو الذي لا يقــــــــــــاتل
والمقاتل المتمكن هو الذي ينجح بلا عنف
وأعظم فاتح يكسب دون حـــــــــــــــــرب
وأنجح مدير يقود دون إصدار الأوامـــــــر
إن هذا ما يسمى ذكاء عدم الهجـــــــــــــوم
وما يطلق عليه سيادة الرجــــــــــــــــــــال
综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容
أخي الحبيب:
لقد عمل البرنامج معك بطريقة صحيحة, و الدليل على ذلك أن البرنامج أرجع لك قيمة الرقم الطويل و الموجود في المفتاح رقم 6,
الفكرة تتلخص في الآتي:
نبحث عن رقم الخدمة و الموجود في المفتاح رقم 1 أو 2 أو ... ( هذا الرقم يمثل رقم كارت الشبكة لديك) , بعد أن يجد رقم الخدمة يذهب إلى مفتاح آخر يبحث داخله عن مفتاح فرعي يحمل نفس رقم الخدمة , ثم إلى المفتاح المسئول عن رقم الأيبي ,,, و الصور سوف تساعدك على فهم الموضوع أكثر...
و إذا إحتجت أيه إيضاحات أو مساعدة فأنا في خدمتك أخي الحبيب.
و لك مني جزيل الشكر
____________________________________________________________________________
{ اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ } سورة الأنبياء (1)
____________________________________________________________________________
In a world without walls and fences, who needs Windows and Gates
اخي الحبيب: Alaa Awaad
اشكرك كل الشكر
اشتغل البرنامج اكرر شكري وامتناني اليك
ابو بشار
综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容
إن أفضل جندي هو الذي لا يقــــــــــــاتل
والمقاتل المتمكن هو الذي ينجح بلا عنف
وأعظم فاتح يكسب دون حـــــــــــــــــرب
وأنجح مدير يقود دون إصدار الأوامـــــــر
إن هذا ما يسمى ذكاء عدم الهجـــــــــــــوم
وما يطلق عليه سيادة الرجــــــــــــــــــــال
综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容
هذا الموضوع مغلق.