السلام عليكم ورحمة الله وبركاته،
بالنسبة للسؤال الأول، فما كتبه الأخ عبدالرحمن يقوم بالعمل المطلوب، لكن إذا كان مفتاح CAPS Lock مفتوحاً فقط! إذا أردت أن يعمل في جميع الحالات فاكتبه كما يلي:
كود
void CTestDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
char a;
a = char(nChar);
if(a == 'X' || a == 'x')
{
MessageBox("X Key is Down");
}
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
بالنسبة للطلب الثاني، فتستطيع عمل ذلك باستخدامة دالة الأبي آي: SystemParametersInfo، وذلك لخداع وندوز وجعله يعتقد بأن حافظ الشاشة يعمل، ولذا فإنه يمنع استخدام CTRL+ALT+DEL وكذلك استخدام ALT+TAB. ولكي تمنع هذا أثناء عمل برنامجك، هو أن تضع استدعاء هذه الدالة في الدالة OnInitDialog لتفعل المنع، واستدعاء آخر في الدالة OnDestroy لإلغاء المنع. تستطيع وضع الدالتين السابقتين باستخدام الـ Wizard وذلك بالنقر بالزر الأيمن على الكلاس CTestDlg في الـ ClassView، واختيار الأمر Add Windows Message Handler، بعد ذلك اختر الرسالة WM_INITDIALOG ثم اضغط Add والرسالة WM_DESTROY ثم اضغط Add. بعد ذلك ضع استدعاءات الدالة فيهما كما يلي:
كود
BOOL CTestDlg::OnInitDialog(){
//.....Default code
//.....
//Put the following line
//Second Parameter:
// = 1 if you want to set it on
// = 0 if you want to set it off
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, 1, NULL, 0);
return TRUE;
}
//.........
//.........
void CTestDlg::OnDestroy(){
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, 0, NULL, 0);
CDialog::OnDestroy();
}
ملاحظة أخيرة: هذه الدالة مخصصة للإستخدام الداخلي لوندوز، ولا تنصح مايكروسوفت باستخدامها للتطبيقات، كما أنها لا تعمل على وندوز NT أو وندوز 2000.
تمنياتي لك بالتوفيق،
تحياتي للجميع.