delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف اقوم بتغيير Class النافذة ؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاتة

كيف اقوم بتغيير الـ Class الخاص بالنافذة عند تشغيل البرنامج كل مرة .. ؟
صورة توضيحيه :
[attachment=2507]
الهدف كي لا يتم إكتشاف نافذت برنامجي من خلال الدالة FindWindow
في الحقيقة لن يمكنك ذلك بالطرق العادية .. لماذا ؟
لأنه عند ظهور نافذة البرنامج يقوم الوينداوز بحفظ مقبضها Hanlde و الكلاس الخاصة بها بعد تنفيذ RegisterClassEx
لذلك من المستحيل تغييرها وقت التشغيل -أعني عند ظهور النافذة -بطريقة مباشرة

الطرق الغير مباشرة هي قبل انشاء وظهور النافذة يمكنك تغيير كلاس الفورم .. يعني بداية كل تشغيل للبرنامج
PHP كود :
type
TForm1 
= class(TForm)
public
 
procedure  CreateParams(var Params: TCreateParams);  override ;
end;

procedure TForm1.CreateParams(var Params: TCreateParams);
var 
CN :PChar;
begin
inherited
;
  
// Random Number
  
CN:=PChar('NewClass'+Copy(IntToStr(GetTickCount),5,2));
  
StrPLCopy(Params.WinClassName,CN,High(Params.WinClassName));
end; 
أو يمكنك عند انشاء كائن جديد من الصنف TForm
PHP كود :
var
f:TForm1;
begin
 f
:=TForm1.Create(Application);
 
f.Show;
End; 
و على فكرة يمكنك أن تجعل الكلاس الخاص بالفورم TMain وتريح راسك ... أغلب البرامج النافذة الأساسية تحمل الكلاس TMain
اهلا اخي المبرمج smp3 ... شكرا على التوضيح والاجابة Smile

كان بودي ان تضع تعليقات على الكود .. كي استطيع فهم ما يجري اثناء تنفيذ الاوامر

جزاك الله خير ووفقك لما يحبه ويرضااه
ALmuhhnad كتب :كان بودي ان تضع تعليقات على الكود .. كي استطيع فهم ما يجري اثناء تنفيذ الاوامر
نقوم بعمل override للحدث CreateParams الخاص بالفورم
PHP كود :
procedure  CreateParams(var Params: TCreateParams);  override ; 
ثم نقوم بتوليد كلاس عشوائي يتغير في كل مرة نقوم بتشغيل البرنامج
PHP كود :
CN:=PChar('NewClass'+Copy(IntToStr(GetTickCount),5,2)); 
ثم نقوم بتغيير كلاس النافذة
PHP كود :
StrPLCopy(Params.WinClassName,CN,High(Params.WinClassName)); 
وعليكم السلام ورحمة الله وبركاته
فكرة أخرى Hook لـ FindWindow/FindWindowEx
http://www.delphi4arab.net/forum/showthread.php?tid=949
لا أدري...