delphi4arab منتديات دلفي للعرب
كيف اقوم بتغيير Class النافذة ؟ - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : كيف اقوم بتغيير Class النافذة ؟ (/showthread.php?tid=5050)



كيف اقوم بتغيير Class النافذة ؟ - ALmuhhnad - 23-03-2013

السلام عليكم ورحمة الله وبركاتة

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

.jpg   Tmain.jpg (الحجم : 46.93 ك ب / التحميلات : 40)
الهدف كي لا يتم إكتشاف نافذت برنامجي من خلال الدالة FindWindow


كيف اقوم بتغيير Class النافذة ؟ - SMP3 - 23-03-2013

في الحقيقة لن يمكنك ذلك بالطرق العادية .. لماذا ؟
لأنه عند ظهور نافذة البرنامج يقوم الوينداوز بحفظ مقبضها 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


كيف اقوم بتغيير Class النافذة ؟ - ALmuhhnad - 24-03-2013

اهلا اخي المبرمج smp3 ... شكرا على التوضيح والاجابة Smile

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

جزاك الله خير ووفقك لما يحبه ويرضااه


كيف اقوم بتغيير Class النافذة ؟ - SMP3 - 24-03-2013

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)); 



كيف اقوم بتغيير Class النافذة ؟ - kachwahed - 24-03-2013

وعليكم السلام ورحمة الله وبركاته
فكرة أخرى Hook لـ FindWindow/FindWindowEx
http://www.delphi4arab.net/forum/showthread.php?tid=949
لا أدري...