المجلس اليمني ... يمن واحد وآراء متعددة
::  قوانين المنتدى  |   طلب رقم التنشيط   |   تنشيط العضوية  |  استعادة كلمة المرور
العودة   المجلس اليمني :: العلمية والتقنية :: الكمبيـوتر والانتـرنت :: المواقع ولغات البرمجة والشبكات
|
 
أدوات الموضوع
قديم 22-01-2005, 04:56 PM   مشاركة رقم : 1
عضو فعّال
 
لا توجد صورة

 
تاريخ التسجيل: 08-12-2003
المشاركات: 527

افتراضي Remote Shut Down With vc++

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



نص الموضوع:
* هذا البرنامج يمكنك من إيقاف تشغيل حاسب عبر الشبكة
/////////////////////////////\\\\\\\\\\\\\\\\\\\\\

سنقوم أولاً بإنشاء برنامج EXE جديد باستخدام المعالج و نعطيه الاسم التالي
RemoteShutDown
نختار الخيار
dialog-****d application
وبعد الضغط على زر الإنهاء ستظهر لنا النافذة الأولى نقوم بعد ذلك بحذف كل الأدوات التي أنشأها ا لمعالج
و نضع الأدوات تبعاً للجدول التالي

Control :: Machine Name edit box

ID :: IDC_NAME

Variable :: m_mname

Type :: CString

---------------------------------
Control :: Alert edit box

ID :: IDC_MSG

Variable :: m_msg

Type :: CString

---------------------------------

Control :: Machine Password edit box

ID :: IDC_PWD

Variable :: m_pwd

Type :: CString

---------------------------------

Control :: Restart check box

ID :: IDC_RST

Variable :: m_rst

Type :: BOOL

---------------------------------


Control :: Force application shutdown check box

ID :: IDC_FAS

Variable :: m_fas

Type :: BOOL

---------------------------------

Control :: ShutDown button

ID :: IDC_SD

Control :: Close button

ID :: IDOK

---------------------------------
بعد ذلك نضيف الترويسة (Header) "winnetxk.h" ثم نربط المكتبة "mpr.lib" و ذلك كالتالي :
‘Project \ Settings \ Link’
و من ثم من مربع التحرير
‘Object/library modules’
قم بطباعة
‘mpr.lib’.

أضف handlers لزر الأمر ‘ShutDown’ و أضف الكود التالي

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

void CRemoteShutDownDlg::OnSd()
{
// TODO: Add your control notification handler code here
UpdateData ( TRUE ) ;
If ( m_mname == "" )
{
AfxMessageBox ( "لا يمكن وضع فراغ لاسم الكمبيوتر ...." ) ;
}
else
{
LPSTR lpMachineName = ( LPSTR ) ( LPCTSTR ) m_mname ;
LPSTR lpMessage = ( LPSTR ) ( LPCTSTR ) m_msg ;
DWORD dwTimeout = 10 ;
BOOL bForceAppsClosed = m_fas ;
BOOL bRebootAfterShutdown = m_rst ;

HANDLE hToken ;
TOKEN_PRIVILEGES TokenPrivileges ;
WnetAddConnection ( ( LPCTSTR ) m_mname, ( LPCTSTR ) m_pwd, NULL ) ;
OpenProcessToken ( GetCurrentProcess ( ), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY | TOKEN_ALL_ACCESS, &hToken ) ;
LookupPrivilegeValue( NULL, SE_REMOTE_SHUTDOWN_NAME, &( TokenPrivileges.Privileges[0].Luid ) ) ;
TokenPrivileges.PrivilegeCount = 1 ;
TokenPrivileges.Privileges[0].Attributes = 2 ;
AdjustTokenPrivileges ( hToken, FALSE, &TokenPrivileges, sizeof ( TOKEN_PRIVILEGES ), NULL, NULL ) ;

if ( !InitiateSystemShutdown ( lpMachineName, // اسم الكمبيوتر المراد إغلاقه
// ملاحظة : في حال تم تمرير قيمة فارغة هنا يتم إغلاق الكمبيوتر المحلي
lpMessage, // عنوان الرسالة المراد عرضها وهي الرسالة التي ستعرض في مربع حوار الإغلاق
dwTimeout, // فترة عرض مربع حوار الإغلاق بالثواني
// ملاحظة : يمكن في هذه الفترة وقف عملية الإغلاق باستخدام الدالة
// AbortSystemShutdown( )
bForceAppsClosed, // إغلاق التطبيقات المفتوحة بدون المطالبة بالحفظ
bRebootAfterShutdown ) ) // وهنا أخيراً خيار لإعادة التشغيل
AfxMessageBox ( " فشل في إغلاق الجهاز المحدد ...." ) ;
else
AfxMessageBox ( "نجحت العملية !!...." ) ;
}
}
قمنا هنا بحفظ قيم الأدوات في المتغيرات وذلك عن طريق الدالة
UpdateData( TRUE )
وعن طريق الدالة
WNetAddConnection( )
قمنا بالاتصال بالكمبيوتر المحدد في مربع النص و المراد إغلاقه وذلك بتحديد اسم الكمبيوتر و كلمة السر التي يجب أن يعرفها المستخدم بالطبع
و للإغلاق الجهاز يجب الحصول أولاً على التصريح لهذه العملية و يتم ذلك عن طريق الدوال

OpenProcessToken( )
LookupPrivilegeValue( )
AdjustTokenPrivileges( )

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

الباراميتر الثالث يأخذ إما true أو False أي إما إغلاق مباشر بدون حفظ البيانات أو عرض رسالة للمستخدم ليقوم بعمل حفظ لبياناته حتى لا يفقدها
و الباراميتر الأخير أيضاً إما True وفي هذه الحالة يقوم الجهاز بإعادة التشغيل أو False وفي هذه الحالة يتم إغلاق الجهاز نهائياً

أتمنى أن يكون الشرح واضحاً ومفهوماً للجميع

خالص التحية

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

  رد مع اقتباس
قديم 23-01-2005, 09:58 AM   مشاركة رقم : 2
عضو فعّال

الصورة الرمزية الشرعبي

 
تاريخ التسجيل: 06-11-2003
المشاركات: 517

افتراضي

والله مافهمت شيء

  رد مع اقتباس
قديم 07-02-2005, 10:37 PM   مشاركة رقم : 3
عضو فعّال
 
لا توجد صورة

 
تاريخ التسجيل: 08-12-2003
المشاركات: 527

افتراضي

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

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

خالص التحية

  رد مع اقتباس
قديم 15-02-2005, 12:08 PM   مشاركة رقم : 4
عضو متميّز
 
لا توجد صورة

 
تاريخ التسجيل: 03-07-2004
المشاركات: 1,462

افتراضي

مييييييييييييييييين !!!!!!!!!!!

نجييييييب بكله هنا

وينك يا رجل

كذا ترجم بنا هنا و تغييييييييب ؟؟؟

و الله عاتبين عليك

الحمد الله على السلامة

و المهم انك عدت

و العود احمد

ومشكور على الدرس

و متواصلين

تحياتي
-*-*-*-*-*-*-*
يمن جوست

  رد مع اقتباس
قديم 21-03-2005, 07:50 AM   مشاركة رقم : 5
عضو
 
لا توجد صورة

 
تاريخ التسجيل: 18-03-2005
المشاركات: 70

افتراضي

السلام عليكم
تمنيت أخ نجيب أن تعطينا كمان دروس في vc++ لانه لغه جميله فأذا تكرمت و عطيتنا درس أخر تكون مشكور

  رد مع اقتباس
قديم 21-03-2005, 11:46 AM   مشاركة رقم : 6
عضو فعّال
 
لا توجد صورة

 
تاريخ التسجيل: 08-12-2003
المشاركات: 527

افتراضي

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

أنا آسف أخي يمن جوست , لكن لكل إنسان ظروفه و أنا و الله مشغول لأبعد حد ( فسامحنا على التقصير ) ,,,

الأخت وردة اليمن , قمت بكتابة موضوع حول إنشاء مكتبات الربط الديناميكية لكِ ولكل مهتم بالـ vc++

تجدينه على الرابط التالي:

إنشاء مكتبات الربط الديناميكية ( فيجوال سي ++)

خالص التحية

  رد مع اقتباس
إضافة رد

أدوات الموضوع

الانتقال السريع :::

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.