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

كود لمعرفة إذا كان هناك إتصال بالنت أم لا

مغلق
بدأه Nuoo في 19 يونيو 2004 · 19 رد · 2,251 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله ..

أنا مبرمج بلغات أخرى غير الأسيمبلي .. ولم أحاول أن أكون مبرمجاً بها ..

لكن جاء في خاطري أمر ما فأردت تنفيذه فاصطدمت بالواقع ..

بالمناسبة أنا أستخدم ال MASM32

حاولت كتابة برنامج بسيط بالأسيمبلي لمعرفة إذا كنت متصل بالنت أم لا ، الموضوع بسيط في غير الأسيمبلي وصعوبته في الأسيمبلي لا تتعلق بالفكرة بل بضعفي في هذه اللغة فهل يمكنكم مساعدتي في إكمال الكود ؟؟

أولا هذان السطران لتحميل ال wininet

include \MASM32\INCLUDE\wininet.inc
includelib \MASM32\LIB\wininet.lib

وقمت بتعريف هذا المتغير في قسم الdata

.data
    PUBLIC cst
    cst    DWORD 5

وفي قسم start وضعت كود استدعاء دالة معرفة الاتصال من عدمه

start:
    invoke InternetGetConnectedState,cst,0

حتى هنا والموضوع تمام بعد ذلك أنا عاجز ولتوضيح الفكرة فسأكتب ما أريده لكن باللغة العربية

إذا كانت القيمة المسترجعة من هذه الدالة InternetGetConnectedState,cst,0  == True
أظهر رسالة أنت متصل

إذا كانت القيمة المسترجعة من هذه الدالة InternetGetConnectedState,cst,0  == False

أظهر رسالة أنت غير متصل

بالمناسبة القيمة المسترجعة ليست الموجودة في المتغير cst بل الدالة ككل

أعرف أن طلبي سهل بالنسبة لكم فأرجو أن تفيدوني وجزاكم الله خيراً

#2

السلام عليكم

عندي أمل حد يرد عليا :(

#3

السلام عليكم

فى الواقع لم اجرب هذه الداله من قبل, ولكن العائد من function معين تجده فى eax لذالك عليك بالقيام بالتالى:

include \MASM32\INCLUDE\wininet.inc
includelib \MASM32\LIB\wininet.lib
.data
   PUBLIC cst
   cst    DWORD 5
msg1 DB "connection is OK",0
msg2 DB "No Connection",0
msgcap1 DB "OK",0
msgcap2 DB "Erorr",0
start:
   invoke InternetGetConnectedState,cst,0
.if eax
invoke MessageBox,addr msg1,addr msgcap1,MB_OK
.else
invoke MessageBox,addr msg2,addr msgcap2,MB_OK
.endif
invoke ExitProcess,0
end start

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#4

السلام عليكم ورحمة الله

أولاً جزاك الله خيراً أخي أحمد على اهتمامك وردك .

ثانيا الحمد لله بالفعل الكود عمل معي بشكل صحيح مع بعض التعديل ، وللعلم لقد كنت أستخدم ال eax لكنني استخدمت قبلها - وذلك لجهلي باللغة - دالة mov فكانت تعطيني ناتج خطأ ، لكن بعد التصحيح حسب الكود الموضوع كل شيء أصبح تمام رغم أن لي ملاحظة في دالة ال MessageBox حيث لاحظت وجود باراميتر ناقص وهو ال hwnd فوضعت قيمته صفراً فانضبطت الأمور .

أنا معك أن هذه الدالة لم تجرب من قبل فهي تخفى عن الكثيرين حتى ممن يبرمجون باللغات عالية المستوى ويستخدمون عوضاً عنها دوال أخرى يظنون خطاً أنها تفي بالغرض .

عموما سوف أدرج الكود الجديد وهو يعمل بشكل صحيح وأرجو أن ينفع الله به المسلمين .

   .386
      .model flat, stdcall; 32 bit memory model
      option casemap :none; case sensitive
      include \MASM32\INCLUDE\windows.inc
      include \MASM32\INCLUDE\kernel32.inc
      include \MASM32\INCLUDE\shell32.inc
      include \MASM32\INCLUDE\wininet.inc
      include \masm32\include\user32.inc
      includelib \masm32\lib\user32.lib
      include \MASM32\INCLUDE\masm32.inc
      includelib \MASM32\LIB\kernel32.lib
      includelib \MASM32\LIB\shell32.lib
      includelib \MASM32\LIB\wininet.lib
      includelib \MASM32\LIB\masm32.lib
     
.data
    cst    dd ?
    open   db "open",0
    msgok db "أنت متصل بالإنترنت",0
    msgnotok db "أنت غير متصل بالإنترنت",0
    msgcap DB "حالة الاتصال",0

.code

start:
    invoke InternetGetConnectedState,cst,0
    .if eax
          invoke MessageBox,0,addr msgok,addr msgcap,MB_OK
    .else
          invoke MessageBox,0,addr msgnotok,addr msgcap,MB_OK    	
    .endif
    invoke ExitProcess,eax
end start

وأخيراً أخي جزاك الله خيرا مرة أخرى .

تم تعديل هذه المشاركة بواسطة Nuoo في 20 يونيو 2004 في 17:18

#5

السلام عليكم

جزاك الله كل خير, انا لم افهم المراد من الدوال التى وضعتها فى msgok و msgnotok.

msgok db "ÃäÊ ãÊÕá ÈÇáÇäÊÑäÊ",0
   msgnotok db "ÃäÊ ÛíÑ ãÊÕá ÈÇáÅäÊÑäÊ",0
   msgcap DB "ÍÇáÉ ÇáÇÊÕÇá",0

فليتك تقوم بشرح عمل هذه الدوال, ولك جزيل الشكر.

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#6

وعليكم السلام

جزانا وإياكم يا أخي ..

معذرة ولكن هذه ليست دوال ولكن كانت مشكلة في نسخ الكود ولصقه هنا في المنتدى فقام المنتدى بتحويل بعض الحروف إلى هذه الرموز ، والخطأ مني أنا لذلك قمت بإعادة كتابة الكلمات العربية يدويا ، وهي تظهر الآن بشكل صحيح ( راجع الكود )

أرجو المعذرة ، وفقنا الله وإياكم لما يحبه ويرضاه .

تم تعديل هذه المشاركة بواسطة Nuoo في 20 يونيو 2004 في 17:57

#7

السلام عليكم,

كما قال الأخ أحمد يجب أن نعرف أن كل شيء ترجعه أي دالة من دوال API يكون في الرجستر eax وحقيقة هذا الأمر يطرح مشكلة للمبتدء الذي لا يعرف هذا الأمر.

فيما يخص دالة MessageBox والبارامتر hwnd يجب أن نعرف أنه إذا أعطينا هاندل hwnd معين فإن MessageBox يكون مقرونا بهذه النافذة المعينة وفي الحالة الأخرى 0 يكون عاما وليس مرتبطا بنافذة معينة.

إلى اللقاء.

#8

السلام عليكم

شكرا لمرورك أخي الكريم ..

أما موضوع الهاندل فأنا أعرف ذلك ، فأخوك مبرمج أصلاً . لكن بيني وبين الأسيمبلي عداقة منذ زمن :)

وطالما أنت جيت هنا فانا مش حفوت الفرصة ، ممكن تعطيني وصلة أو مكان او كتاب أو حتى تشرح بنفسك ، كيف نصل إلى دوال الريجستري من خلال الأسيمبلي :)

وأرجو أن يشمل الشرح كل الدوال الخاصة بالجلب والحذف والتعديل ، وشكراً لك .

#9

السلام عليكم,

فيما يخص الدوال الخاصة بالرجستري نستعمل دوال API الخاصة بذلك وطريقة البرمجة تكون مثل ما نبرمجها في اللغات الأخرى تماما مثل س++ على سبيل المثال وهذه الدوال هي :

RegCloseKey

RegConnectRegistry

RegCreateKey

RegCreateKeyEx

RegDeleteKey

RegDeleteValue

RegEnumKey

RegEnumKeyEx

RegEnumValue

RegFlushKey

RegGetKeySecurity

RegLoadKey

RegNotifyChangeKeyValue

RegOpenKey

RegOpenKeyEx

RegQueryInfoKey

RegQueryMultipleValues

RegQueryValue

RegQueryValueEx

RegReplaceKey

RegRestoreKey

RegSaveKey

RegSetKeySecurity

RegSetValue

RegSetValueEx

RegUnLoadKey

وهي مأخوذة من MSDN وللمزيد من المعلومات يمكن أن نلقاها هناك. وبما أن الدوال كثيرة لا يمكنني أن أتحدث عنها كلها وإذا كان شيء محدد يمكن أن نناقشه.

إلى اللقاء.

#10

السلام عليكم

اقتباس
أما موضوع الهاندل فأنا أعرف ذلك ، فأخوك مبرمج أصلاً . لكن بيني وبين الأسيمبلي عداقة منذ زمن

ما معنى كلمة عداقة , هل هى حاله بين الصداقه و العداوه؟؟

لاحظ ان الفرق فى الحالتين حرف واحد, الاسمبلى لغه جميله جداً حيث انها تتيح لك المجال فى التحكم على كل شئ فى البرنامج, فى حين ان الغات الاخرى امثال VB الكمبيلر هو الذى يتحكم فى اسلوب البرنامج, لذالك انصحك ان تقيم علاقه جيده مع الاسمبلى لانها السبيل الوحيد لفهم كل ما يدور بداخل الكمبيوتر.

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#11

وعليكم السلام ..

نعم أخي عداقة كلمة مقصودة فأنا أعلم إمكانات الأسيمبلي ولذلك أحبها ، ولكنني أعلم أيضاً - وأرجو ألا تغضبك هذه الكلمة - مدى الوقت الذي يضيع عندما تحاول إنشاء برنامجاً بهذه اللغة لذلك لا أحبها ..

ومن هنا نشأت العداقة :)

وإذا أردت رأيي من الناحية العملية أخي ، فلا يمكننا الاعتماد على الأسيمبلي في كثير من الأشياء ، وأيضاً لا يمكن التخلي عنها ..

وعموماً جزاك الله خيراً على نصيحتك وأرجو من الله أن يوفقنا أجمعين .

#12

السلام عليكم

اخى Nuoo انت مازال فى ذهنك الاسمبلى 16 بت, نعم الاسمبلى 16 بت يضيع الوقت وذالك ليس عيب فى الاسمبلى ولكن عيب فى عدم وجود مكتبات جاهزه مثل Stdio فى c و c++, حاول ان تكتب برنامج Hello World فى c بدون الاعتماد على اى مكتبات, ستجد الامر معقد للغايه, نفس الشيئ بالنسبه للاسمبلى. الاسمبلى 32 بت الوضع مختلف تماماً فباءمكانك إستخدام نفس المكتبات التى يستخدمها مبرمجو c و VB , اما بالنسبه لمسئلة التعقيد صدقنى انا ارى ان c++ اعقد من الاسمبلى و VB لا تتيح لك المجال لفهم ما يدور خلف الكواليس.

جزانا الله خير واياك.

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#13

وعليكم السلام ورحمة الله وبركاته

أخي الكريم

عملية إنشاء برنامج لا تتوقف فقط على الانتهاء من كتابته ولكنها أيضاً تتضمن متابعته وعمل الدعم الفني المطلوب عليه ، فأي برنامج مهما كان يحتاج لإصلاح أخطاء ومراجعة ومتابعة وتعديل ، ومن هنا أحب أن أسألك سؤالاً ، هل يمكنك إنشاء برنامج محاسبي مثلاً بلغة الأسمبلي ؟ أتوقع ان تجيب أو يجيب أحد الإخوة بنعم ، وهنا يأتي دور السؤال الثاني ، إذاً فهل تستطيع مراجعة البرنامج ومتابعته ، واترك لي الإجابة هذه المرة فأقول لك إن الأمر شبه مستحيل حتى وإن استخدمت أعلى درجات التوثيق ..

لذلك قلت : فلا يمكننا الاعتماد على الأسيمبلي في كثير من الأشياء

على العموم هي وجهة نظر

وفقنا الله وإياك لما يحبه ويرضاه

#14

أحمد غريب،

أتذكر أنني منذ سنوات كنت أتعلم أسمبلي (ولم أكن أعرف غيره).. وحاولت كتابة برنامج بسيط يقوم بالبحث في الملفات عن أجزاء (patterns) نصية و استبدالها وكان هذا هو المطلوب بشكل أساسي والذي استغرق مني عمله ربما أكثر من أسبوع.. لو أنني حاولت كتاية هذا البرنامج وقتها بالبيسك لربما استغرق مني عشر دقائق على الأكثر متضمنا الـUI.

في وجهة نظري ليس المهم أن تعرف كل صغيرة وكبيرة، وان أردت فسي++ قوية كفاية وسوقها لن يتوقف بالإضافة الى امكانية مزج الأسمبلي معها.. المهم هو أن تصنع برامجك في وقت معقول بقدرات وكفاءة مقبولة.

في رأيي، كل ما تقدمه أسمبلي للمبرمج في العصر الحديث، هو أنها تمكنه من التفكير بطريقة أكثر اهتماما بالتفاصيل، وهو أمر لن يضيف أي شيء في مجالات العمل الموجودة في منطقتنا.

#15

السلام عليكم,

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

كل ما أريد أن أقوله أن للأسمبلر عدة ميادين ليس له فيها من منافس ويبقى هو سيد الموقف . لكن إذا كنا سنكتفي ببرمجة برامج عادية - إن صح القول - وكنا نعرف لغة أخرى أسهل فلا ملنع أن نستعمل هذه اللغة وتبقى النتيجة هنا هي التي ستبرر ماذا يمكن أن نعمله. فحقيقة فإن المستعمل النهائي للبرنامج سوف يرى ماذا يقوم به البرنامج وما سهولة التعامل معه ولا يهمه إن كانت اللغة المستعملة هي هذه أو تلك. وهذا من جهة أخرى لا يمنعنا من تعلم لغات أخرى مثل الأسمبلر فهذه ستقوي في نفس الوقت معرفة اللغة الأخرى لأن الأسمبلر سنتعلم منه المبادئ التي تقوم بها كل اللغات الأخرى.

وفي الأخير أريد أن أضيف أنه الآن وبتقدم الحواسيب وسعة استيعابها قد نتمكن من جمع المكتبات التي تساعدنا في البرمجة في اللغات الأخرى وكذلك في الأسمبلر ولهذا أقول أن أي برنامجا مكتوب على سبيل المثال ب س أو س++ يمكن ترجمته إلى الأسمبلر بدون مشقة كبيرة - أو مشقة نسبية إن صح القول - وحتى برامج الأسمبلر الآن هي في مستوى برامج س++ من حيث قراءتها وفهمها.

هذه وجهة نظري الشخصية وكما أقول دائما : على الأقل إن كنا نعرف البرمجة بلغة ما كيفما كانت أحسن من أن لا نعرف أي لغة.

إلى اللقاء.

#16

السلام عليكم

اقتباس
أتذكر أنني منذ سنوات كنت أتعلم أسمبلي (ولم أكن أعرف غيره).. وحاولت كتابة برنامج بسيط يقوم بالبحث في الملفات عن أجزاء (patterns) نصية و استبدالها وكان هذا هو المطلوب بشكل أساسي والذي استغرق مني عمله ربما أكثر من أسبوع.. لو أنني حاولت كتاية هذا البرنامج وقتها بالبيسك لربما استغرق مني عشر دقائق على الأكثر متضمنا الـUI.

اولاً لبرمجة UI الامر لا يختلف بين الاسمبلى و VB فكلاهما يستخدم API , وهناك IDE للاسمبلى مثل Visual Assembly او RADAsm وغيرهم, هذه الادوات تساعدك على إنجاز نفس المهام التى تنجزها فى VB وبطريقه افضل.

وإذا قارنت الملف التشغلى بعد عملية الكمبيل ستلاحظ الفرق الشاسع فى السرعه والحجم, بالاضافه الى ان اى خلل منطقى فى البرنامج المكتوب ب VB يتم إصلاحه بعملية debug, وكما تعلمون debug ما هو الى فحص للبرنامج عن طريق العوده الى الاسمبلى.

كما ذكرت سابقاً انتم تقارنون الاسمبلى 16بت مع VB وهذه ليست مقارنه عادله, من العدل مقارنة الاسمبلى 32 بت مع VB او VC++, وهنا اقول إنى اجد VC++ اعقد من الاسمبلى لانى تعودت على كتابة برامج الوندوز بالاسمبلى, ومبرمج VC++ يجد العكس, إذاً المسئله مسئلة تعود ليس الى.

اقتباس
في وجهة نظري ليس المهم أن تعرف كل صغيرة وكبيرة، وان أردت فسي++ قوية كفاية وسوقها لن يتوقف بالإضافة الى امكانية مزج الأسمبلي معها.. المهم هو أن تصنع برامجك في وقت معقول بقدرات وكفاءة مقبولة.

هنا مربط الفرس, المبرمج الجاد هو الذى يستخدم اكثر من اداة للقيام بعمل مشروع, فمثلاً أذا اردت ان تقوم بعمل قاعدة بيانات فعليك ان تستخدم الاداة المناسبه مثل SQL مثلاً او Oracle, وإذا اردت ان تقوم بعمليات حسابيه معقده تستغرق وقت فعليك بالاستعانه بادوات matlab او maple الخ.

اقتباس
عملية إنشاء برنامج لا تتوقف فقط على الانتهاء من كتابته ولكنها أيضاً تتضمن متابعته وعمل الدعم الفني المطلوب عليه ، فأي برنامج مهما كان يحتاج لإصلاح أخطاء ومراجعة ومتابعة وتعديل ، ومن هنا أحب أن أسألك سؤالاً ، هل يمكنك إنشاء برنامج محاسبي مثلاً بلغة الأسمبلي ؟ أتوقع ان تجيب أو يجيب أحد الإخوة بنعم ، وهنا يأتي دور السؤال الثاني ، إذاً فهل تستطيع مراجعة البرنامج ومتابعته ، واترك لي الإجابة هذه المرة فأقول لك إن الأمر شبه مستحيل حتى وإن استخدمت أعلى درجات التوثيق ..

لذلك قلت : فلا يمكننا الاعتماد على الأسيمبلي في كثير من الأشياء

على العموم هي وجهة نظر

دعنى اجيب على سؤالك بسؤال, هل تقصد انك إذا كتبت برنامج الان ثم اردت ان تطوره بعد عشر سنوات ؟ المسئله لاتختلف بالنسبه لى اى برنامج فقد قمت بكتابة برامج Java من 4 سنوات والان لا اذكر منها شى, مع ان java تعتبر من الغات السهله.

إذاً السئله مسئلة متابعه للغة البرمجه, وإصلاح اخطاء فى برمج VB اصعب من اسمبلى لان حجم البرنامج فى debug يكون اضخم.

انتظر منكم التعليق واسف على الاطاله

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#17

كيف نكتب بالاسمبلى (اسمبلر 32) هذا السطر، وهل يختلف عنه بالاسمبلر 16؟

y = a * x ^ 3  + b * x ^ 2 + c * x  + d

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#18

ربما سئل احد مانوع x او y في السؤال السابق كأن تكون integer,single,double في الحقيقة اريد ان ارى التغيير في الحالات جميعها ان كان هناك اختلاف ولابد على ما اظن.

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#19

قمت بنقل المطلوب الى موضوع جديد ارجو الاجابة هناك شاكرين لكم.

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#20

السلام عليكم

اقتباس
دعنى اجيب على سؤالك بسؤال, هل تقصد انك إذا كتبت برنامج الان ثم اردت ان تطوره بعد عشر سنوات ؟ المسئله لاتختلف بالنسبه لى اى برنامج فقد قمت بكتابة برامج Java من 4 سنوات والان لا اذكر منها شى, مع ان java تعتبر من الغات السهله.

إذاً السئله مسئلة متابعه للغة البرمجه, وإصلاح اخطاء فى برمج VB اصعب من اسمبلى لان حجم البرنامج فى debug يكون اضخم.

أخي أحمد

بالطبع أي لغة كتبت بها أي شيء وتركته أربع سنوات لابد ان تنساه ، حتى وإن كانت قصة قصيرة وباللغة العربية

لكن ليس هذا مقصدي ، ولكن أنا أتكلم معك عن برنامج كبير مثل برنامج الحسابات ، فمتابعة الأخطاء المنطقية أمر صعب فيه حتى في لغات البرمجة العليا ، فما بالك بالأسيمبلي ..

تم تعديل هذه المشاركة بواسطة Nuoo في 6 يوليو 2004 في 14:17

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…