منع استخدام برنامج DeDe لفك برامج دلفي
فيما يلي مقالة حول منع استخدام برنامج DeDe لفك برامج دلفي ~
تلك الموجودة في "" هي تعليقاتي التوضيحية، والباقي عبارة عن إبداعات أصلية ~
مشروع البرنامج1؛
الاستخدامات
النماذج،
النوافذ,
سيسوتيلز,
الوحدة 1 في "Unit1.pas" {Form1}،
Unit2 في 'Unit2.pas' {Form2}؛
وظيفة RegisterServiceProcess(dwProcessId, dwType: dWord): Stdcall;
"kernel32.dll" خارجي
{$R *.RES}
فار
هموتكس: هوند؛
ريت: عدد صحيح؛
hCurrentWindow: HWnd;
szText: Array[0..254] of char; // مطلوب لفك التجميع
يبدأ
application.Initialize;
APPLICATION.TITLE: = 'تصميم مجموعة عباد الشمس في دلفي: Zhang Guopeng'؛
RegisterServiceProcess(GetCurrentProcessID, 1); // دع البرنامج يختفي في Ctl+Alt+Del.
"يمكننا أن نرى أن المؤلف استخدم RegisterServiceProcess لتسجيل البرنامج كبرنامج خدمة WINDOWS ~"
"لكن الجميع يعلم أن هذه الوظيفة مضمنة في kernel32 وتعمل فقط في 98/ME ~"
"لذلك لا تعتبر هذا مفتاحًا للتفكيك، يمكن القول أنه يمكن الاستغناء عنه ~"
// منع إلغاء الترجمة من البداية
hCurrentWindow := GetWindow(APPLICATION.Handle, GW_HWNDFIRST);
"مما سبق أعلم أن المؤلف يريد معرفة ما إذا كانت نافذة برنامجه هي نافذة المستوى الأعلى."
بينما hCurrentWindow <> 0 افعل
يبدأ
إذا كان GetWindowText(hCurrentWindow, @szText, 255) > 0 ثم
إذا pos('DeDe', StrPas(@szText)) <> 0 ثم
"إذا لم يكن الأمر كذلك، فاحصل على عنوان نموذج سطح المكتب الحالي وحدد ما إذا كان "DeDe""
يبدأ
APPLICATION.MESSAGEBOX('هل تريد فك ترجمتي؟ الأمر ليس بهذه السهولة!',
'هاها... يا رجل! '، mb_ok)؛
// Closewindow(hCurrentWindow);//تصغير نافذة البرنامج
Enablewindow(hCurrentWindow, false);
// اجعل نافذة البرنامج غير نشطة إذا كان بإمكانك الحصول على رقم معرف مؤشر الترابط الخاص بالبرنامج، فيمكنك جعل البرنامج غير قابل للاستخدام وغير قابل للإغلاق، أليس كذلك؟
"الجملتان أعلاه هما علاج DEDE ~"
"Closewindow: لتصغير النافذة المحددة، ولكن لن يتم مسح النافذة من الذاكرة~"
"Enablewindow: السماح/تعطيل إدخال الماوس ولوحة المفاتيح في النافذة المحددة، بالتأكيد لن يعمل خطأ ~"
وقف؛
نهاية؛
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
نهاية؛
// منع إلغاء الترجمة من النهاية
// منع البرنامج من التشغيل مرتين
HMUTEX := CREATEMUTEX(Nil, FALSE, 'delphi Sunflower Collection Design: Zhang Guopeng');
RET := GETLASTERROR;
إذا كان RET <> ERROR_ALREADY_EXISTS إذن
يبدأ
Application.CreateForm(TForm1, Form1);
// Application.CreateForm(TForm2, Form2);
Application.Run;
نهاية
آخر
APPLICATION.MESSAGEBOX('تم تشغيل البرنامج!', 'مطالبة', mb_ok);
Releasemutex(hmutex);
نهاية.