ABOMOKATL

[ تمت الإجابة ]حول الدالة Sendkey و شاشة الدخول فى الويندوز

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

السلام عليكم

كتبت أداة صغيرة تقوم بعمل شئ معين حينما يخرج المستخدم إلى شاشة الدخول الخاصة بالوينوز (و ذلك بالضغط على علامة الويندوز و L)

من ضمن عمل هذه الأداة أنها تقوم بتشغيل الNumLock و أشياء أخرى

أنا جربت sendKey و keybd_event و لكن كليهما لا يعمل أثناء وجود شاشة الدخول

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

المهم ما العمل :excl: :excl:

أنا أريد أن أقوم بتشغيل الNumLock بجانب أشياء أخرى أيضا فكيف أقوم بهذا !!

تم تعديل بواسطه _- محمد نور -_
1

شارك هذا الرد


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

^^^

0

شارك هذا الرد


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

قد يبدو السؤال سخيفا :unsure: و لكن ما الملف التنفيذى الذى تتبعه شاشة الدخول، هل هو winlogon.exe ؟؟

0

شارك هذا الرد


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

هل تقصد الملف الذى يجعل شاشة الدخول تعمل ؟؟

الله اعلم :excl: :excl: :excl: :excl:

لماذا يا ترى ؟

0

شارك هذا الرد


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

معذره نسيت انى ادرس كود ويندوز 2000 و ليس xp، عموما شاشة الدخول توجد لها رسائل خاص يتم معالجتها قبل رسائل النظام الإفتراضيه.

لقد رأيت ملف يحتوى على عديد من الرسائل و شرحها و لكنى لا اذكر اسمه، إذا كان لديك كود ويندوز 2000 قم بالدخول على هذا المسار

win2k\private\windows\gina\winlogon

هذا المسار يحتوى على كود برنامج winlogon قد يفيدك.

و الله ولى التوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
إذا كان لديك كود ويندوز 2000

:) :) :) :) :) :) :) :) :) :) :) :) :)

كلا ليس لدى :P

أنا أريد حل بسيط و لا أريد أن الدخول فى متاهات نظم التشغيل :happy:

0

شارك هذا الرد


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

:) :) :) :) :) :) :) :) :) :) :) :) :)

كلا ليس لدى :P

أنا أريد حل بسيط و لا أريد أن الدخول فى متاهات نظم التشغيل :happy:

أظن أن البرامج التي تعمل كمستخدم SYSTEM تستطيع العمل في تلك الفترة , جرب عمل خدمة أو عملية مع صلاحية SYSTEM

أو يمكنك صنع dll تعمل ضمن عملية الwinlogon المسؤولة عن شاشة بدء التشغيل بجانب عملية logonui.exe حسب ضني :)

إبحث عن هذا المسار في محرر التسجيل وفي الأنترنت لمعلومات أكثر :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify

معلوماتي نظرية في هذا المجال =\ إن شاء الله الأخوة يفيدوك أكثر , دمت بود :)

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

شارك هذا الرد


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

كنت ساكتب رد البارحة لكن لم أجد وقت للتاكد من المشكلة بعمل مثال ...

كما ذكر Syntax_err :

راجع

http://msdn.microsoft.com/en-us/library/aa380543(VS.85).aspx

http://msdn.microsoft.com/en-us/library/aa380545(VS.85).aspx

http://www.codeproject.com/KB/system/winlogon_notification_package.aspx

موضوع GINA تم مناقشته من قبل على ما أتذكر ..

سأحاول تطبيق مثال لأتاكد إن كانت المشكلة موجودة أم لا ...

أنا جربت sendKey و keybd_event و لكن كليهما لا يعمل أثناء وجود شاشة الدخول

هل إستخدمت الطريقة المذكورة سابقاً؟

أي نسخة Windows تستخدم؟

1

شارك هذا الرد


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

كنت وضعت رد أخر لكن مع عملية التحديث للمنتدى لم يتم إرساله .

جربت Winlogon Notification Packages

استخدمت الكود


procedure ToggleNumLock;
var
KeyState: TKeyboardState;
begin

GetKeyboardState(KeyState) ;
//simulate key events (down + up)
if (KeyState[VK_NUMLOCK] = 0) then
begin
Keybd_Event(VK_NUMLOCK, 1, KEYEVENTF_EXTENDEDKEY or 0, 0) ;
Keybd_Event(VK_NUMLOCK, 1, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0) ;
end
else
begin
Keybd_Event(VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY or 0, 0) ;
Keybd_Event(VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0) ;
end;
end;

و لم يكن هناك اي مشكل

0

شارك هذا الرد


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

معذرة أنا أستخدم الدوت نت C# فكيف أكتب Winlogon Notification Packages

الذى أعرفه أن Winlogon Notification Packages عبارة عن DLL !!

أليس كذلك !

أستخدم ويندوز أكس بى

تم تعديل بواسطه _- محمد نور -_
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
أنا أريد حل بسيط و لا أريد أن الدخول فى متاهات نظم التشغيل :happy:

حسنا، يوجد حل لم اجربه و لكنه يبدو منطقيا.

شاشة الدخول تعمل على Desktop مختلف و اسمه Winlogon داخل الـ workstation الإفتراضيه Winsta0 (مفيش غيرها) لذا الحل الذى لدى هو قم بالتحقق من رسائل النظام المرسله إلى شاشة برنامجك و عندما يحدث ان تاتى الرساله الخاصه بـ desktop switching قم بفتح نسخة جديده من برنامجك و لكن اجعل الـ desktop الخاص بها هو الخاص بشاشة الدخول ثم اغلق النسخه الحاليه.

يبدو الكلام سهلا و لكن التطبيق اسهل، و السؤال الذى يطرح نفسه ما هى الرساله الخاصه بالتحويل بين desktop و اخر؟ الإجابه قد تكون محبطه و لكنها الحقيقه لا يوجد و لكن عند حدوث تبديل للـ desktop توجد رساله تستقبل معاملات معينه هذه المعاملات لا تأتى لهذه الرساله إلا فى هذه الحاله فقط (و هذا طبقا لما رأيته داخل كود الويندوز الخاص بالـ desktop).

الرساله هى WM_WINDOWPOSCHANGING و المعامل lParam يشير و قتها لمؤشر من نوع WINDOWPOS و عند التحويل بين desktop و اخر لابد من الشرط التالى ان يتحقق


!(WINDOWPOS.flags & SWP_NOZORDER) && WINDOWPOS.hwndInsertAfter == HWND_TOP

الكلام السابق هو ما يحدث فعلا مع الـ desktop الإفتراضى قبل ان يقوم بالتحويل للأخر لذا و حيث ان الـ desktop هو نافذه تستقبل ايضا رسائل اعتقد انه سيتم ارسال نفس الرساله بنفس المعاملات لكل النوافذ المفتوحه الموجوده بداخله قبل ان يتم عمل تحويل للأخر.

و الله ولى التوفيق

0

شارك هذا الرد


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

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

قمت ببعض الإختبارات على النافذه ووجدت ان النافذه و قت حدوث التحويل بين الـ desktop و اخر تستقبل مجموعه معينه من الرسائل و بقيم غريبه بعض الشئ عن ما ذكر فى الـ MSDN

msg=0x7c (WM_STYLECHANGING) wparam=0xfffffffffffffff0 lparam=0x44be974 result=0x0

msg=0x7d (WM_STYLECHANGED) wparam=0xfffffffffffffff0 lparam=0x44be974 result=0x0

msg=0x7c (WM_STYLECHANGING) wparam=0xffffffffffffffec lparam=0x44be974 result=0x0

msg=0x7d (WM_STYLECHANGED) wparam=0xffffffffffffffec lparam=0x44be974 result=0x0

msg=0x46 (WM_WINDOWPOSCHANGING) wparam=0x0 lparam=0x44be9a8 result=0x0

msg=0x83 (WM_NCCALCSIZE) wparam=0x1 lparam=0x44be97c result=0x0

msg=0x47 (WM_WINDOWPOSCHANGED) wparam=0x0 lparam=0x44be9a8 result=0x0

msg=0x18 (WM_SHOWWINDOW) wparam=0x1 lparam=0x0 result=0x0

msg=0x55 (WM_NOTIFYFORMAT) wparam=0x150a40 lparam=0x3 result=0x0

msg=0x129 wparam=0x0 lparam=0x0 result=0x0

msg=0x127 wparam=0x30001 lparam=0x0 result=0x0

msg=0x128 wparam=0x30001 lparam=0x0 result=0x0

msg=0x210 (WM_PARENTNOTIFY) wparam=0xa400001 lparam=0x150a40 (WM_CREATE) result=0x0

كما هو واضح بالأعلى يبدو انه يتم تغيير الـ style الخاص بالنافذه إلى اخر (WM_STYLECHANGING ثم WM_STYLECHANGED) يليها تحريك للنافذه إلى موضع (لم اقم بتحليله بعد) ثم بعد قليل ترى الرساله WM_SHOWWINDOW تخبرنا ان النافذه على وشك الظهور (wparam=0x1) فى حين ان المعامل lparam انها تختفى (SW_HIDE = 0) يليها على التوالى الرسائل WM_QUERYUISTAT و WM_CHANGEUISTATE و WM_UPDATEUISTATE و التى تعنى ان النظام قام بتغيير حالة UI الخاصه ببرنمجنا .

توجد ايضا الرسائل WM_NOTIFYFORMAT و WM_PARENTNOTIFY لتخبرنا ان النافذه التى تحتوى على النافذه الحاليه (الـ desktop فى حالتنا هذه) يقوم بإخبارنا بأمر معين.

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

لاحظ ان الفكره فى المشاركه السابقه عامل نجاحها متوقف فقط على معرفة وقت عمل switching من الـ desktop الحالى للأخر فإن استطعت تحديد هذا الوقت احتمال كبير فى نجاح الفكره.

و الله ولى التوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
معذرة أنا أستخدم الدوت نت C# فكيف أكتب Winlogon Notification Packages

الذى أعرفه أن Winlogon Notification Packages عبارة عن DLL !!

أليس كذلك !

وما المطلوب منا ؟

إذا كانت C# غير قادرة على عمل DLL فبامكانك إختيار C , دلفي أو غيرهما ...

ليس لدي معلومات عن .net وكيفيه تعاملها مع هذه الجزئية , فربما هناك مكتبة جاهزة مضمنة مع الـ .net ...

google it

الوضع قد يختلف مع vista / windows 7 ...

0

شارك هذا الرد


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

تبا للدوت نت :mad: ، الفكره فشلت فشلا ذريعا لأن الدوت زفت تقوم بعمل فلتر على الرسائل و تقوم بتعديل بعض من قيمهم بما يتناسب معها، لذا :mad:

و الله ولى التوفيق

0

شارك هذا الرد


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

مشكوووووووووووووووووووووورر :sleep:

0

شارك هذا الرد


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

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

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