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

نسخة كاملة : كيف اعرف مقبض النافذة واسم القسم classname والنافذة المفعلة focusedhand و ground
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
كيف اعرف مقبض النافذة واسم القسم classname والنافذة المفعلة focusedhand و groundhand
تبعا لمؤشر الفأرة
السلام عليكم ورحمة الله وبركاتة

هل تريد ان تقوم بتحديد عملية وبعد ذلك تعرف النوافذ الخاصة بها ومقابضها واسماء الاصناف ... مثل برامج الـ SpyWindow ?
انا كان عندي برنامج لما تمر الفأرة فوق عنصر في النافدة تعطيني تلك الأمور
تفضل أخي .. فقط أضف تايمر Smile
PHP كود :
procedure TForm1.Timer1Timer(Sender: TObject);
var 
p: TPoint ;
hWin:THandle;
CN: PChar;
begin
GetCursorPos
(p);
hWin:=WindowFromPoint(p);
Caption:=IntToHex(hWin,8);
GetMem(CN,250);
Windows.GetClassNameA(hWin,CN,250);
Edit1.Text:=CN;
Edit2.Text:=IntToHex(GetForegroundWindow,8);
FreeMem(CN,250);
end; 
جيد ... الطريقة سهله جداً ... فقط تحتاج بعض الاسطر والقيل من الفهم ...

سنضع الكود في مكون Timer حيث سيتم جلب موقع الماوس وبعد ذلك جلب الهاندل والمعلومات التي تتعلق به

في البداية نحتاج جلب مقبض النافذة(Handle Window) التي يمر عليها الماوس وساذكر احد الاكواد التي كتبها
أخي المبرمج SMP3 في احد المواضيع
كود جلب مقبض النافذة :
PHP كود :
procedure TForm1.tmr1Timer(Sender: TObject);
var
  
PositionMouse : TPoint;
  
HandleWindow : THandle;
begin
  GetCursorPos
(PositionMouse);
  
HandleWindow := WindowFromPoint(PositionMouse);
end; 

والآن بعد ان حصلنا على مقبض النافذة ...
من المقبض سنخرج اسم الصنف ( ClassName )
وكذلك عنوان النافذة ( WindowTitle )
وايضاً رقم العملية ( ProcessId )

والباقي عليك Smile

نكمل الكود السابق بهذا الكود ونكون قد حصلنا على المعلومات السابقة :

PHP كود :
procedure TForm1.tmr1Timer(Sender: TObject);
var
  
PositionMouse : TPoint;
  
HandleWindow : THandle;
  
sLen : Integer;
  
sWindow : String;
  
dwProcessId : Cardinal;
begin
  GetCursorPos
(PositionMouse);
  
HandleWindow := WindowFromPoint(PositionMouse);          // Here we get Handle Window

  
SetLength(sWindow,255);                                  //
  
GetClassName(HandleWindow,PChar(sWindow),255);           // Here we get Class Name ...
  
edtClassName.Text := sWindow;                            //

  
sLen := GetWindowTextLength(HandleWindow);               //
  
SetLength(sWindow,sLen);                                 // Here we get Window title ...
  
GetWindowText(HandleWindow,PChar(sWindow),sLen + 1);     //
  
edtWindowTitle.Text := sWindow;                          //

  
GetWindowThreadProcessId(HandleWindow, @dwProcessId);    //
  
edtProcessId.Text := IntToStr(dwProcessId);              // Here we get ProcessId ...
end; 

كما ترى العملية كانت سهله .. بينما البعض يضن انها ساطر كثيرة Smile

بالتوفيق آخي

والسلام عليكم
هههه يبدو ان اخي المبرمج smp3 سبقني ... على العموم المعلومة وصلت وهذا هو المهم