احمد غريب

مواضيع API متقدمة لنظام التشغيل NT

48 ردود في هذا الموضوع

السلام عليكم

اضع هذا الموضوع لننتقل بمستوى المواضيع فى المنتدى من مستنقع مواضيع المبتدئين إلى مرحلة جديدة تشعرنا باننا نقوم بعلم جاد وليس فقط واجهة مستخدم..

اغلب مواضيع الـAPI كانت منحصرة حتى الان فى كيفية التحكم معى واجهة المستخدم, تغير الالوان, فتح عدة نوافذ, تغير الايقونه, القوائم المنسدلة الخ..

ولكن لا يكفى ان نقوم بعمل برنامج يحتوى على واجهة مستخدم فقط يجب علينا ان نقوم بعمل برامج مفيدة تستطيع التحكم فى بيئة العمل وتعطى إنطباع للمستخدم ان البرنامج تم كتابته من قبل مبرمج محترف يعرف ما يقوم به...

بالتاكيد ابرع من برمج على انظمة الوندوز هو Mark Russinovich للتعرف على هذه الشخصية ما عليك سوى زيارة موقعه http://www.sysinternals.com/

تجد فى هذا الموقع العديد من البرامج القويه, فى الواقع برامج مارك هى اقوى برامج استخدمتها حتى الان اسرد عليكم بعض هذه البرامج التى استخدمها بشكل دائم ومستمر ولا اعتقد ان هناك سبيل للإستغناء عنها إذا ما تعودت عليها ..

Process Explorer v9.25

هذا البرنامج يعتبر اقوى برنامج تحكم على نظام التشغيل, من خلاله تستطيع ان تشاهد جميع البرامج وكل محتوياتها من Threads وإستهلاك الذاكره والمعالج لكل Thread..

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

TCPView v2.4

برنامج اخر قمة فى الروعة يقوم بسرد كل ما يحدث من إتصال عبر كرت الشبكة, من خلال هذا البرنامج تستطيع ان تشاهد جميع البرامج التى تقوم بالاتصال, رقم الIP للجهة التى يتم الاتصال بها, رقم المنفذ المستخدم, كما يمكنك ايضاً إظهار إسم الجهة المتصل بها, وما هو العمل الذى يقوم به البرنامج... من خلال هذا البرنامج يمكنك ايضاً إنها إتصال بين برنامج معين وكرت الشبكة واشياء اخرى, بإختصار كل ما يحدث من اتصال بين جهازك والشبكة يمكنك التحكم به من خلال هذا البرنامج

AccessEnum v1.3

هذا البرنامج يسرد جميع الصلاحيات فى جهازك, من خلاله تستطيع معرفة صلاحيات كل ملف فى جهاز, وتستطيع معرفة اى مستخدم يستطيع قرائة ملف معين او الكتابة فى الملف الخ ..

Portmon v3.02

برنامج يظهر بالتفصيل ما يحدث فى منافذ الجهاز من com او lpt, ليس فقط على جهازك المحلى بل على اي جهاز فى الشبكة ..

Regmon v7.02

من خلال هذا البرنامج تستطيع مشاهدة ما يحدث فى الـRegistry بالتفصيل الممل, ويمكنك تحديد برنامج معين لمشاهدة ما يقوم به فى الـregistry من قرائة وكتابة ..

لن استطيع سرد جميع البرامج لاهنا كم كبير جداً من البرامج...

مايهمنا فى الامر الان هو كيفية عمل مثل هذه البرامج, يوجد فى الموقع ايضاً بعض المواضيع التى تناقش بعض دوال الAPI التى يتم إستخدامها فى عمل مثل هذه البرامج ومواضيع كثرة جداً, ولكن المواضيع التى تطرح فى هذا الموقع على مستوى عالى من التعقيد, وما اريد ان اقترحه هو مناقشة هذا المواضيع بطريقة اقل تعقيداً حتى نصل إلى المستوى الذى من خلاله نستطيع قرائة هذه المواضيع وفهمها لانه وللاسف ينقصنا الكثير من الاساسيات للوصل لهذا المستوى..

ختاماً اسرد عليكم بعض دوال الـAPI التى سوف توهيئ لنا القاعدة الاساسية للتحسين من مستونا البرمجى, والذى اتمنى ان ينقلنا من ما نحن فيه إلى مستوى نستطيع من خلاله كتابة برامج إحترافية..

PROCESSES

CreateProcess

داله فى غاية الاهمية تحتوى على إمكانيات ضخمه نستطيع من خلالها تحديد صلاحيات الProcess, انا استخدمها احياناً عند تشغيل برنامج غير موثوق المصدر, بحيث احدد له صلاحيات معينه وامنعه مثلاً من إغلاق الجهاز, او الكتابة على القرص الصلب, كما اننى استخدمة فى اختراق بعض البرامج المضغوطة بدون تغير الملف المصدرى للبرنامج الاصلى..ولكن بما ان اختراق البرامج موضع صعب على قسم السى ساقوم بكتابة موضوع منفصل فى قسم الاسمبلى لاحقاً إن شاء الله..

ExitProcess

CloseHandle

TerminateProcess

GetExitCodeProcess

هذه الدوال تتحكم فى عملية القضاء على Process وتحديد ما إذا كان الـProcess مازال يعمل ام تم بالفعل القضاء عليه..

WaitForSingleObject

هذه الدالة هى دالة إنتظار, عندما نقوم بتشغيل Process معين نريد ان نعرف هل الـProcess تم تحميله بالكمل فى الذاكرة ام لا, وعند إغلاقه نريد ان نعرف هل تم إغلاقة بالكامل ام انه ما زال فى مرحلة الاغلاق, بإستدعاء هذه الدله تحصل على رسالة تبلغك عندما يتم بالفعل إنجاز العمل بالكامل..

JOBS

CreateJobObject

نفترض ان برنامجك يتكون من مجموعة من الProcess وتريد ان تعطيها نفس الصلاحيات, إعطاء كل Process الصلاحيات على حدى قد يكون عمل مرهق, لذلك يمكنك جمعها جمعاُ تحت job واحد وإعطائها نفس الصلاحيات دفعة واحده, هذه الخالصية تعمل فقط فى وندوز NT ..

AssignProcessToJobObject

وبساعدة هذه الدالة تستطيع تحديد الـProcess الذى يندرج تحت الـjob الذى تريد توزيع الصلاحيات عليه..

OpenJobObject

داله لتحديد الصلاحيات وإتحديد من له الحق من خارج الjob فى التعامل معها ...

UserHandleGrantAccess

دالة لتغير صلاحيات الـjob اثناء عملها, اى job تستطيع إعطاء صلاحيات جديده لـprocess خارجها..

QueryInformationJobObject

داله تستخدم من خارج اى job لمعرفة من له صلاحيات وماهية هذه الصلاحيات..

TerminateJobObject

للقضاء عليها وعلى جميع الProcess بداخلها ..

THREADS

CreateThread

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

ExitThread

بعد الانتهاء من المهمة يمكنك التخلص منه ..

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

هناك الكثير من الدوال التى يجب ان نناقشها وخاصة فى موضوع الـThreading و الـException handling و الـMemory Management و و و مواضيع لا حصر هلا ولم نناقش حتى الان سوى بيئة المستخدم ...

للحديث بقية

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
للحديث بقية

الموضوع شدني للغاية ... أرجـو الاستمرار

=======================

بالنسبة لحال المنتدى وأنه مستنقع للمبتدئين

فبمشيئة الله سأعـمل على تطوير المنتدى حتى يكون أفضل (بعـد أسبوعين نظراً لظروف الاختبارات)

تم تعديل بواسطه Sultan_Althibity
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أخي احمد يبدو أنك من المعجبين بـ Mark مثلي ...

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

ان كان كذلك فهذا شئ جيد و اعتبرني معك في الموضوع ... كنت قبل كم سنة قمت بتحليل بعض برامج Mark ومستعد للمشاركة (بالطبع الموضوع سيبقى لك و ساقدم ما استطيع من مساعدات .. فمنكم نستفيد ).

ولتكن البداية مع Process Explorer ان شئت ...(طبعاً في برامج قد تؤدي عمل افضل من برامج Mark لكن تستطيع القول بأنه من أوائل من فتحوا الطريق ...)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

معلش يبدو أني ما ركزت في كلامك

يبدو أنك ستبدأ قريباً بالناحية البرمجية ( هذا ما يهمني في الموضوع ) ...

ننتظر الجديد ونريد نقاش علمي جاد بعيد عن عبارات الإعجاب ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ِشكرا لك أخي الكريم و لكن كلمة مستنقع هذه...... بصراحة :lol:خصوصا أننا كلنا مبتدئين رح نتابعك ..وشكرا لك :D

تم تعديل بواسطه eias
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شباب, لا تنتظرو المزيد من أحمد, فهو اللذي ينتظر المزيد منكم!

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

هناك الكثير من الدوال التى يجب ان نناقشها وخاصة فى موضوع الـThreading و الـException handling و الـMemory Management و و و مواضيع لا حصر هلا ولم نناقش حتى الان سوى بيئة المستخدم ...

:rolleyes:

الموضوع شيق للغاية,

احب التحدث اولا عن CreateThread لأنها تبدو لي مثل حجر الأساس في هذا الموضوع.

لم أقم في السابق باستخدام الـ threads في الـ ++C, و لكن قمت بذلك في الجافا. و العملية باختصار هي في اختيار function ليقوم بالعمل لوحده في thread جديدة.

في الـ msdn http://msdn.microsoft.com/library/default....reatethread.asp

واضح ان ثالث بارامتر

LPTHREAD_START_ROUTINE lpStartAddress

هو عنوان الـ function اللذي سيستخدم في الـ thread!

هل قلت انني اريد التحدث عن CreateThread؟ حسنا لقد انهيت حديثي :P

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

وانا بعد ما اعرف الا للثريد .. اقصد .. معلومات عامة .

هناك اسئلة

- كم من الممكن انشاء ثريد لكل Process .

-في بعض محاولاتي مع api .. يصل استهلاك المعالج الى 90% والبرنامج كله كرة تتحرك ؟؟؟

اسف .. ماعندي شي اقوله الا لعل الخبراء يشاركوننا :) .. موضوع قوي :( ,,, ,,,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

كذا المواضيع الي تسيل اللعاب قصدي لعاب البرمجة .

اتمنا منك الإستمرار

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
شباب, لا تنتظرو المزيد من أحمد, فهو اللذي ينتظر المزيد منكم!

هل نفهم أن الأخ احمد أنهى الجزء الخاص به بما كتبه؟؟ لا أعتقد كذلك

شخصياً كتبت ردي لأني انتظر رد من الأخ أحمد لأعلم كيف سيكون ترتيبه للموضوع .

إن كان المنتظر منا كتابة شئ نتحدث عنه فسيصبح الموضوع "سلطة" - عذراً لاستعمال هذا اللفظ - . حيث سأتحدث عن شئ ويتحدث أخر عن شئ ويأتي أخر ليناقش نقطة في رد شخص أخر ...

ما نقصده حالياً هو انتظار الأخ أحمد للبدء بتنظيم الموضوع , فقط كبداية ولا يعني ذلك ألا نساعده ..

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

أعلاه نقطة نظر شخصية ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

ياخصارة تعبى :( الاخ اياس مداخلتك ما كان فى لها داعى ابداً, بالله عليك تركت موضوع يتكون من اكثر من 50 سطر وعلقت على كلمة مستنقع فقط؟ هذا دليل واضح على اننا لا نريد التعلم وإنما نريد ان نبحث عن النقائص فقط.

حاول اخى ان تركز على اساس الموضوع, انا استخدمت هذا الكلمة متعمداً حتى اشجع كل مبتداء بالمثابرة على الحصول على العلم, ولم يكن القصد منها إهانة احد..

الاخ سلطان اولاً اهلاً بإنضمامك لفريق المشرفين وإن شاء الله تكون عون لنا لنرتقى بمستوى المنتدى...

الاخ cipher بالنسبة للبرامج التى وضعت رابطها فهى ادوات مهمة جداً لتحليل البرامج, ولكن هدفنا بالتاكيد ليس فقط إستخدام هذه البرامج بالطريقة التقليدية وإنما فهم ما تقوم به هذه البرامج, المشوار طويل جداً لفهم برنامج مثل Process Explorer وخاصة انه يحتوى على اشياء كثيرة جداُ, بالإضافة إلى واجهة المستخدم فى النسخة الجديدة والتى تحتوى على نظام متكامل لتسهيل التفاعل بين المستخدم ومحتويات البرنامج..

واخيراً وليس اخراً الاخ حسن الجودى الملقب بحسان..

Threads

مايكروسفت تعرف الدالة CreateThread على النحو التالى..

HANDLE CreateThread(
 LPSECURITY_ATTRIBUTES lpThreadAttributes,
 SIZE_T dwStackSize,
 LPTHREAD_START_ROUTINE lpStartAddress,
 LPVOID lpParameter,
 DWORD dwCreationFlags,
 LPDWORD lpThreadId
);

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

وذلك بإستخدام الدلة

BOOL CloseHandle(
 HANDLE hObject
);

هذا الدالة تقوم فقط بالتخلص من المقبض ولكن الـThread يعمل فى الخلفية..

نعود إلى المتغيرات التى ياخذها المدعو CreateThread :

LPSECURITY_ATTRIBUTES lpThreadAttributes

هذا المتغير والذى يتكون بدوره من struct هو الذى يحدد صالحيات الـThread دعونا ننظر إلى محتوياته

typedef struct _SECURITY_ATTRIBUTES {
 DWORD nLength;
 LPVOID lpSecurityDescriptor;
 BOOL bInheritHandle;
} SECURITY_ATTRIBUTES,
*PSECURITY_ATTRIBUTES;

DWORD nLength; كالعادة اول متغير هو حجم الـStruct كما هو الحال معى جميع المتغيرات من نوع Struct فى بيئة الوندوز..

LPVOID lpSecurityDescriptor; هو مقبض للصلاحيات التى تعضى للـThread هذا المقبض خاص ولا يسمح بتغير محتوياته مباشرة وإنما يتم تغير المحتويات بواصطة دوال اخرى, تماما ً كما نفعل معى المتغيرات من نوع Private فى class, نقوم مثلاً بتعريف الدالة setvalue فى class معين ومن خلالها نغير قيمة متغير داخل الـclass إذا كان هذا المتغير فى القسم private ولا يمكن الوصول إليه مباشرة..وقد قمت بذكر بعض هذه الدوال فى المداخلة السابقة..

الـSECURITY_DESCRIPTOR تعرفة مايكروسفت بهذا الشكل

typedef struct SECURITY_DESCRIPTOR {
 ...
} SECURITY_DESCRIPTOR,
*PISECURITY_DESCRIPTOR,
PSECURITY_DESCRIPTOR;

وهو لا يحتوى على متغيرات معينه فى التعريف كما تلاحظ وذلك لان التعريف يختلف بإختلاف الصالاحيات التى نعطيها لكل Thread على حدى..

عند إعطاء القيمة NULL للمتغيرLPSECURITY_ATTRIBUTES lpThreadAttributes, يقوم الThread الجديد بالحصول على نفس صلاحيات البرنامج الذى قام بإستدعائه.

BOOL bInheritHandle; هذا المتغير لتحديد عملية الوراثه, وما إذا كان اى process يقوم الـThread بعملة سيتم توريث نفس الصالاحيات لهذا الـprocess.

SIZE_T dwStackSize, لتحديد حجم الStack الذى سوف يتم استخدامه من قبل الThread الجديد, القيمه NULL تجعل الThread يستخدم stack بنفس حجم الـstack المستخدم من قبل البرنامج الذى استدعى الدالة ..

LPVOID lpParameter, متغيرات يتم ارسالها للـThread إذا كان يحتاج للحصول على متغيرات..

LPTHREAD_START_ROUTINE lpStartAddress, كما ذكر الاخ حسن هذا هو عنوان الدالة التى سوف يقوم عليها عمل الThread الجديد..

DWORD dwCreationFlags, دالة فى غاية الاهميه من خلالها يمكنك التحكم فى سير الـThread ,, مثلاً لو وضعت الثابت CREATE_SUSPENDED يقوم البرنامج بتشغيل الThread ثم توقيف عمله إلى ان يحصل على إشارة تسمح له بالاستمار, وهذه الاشارة التى نرسلها من خلال الدالة ResumeThread والتى تعرفها مايكروسفت على النحو التالى

DWORD ResumeThread(
 HANDLE hThread
);

LPDWORD lpThreadId هو مجرد متغير يحصل على معرف ID يسمح لنا بالتعامل معى الThread من خلاله نستطيع التعامل معه, تماماً كما نفعل معى اى نافذه, فى لغة السى مثلاً عندما نقوم بعلم Dialog كل عنصر فى الـDialog له رقم خاص يعرف بطريقة #define myedit 10001 مثلاً, كذلك الحال بالنسبة للـThread..

يلا كفايا كدا النهاردا, وبالفعل كما ذكر الاخ حسن انا انتظر المزيد منكم وليس العكس...

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

له يا رجل عيب عليك تفكر بها الطريقة ..كلنا إخوان ما منزعل من بعض ..في بيننا يعني :lol:

بالعكس أنا من أكثر الناس بالنادي الي بحبوا التعلم و أكبر دليل و مجالي البعيد عن الكمبيوتر .. بس درس مثل هذا لا يتم الإجابة عليه إلا بعد دراسة معمقة ..و لكن للأسف ظروف الدراسة رح تقطعني عنكم ..:lol:

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

ولكن أنا ما عرفت هل هو Api ام MFC اعذرني إذا كان ردي سريع ..لأنني لم أتمعن بالدرس ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

هذا الشرح خاص للاخ الشمري ممنوع على اي عضو اخر ان يحاول الاستفادة منه وإلا سوف اقاضية بموجب قانون الارهاب....

الاخ الشمري اولاً عملية استهلاك طاقة المعالج ليس لها علاقة بكون البرنامج process واحد او مقسم إلى عدد من الـThreads المشكلة تكمن فى عمليات حسابية وفى الغالب تكون عمليات حسابية غير ضروريه , مثلاُ عندما تقوم بإرسال الرساله WM_PAINT إذا قمت بإرسالها بإستمرار وبدون سبب, فقد تتسبب فى إستهلاك طاقة المعالج, لابد ان تحترس من مثل هذه الامور...

اما عملية تقسيم البرنامج لمجموعة Threads الهدف منه هو ان تحرر واجهة المستخدم مثلاُ من بعض العمليات الحسابية التى قد تستغرق وقت, لانك لو قمت بعمليات حسابية فى نفس الـThread الذى يحتوي على واجهة المستخدم, ما سيحدث هو ان واجهة المستخدم ستتوقف عن التحديث لحين تنتهى العملية الحسابية وكلنا يعرف ما يحدث فى هذه الفترة, البرنامج لا يستجيب لاي حدث حتى ينتهى من العملية الحسابية...

على كل حال اشرح لك اخى الشمري ولك فقط كيفية عمل Thread

الخطوة الاولى عليك بتحديد رسالة جديدة, وذلك بتحديد عنوان للرسالة و طريقة تفاعل معى الرسالة.. على النحو التالى

#define WM_MYMESSAGE WM_USER+1
........

تستطيع ان تحدد اكثر من 65 الف رسالة شخصية بإضافتها للثابت WM_USER يعنى WM_USER+X وتضع فى مكان الX اى رقم فى حدود int ولكن غير مسموح ان تضع نفس الرقم لرسالتين مختلفتين..

للاستجابة للرسالة نقوم نقوم بالتالي..

case WM_MYMESSAGE
افعل ما تريد القيام به هنا
break;

نفس الـThread ماهو إلا دالة عادية تكتب بهذا الشكل

DWORD WINAPI ThreadFunc(PVOID pvParam){
  DWORD dwResult = 0;.
  .
  .
.
PostMessage(hWnd,WM_MYMESSAGE,dwResult,NULL);
  return(dwResult);
}

كما تلاحظ فإن الدالة تشبه اي دالة من الدوال التى نقوم بإنشائها ولكن طريقة إستدعائها لعمل Thread جديد يختلف عن طريقة إستدعاء الدوال التى تعودنا عليها ..

لاحظ ايضاً انك ترسل رسالة للhWnd وهذه الرسالة هى رسالتنا الجديدة التى قمنا بإنشائها

مثلاُ لإستدعاء هذه الدلة نقوم بالتالى ..

CreateThread(NULL,NULL,&ThreadFunc,&pvParam,NULL,ADDR ID);

الID هو مجرد متغير من نوع int للحصول على قمية الThread وpvParam هو اى متغير نريد ان نرسلة للThread الجديد تماماُ كما نفعل معى اي دالة اخرى..

والباقى تم شرحة فى المداخلة السابقة..

ارجو ان يكون الشرح واضح اخى الشمرى ولو فى اى سؤال انا تحت امرك..

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

شئ غريب بالفعل, منتدى كامل ولا احد يستخدم الـThreads والـProcesses والـJobs, طيب كيف تبرمجو ؟

دا انا اخترت اسهل المواضيع فى هذا المجال امال لو اتكلمنا عن Thread Synchronization With Kernel Objects و Thread Synchronization in User Mode حتعملو إيه ولا الـMemory managment و الـException handling..

ياناس ارحمونا واتكلمو اين الاخوة المشجعين لفتح قسم API ؟ حنفتح قسم عشان نتكلم فى "كيف تصنع نافذه" و "وكيف تضيف ايقونه لبرنامجك" خلونا نتقدم شويه ونتكلم عن مواضيع تؤهلنا لعمل برنامج مفيد, وليس فقط واجهة مستخدم..

كل ما ينتهى درس عن كيف تصنع نافذه يبداء درس جديد عن كيف تصنع نافذة اخرة, إلى ان اصبح المنتدى كله عن صنع نافذة مستخدم طيب وبعدين؟ خلاص كدا اصبحنا مبرمجين؟ هل البرمجة هى صنع نافذة مستخدم وصلى اللهم وبارك على محمد؟

فتحت اكثر من موضوع هنا وفى قسم الاسمبلى ولكن لا حياة لمن تنادى, خلاص انا اقولكو احسن حل, لما تنتهو من صنع نافذة المستخدم ابعتولى رسالة عشان نكمل...

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

رغم اني لست خبيرا في السي++ مثل الشمري الا اني فهمت

اليس ما تتحدث عنه هو multithreading

اذا كان الامر كذلك فاسمح لك يا بو حميد ان اقول يستخدم هذ الكائن لتنفيذ اكثر عمليه في نفس الوقت كما

يعني معاجة متوازية لللبيانات مما يعطي استفادة قصوى من قدرة المعالج مما يعرف بتعدد المهام هذا النوع من المعالجة للمهام ظهر اول مرة في unix .. :D حيث كان البرنامج يقوم بمعا لجة المهمة الاولى ثم بعد مضي وقت قصير يقوم البرنامج بحفظ حالة الرجسترات

والقيم وبيدا بالقيام بالحسابات للمهمة الثانية تم يعود بعد مضي وقت قصير للاولى ممايوهم المستخدم ان النظام يقوم بعدة مهام

مما سمي حينها بال(preemptive multitasking ) مما ادي الر رفع كفاءة العمل حينها .

طبعا اذا كان النظام يدعم تعدد المهام فلما لانجعل المهمة الواحدة (البرنامج) تنفذ عدة عمليات في نفس الوقت

في الحقيقة ان مصطلح stream والمصطلح thread متقاربان

الاول للبيانات والثاني للعمليات (زي المكان والزمان في النسبية :lol: )

اخيرا اريد ان اقول المبرمج يستطيع ان ينشئ العدد الذي يريد من الthreads لا ينصج باستخدام اكثر من 16 لان عملية التنقل بينها سياخذ وقتا وسيبدو هذا الوقت ملحوظا عند ذلك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أخ أحمد

الأغلبية كما تعلم تحبذ الأشياء الجاهزة وتكون في بداية مواضيع كهذه متحمسة وكلما زاد الشرح كلما قل الإطلاع .

طبعاً الكثيرين لم يستخدموا ما تتكلم عنه لأنهم متعودين على أشياء جاهزة أو عمل برامج داتا بيز من النوع الذي لا يصل الى المتوسط ...

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

عندي لك فكرة ربما قد تجذب البعض للنقاش -مجرد فكرة -...

لماذا لا تقوم بشئ عكسي .. لديك برنامج جاهز وتريد معرفة الطريقة التي يقوم بأدآها -مثلا برامج sysinternals - ربما هناك الكثيرين لهم رغبة في معرفة طريقة عمل تلك البرامج

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

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

عذراً لم أدخل في النقاش لانشغالي بمشكلة glyph index والذي لو نجحت في حله ربما يشكل نقطة انعطاف كبيرة لي ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

وسع صدرك يا بو حميد ،أنت الخير و البركة و منك نتعلم .

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

ربما لو احتوت برامجنا على خوارزميات معقدة أو رسومات أو دوال نريد أن نجعلها تعمل بالتوازي لاحتجنا حينها للثريد لأنه سيتضح الفرق .

ولا يعني هذا أن الموضوع غير مهم ، عفواً .... ما أقصده أن الموضوع متقدم حبتين لذلك قلّت المشاركات .

عموماً أنا كان في خاطري سؤال ولكن لما شفتك مكشر :angry: و تطلب منا المشاركات الفعالة ،

استحيت وقلت أبو حميد يطلب منك تشارك و أنت جاي تسأل :s

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

يارومانوف إحنا عارفين إيه هو الـThread عايزين تطبيق عملى, برنامج صغير يوضح طريقة العمل ثم ننتقل بعدها إلى التطبيق على برامج اكبر ومواضيع اقوى..

اخى cipher لا نستطيع ان نبداء بشرح برامج systeminternals إذا كنا لا نعرف اساسيات البرمجة على نظام الوندوز, اول ما فتحنا موضوع الـThread الناس كلها هربت من المنتدى بما فيهم المشرفين, طيب كيف نتحدث عن ما هو اكثر تعقيداً.

واخير الاخ MSVS برامجنا متواضعه لاننا لا نبرمج اكثر من واجهة مستخدم ولا تقوم باي عمل على الاطلاق لذلك لو استمر الحال لن نتقدم خطوة واحدة, اى برنامج يحترم نفسه لا بد ان يستخدم Threads, بالتاكيد لن تحتاج إلى Threads عندما تكتب برنامج Hello World, ولكن لا نريد ان نتوقف عند هذا الحد.

المنتدى اصبح وضعه مخجل بصراحة, راجع اخر صفحة ستجد اغلب المواضيع عن استخدام المصفوفات و المتغيرات, لدرجة ان مواضيع الكتابة لملف والقرائة منه اصبحت من المواضيع المتقدمة جداً..

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

وبصفتى مدير تطوير المنتدى لابد ان انقل المنتدى من مرحلة المبتدئين إلى مرحلة المحترفين, ولكن للاسف لا استطيع فعل ذلك وحدى إن لم اجد تجاوب من الاعضاء...

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
اخى cipher لا نستطيع ان نبداء بشرح برامج systeminternals إذا كنا لا نعرف اساسيات البرمجة على نظام الوندوز, اول ما فتحنا موضوع الـThread الناس كلها هربت من المنتدى بما فيهم المشرفين, طيب كيف نتحدث عن ما هو اكثر تعقيداً.

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

عندما تقول لناس أن هناك Job,process,thread,file,registry,token,section,object,pool

وان هناك VXD,WMD وغيرها وغيرها وتبدأ تشرح حتى مع أمثلة سيتابعك من له معلومات مسبقة عنها

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

وتبدأ باعطاء أمثلة .. البرنامج x يمتاز بالخاصية y لانه استخدم التقنية z وهذه تفيدنا في أشياء مهمه في برامجنا لهذا علينا تعلمها . يعني نضع الفائدة قبل ثم نبدأ بالتوضيح كيف نحصل على هذه الفائدة ..

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

المنتدى اصبح وضعه مخجل بصراحة, راجع اخر صفحة ستجد اغلب المواضيع عن استخدام المصفوفات و المتغيرات, لدرجة ان مواضيع الكتابة لملف والقرائة منه اصبحت من المواضيع المتقدمة جداً..

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

وبصفتى مدير تطوير المنتدى لابد ان انقل المنتدى من مرحلة المبتدئين إلى مرحلة المحترفين, ولكن للاسف لا استطيع فعل ذلك وحدى إن لم اجد تجاوب من الاعضاء...

هو من زمان هكذا

كل سنة يأتي طلاب جدد الى المنتدى وتبدأ الاسئلة نفسها ثم يتعلم المبتدئ أشياء و أحيانا يتعمق ويبدأ بكتابة أشياء فهمها و يجيب عن أسئلة آخرين ومن ثم يعاد السيناريو . ومواضيع كهذه تترك لأن هذه المواضيع لا تغذي العقل ولا تشبع المعدة ولا تأتي بـ $ على الأقل في مجتمعنا ...

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

وكلما ضاع السؤال بين بقية الأسئلة أقوم بعمل up للسؤال لنفس السبب السابق

لهذا ان كنت تكتب موضوع لتنتظر من الآخرين شئ -خصوصاً في مثل هذه المواضيع - فمن الأفضل ألا تكتب الموضوع ...

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

شخصياً تركت الكتابة في هذه الأشياء منذ فترة للأسباب المذكورة أعلاه ...

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

Jun 13 2002

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

DeltaAziz

هذاك الموضوع قديم :)

على فكرة رد الأخ مصطفى هناك لم يكن كإعجاب بالموضوع , كان فقط لمعرفة ان كان بامكان المعرف "مصطفى عبدالرحمن" قادر على كتابة موضوع في ذلك اليوم -لأسباب ... -.

على فكرة كاتب الرد ليس الأخ مصطفى :D

طبعاً الموضوع كانت فقط بداية بسيطة ليس إلا ...

شكل الشباب اصيبوا بالإحباط من البداية ههههه

حظ موفق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أخي لم تعي ما أقصد

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكراً لك أخي أحمد غريب

ولكن مثل هذه الأمور تحتاج لبعض الوقت

سأتفرغ باقرب وقت لكي استفيد من هذا الموضوع

والحقيقه أنا لم أكتب برنامج واحد عن الـ MFC في السي ++

لأني لدي فكره أقتنعت بها وهي ان السي++ لغة برمجه وليست لغة GUI

ولأني لا أرى لها فائده سوى صنع نافذه وضغط زر معين

ولو أردت مثل هذه النوافذ أذهب إلى لغة الجافا فهي أفضل وأسهل من ناحية ال GUI

اريد ان اسألك هل لابد من أن أتعلم ال MFC لكي أتعرف على تفاصيل ال Processes واغير فيها ماأردت

اعتقد انك تستخدم ال MFC لان الProcess التي تتعامل معها مكتوبه بلغة السي . .

لكن هل أستطيع أن أحصل على الكود بدون أن أستخدم MFC معين في السي++

؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
اريد ان اسألك هل لابد من أن أتعلم ال MFC لكي أتعرف على تفاصيل ال Processes واغير فيها ماأردت

رغم ان الكلام موجه للأخ أحمد لكن مو مشكله - فضولي كالعادة -

ليس بالضرورة بل تستطيع أن تقول للحصول على تفاصيل الـ processes ستحتاج لإستعمال دوال غير مصرح بها

إذا كنت راغب في معلومات إضافية فقط عليك بوضع السؤال هنا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

كل المواضيع التي علت هذا الموضوع مغلقة او للواجبات .

عندي كم كلمة سأقولها لاحقا ...هالحين مشغول ..

لكن فقط للتذكير بهذا الموضوع .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

احاول استخدم الثريد لكن ما اعرف متى استخدمه :) ////

احمد غريب قال :

اما عملية تقسيم البرنامج لمجموعة Threads الهدف منه هو ان تحرر واجهة المستخدم مثلاُ من بعض العمليات الحسابية التى قد تستغرق وقت, لانك لو قمت بعمليات حسابية فى نفس الـThread الذى يحتوي على واجهة المستخدم, ما سيحدث هو ان واجهة المستخدم ستتوقف عن التحديث لحين تنتهى العملية الحسابية وكلنا يعرف ما يحدث فى هذه الفترة, البرنامج لا يستجيب لاي حدث حتى ينتهى من العملية الحسابية...

حاولت اشغل الواجهة باي شيء .

سويت زر ... ثم

	case WM_LBUTTONDOWN:
 for(i=0;i<=200;i+=.3)
 {
    width+=1;
 MoveWindow(hWndb,0,0,width,height,TRUE);
 }
 for(j=0;j<=200;j+=.3)
 {
    height+=1;
  MoveWindow(hWndb,0,0,(float)width,(float)height,TRUE);
   
 }


 break;

ستنشغل الواجهة قليلا ... ثم تعود :( ,,,

اريد شيء يشغل الواجهة ....

وبالتالي استخدم الثريد ..... وتتضح فائدته :) ,,,, اتمنى تكونوا فهمتوا قصدي .

thread__.zip

تم تعديل بواسطه الشمري
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .