الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يمكن تغيير ال IP ADDRESS للجهاز عن طريق VB

مغلق
بدأه ابو بشار في 28 أغسطس 2005 · 8 رد · 7,473 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سؤال احتار فيه كثير من المبرمجين المصممين

وهو كيف يممكن تغيير ال IP ADDRESS للجهاز عن طريق برنامج بواسطة فيجوال بيسك

وبدون ان تدخل الى اعدادات ال TCP \ IP

ساطرح هذا السؤال لاعظاء المنتدى ليبدوا أرائهم فيه وكل واحد يعطي ما لديه من اقتراحات

综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容

إن أفضل جندي هو الذي لا يقــــــــــــاتل

والمقاتل المتمكن هو الذي ينجح بلا عنف

وأعظم فاتح يكسب دون حـــــــــــــــــرب

وأنجح مدير يقود دون إصدار الأوامـــــــر

إن هذا ما يسمى ذكاء عدم الهجـــــــــــــوم

وما يطلق عليه سيادة الرجــــــــــــــــــــال

综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容

#2

أخي الفاضل :

لكي تقوم بتغيير رقم الـ 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

مدونتي

#3

الاخ الفاضل Alaa Awaad

اشكرك كل الشكر على اهتمامك بالموضوع

الفكرة ممتازة ولكني للاسف حاولت انفذ الكود ولكنه يظهر اخطاء

الخطأ هو "INVALID ROOT IN REGISTRY KEY "

اضافة الى ان الكود يقبل بادخل IP ADDRESS ولكنه لا يقبل بادخال

Ddfault gateway

ارجو التوضيح اذا كان ذلك ممكنا

شاكرا لك اهتمامك ونشاطك في المنتدى

ابو بشار

综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容

إن أفضل جندي هو الذي لا يقــــــــــــاتل

والمقاتل المتمكن هو الذي ينجح بلا عنف

وأعظم فاتح يكسب دون حـــــــــــــــــرب

وأنجح مدير يقود دون إصدار الأوامـــــــر

إن هذا ما يسمى ذكاء عدم الهجـــــــــــــوم

وما يطلق عليه سيادة الرجــــــــــــــــــــال

综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容

#4

أخي الفاضل:

بالنسبة لرسالة الخطأ فيجب أن تتأكد من رقم المفتاح الموجود فيه رقم الأيبي ( رقم 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

مدونتي

#5

اخي العزيز

عفوا على ازعاجك

اريد ان اخبرك باني جربت الكود ولكن للاسف انه لا يتعرف على ال opject فعندما اكتب wsh. لا تظهر قائمة حتى نختار منها regRead

وبذلك يظهر خطا دون ان يضيف اي اسم الى strservicename

طبعا نفس الرسالة السابقة رقم الخطأ هو 2147024894 -

و لك مني جزيل الشكر,,,

综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容

إن أفضل جندي هو الذي لا يقــــــــــــاتل

والمقاتل المتمكن هو الذي ينجح بلا عنف

وأعظم فاتح يكسب دون حـــــــــــــــــرب

وأنجح مدير يقود دون إصدار الأوامـــــــر

إن هذا ما يسمى ذكاء عدم الهجـــــــــــــوم

وما يطلق عليه سيادة الرجــــــــــــــــــــال

综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容

#6

أخي الحبيب:

نسيت أن أضيف السطر التالي في بداية الـ 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

مدونتي

#7

الاخ العزيز لقد تتبعت مسار الرجستري Regedit فوجدت ان الاسم الموجود في البرنامج strServiceName لا يوجد فيه اي ip ووجدت بان فيه {6FA019A8-7CD7-4986-BE3D-48104CC4EA9B}

فاعتقد انه يختلف وجود ال ip من جهاز الى آخر اما المفتاح فقد وجدت انه المفتاح رقم 6 وبرنامجك ياخذ هذا المفتاح ولكن البرنامج يعطيني في الرسالة الثانية نفس الكتابة الموجودة في الرجستري وهي 6FA019A8-7CD7-4986-BE3D-48104CC4EA9B}

فاعتقد انه لا توجد فائدة

اشكرك على الاهتمام ولك مني جزيل الشكر والامتنان - وعفوا على الازعاج

ابو بشار

综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容

إن أفضل جندي هو الذي لا يقــــــــــــاتل

والمقاتل المتمكن هو الذي ينجح بلا عنف

وأعظم فاتح يكسب دون حـــــــــــــــــرب

وأنجح مدير يقود دون إصدار الأوامـــــــر

إن هذا ما يسمى ذكاء عدم الهجـــــــــــــوم

وما يطلق عليه سيادة الرجــــــــــــــــــــال

综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容

#8

أخي الحبيب:

لقد عمل البرنامج معك بطريقة صحيحة, و الدليل على ذلك أن البرنامج أرجع لك قيمة الرقم الطويل و الموجود في المفتاح رقم 6,

الفكرة تتلخص في الآتي:

نبحث عن رقم الخدمة و الموجود في المفتاح رقم 1 أو 2 أو ... ( هذا الرقم يمثل رقم كارت الشبكة لديك) , بعد أن يجد رقم الخدمة يذهب إلى مفتاح آخر يبحث داخله عن مفتاح فرعي يحمل نفس رقم الخدمة , ثم إلى المفتاح المسئول عن رقم الأيبي ,,, و الصور سوف تساعدك على فهم الموضوع أكثر...

و إذا إحتجت أيه إيضاحات أو مساعدة فأنا في خدمتك أخي الحبيب.

و لك مني جزيل الشكر

post-37089-1125497195_thumb.jpg

post-37089-1125497311_thumb.jpg

____________________________________________________________________________

{ اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ } سورة الأنبياء (1)

____________________________________________________________________________

In a world without walls and fences, who needs Windows and Gates

مدونتي

#9

اخي الحبيب: Alaa Awaad

اشكرك كل الشكر

اشتغل البرنامج اكرر شكري وامتناني اليك

ابو بشار

综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容

إن أفضل جندي هو الذي لا يقــــــــــــاتل

والمقاتل المتمكن هو الذي ينجح بلا عنف

وأعظم فاتح يكسب دون حـــــــــــــــــرب

وأنجح مدير يقود دون إصدار الأوامـــــــر

إن هذا ما يسمى ذكاء عدم الهجـــــــــــــوم

وما يطلق عليه سيادة الرجــــــــــــــــــــال

综合互联网公司,提供新闻、军事、体育、科技、娱乐、教育等资讯内容

هذا الموضوع مغلق.

مواضيع مشابهة