سؤال بخصوص التلاعب فى البرامج الاخرى...؟
#1
بسم الله الرحمن الرحيم
لقد أطعلت على الرابط http://delphi4arab.net/forum/showthread.php?tid=1098 وأستفد منة الكثير ولكن عند التلاعب ببعض البرامج بأأستحدام برنامج Win X_1.3.exe لجلب الكلاس لا يأتى لى بأسم النافذة أو بالاحرى يأتى الكلاس نيم عبارة عن أرقام وعند وضع هذة الارقام فى FindWindow لا يفعل شيئاّ هل فى طريقة من لمعرفة أسم النافذة بطريقة أحترافية أفضل..
الرد
#2
كيف FindWindow لا يفعل شيئا !!!
ممكن توضح أكثر أو تضع مثال ؟
بالنسبة لاسم النافذة WindowText فليس شرط أن تحتوي على اسم ..
الرد
#3
SMP3 كتب :كيف FindWindow لا يفعل شيئا !!!
لا يفعل شيئاّ لأنه على ما أعتقد أسم النافذة وهمى أو لا يتتطابق...
جرب أخى بنفسك على برامج الانتى فيرس بأأستخدام برنامج Win X_1.3.exe وحاول أفعل أى شئ فية وأذا كان هناك جديد أنا فى أنتظارك أخى الكريم ...!
الرد
#4
لقد قمت بالتجريب و ليس هناك أي مشكل !!
كمثال :
PHP كود :
var hWin:THandle ;
begin
hWin
:= FindWindow('#32770',0);
Caption:=IntToHex(hWin,8);
end; 
الرد
#5
السلام عليكم ورحمة الله وبركاتة

ربما يتم تغيير الكلاس او اسم النافذة ... بعد كل إعادة تشغيل ...
الرد
#6
أخى لقد علمت السبب ولكنى لا أعلم العلاج والسبب هو أن X الخاص بأغلاق النافذة محجر أو غير مفعل لذلك عند وضع الامر WM_CLOSE لا يفعل شيئاّ أما مع باقى النوافذ التى فيها x مفعل يتم أغلاق النافذة هل يوجد أمر بديل يقوم بأغلاق النافذة او أخفائها WM_؟
الرد
#7
لإخفاء النافذة نستعمل الامر :
PHP كود :
var
  
WinHandle : HWND
begin
  WinHandle 
:= FindWindow('','TitleWindow');
  
ShowWindow(WinHandle,SW_HIDE)
end; 
لإظهار النافذة نستعمل الامر :
PHP كود :
var
  
WinHandle : HWND
begin
  WinHandle 
:= FindWindow('','TitleWindow');
  
ShowWindow(WinHandle,SW_SHOW)
end; 

لإغلاق البرنامج او عملية تعمل حالياً نستعمل :
PHP كود :
TerminateProcess(dwhProcess,0) // dwhProcess = HandleProcess ... you can get it by function OpenProcess 

وجميع الدوال التي استعملناها من دوال API ...
الرد
#8
السبب الحقيقي هو وجود فلترة لرسائل الوينداوز التي يستقبلها التطبيق
جرب أن تقوم باستخدام الدالة TerminateProcess
PHP كود :
Function KillWindow(Wnd: THandle): Bool;
var
  
ProcessHandle: THandle;
  
PID: DWORD;
begin
  Result 
:= False;
  if 
Wnd = INVALID_HANDLE_VALUE then
    
Exit;

  
GetWindowThreadProcessId(Wnd, PID);
  
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
  
Result := TerminateProcess(ProcessHandle, 0);
  
CloseHandle(ProcessHandle);
end; 
مثال :
PHP كود :
KillWindow(Handle); 
الرد
#9
ALmuhhnad كتب :لإخفاء النافذة نستعمل الامر :
PHP كود :
var
  
WinHandle : HWND
begin
  WinHandle 
:= FindWindow('','TitleWindow');
  
ShowWindow(WinHandle,SW_HIDE)
end; 
API ...

أخى العزيز بالرغم من سهولة الكود الا أننى لم أفلح فى تنفيذة ( أعذرنى لسة مبتدئ) حولت أطبق هذا الامر على البرنامج ya h o o messenger ولكن سؤالى الاول هل عنوان النافذة titlewindow هى ثاتها الكلاس التى تأتى من خلال الكود هذا
كود :
var p: TPoint ; hWin:THandle; begin GetCursorPos(p); hWin:=WindowFromPoint(p); Caption:=IntToHex(hWin,8); lbl1.Caption:=form1.Caption; end;
وحتى لا أكثر من أسئلتى وأزعجكم **** انك ترفق لى مثال حتى أتمرن علية وجزاك الله كل خير ...!
الرد
#10
لنفرض انك تريد ان تخفي نافذة مااء ...

ماذا تحتاج ؟
مقبض النافذة وهو نوع HWND او THandle ... في الحقيقة كل هذه الانواع تشير إلى النوع NativeUInt
وعندما نحصل على هذا المقبض تكون النافذة كما لو انها بقضبة برنامجك Smile ( من اسمها مقبض )

كيف نحصل على مقبض النافذة ؟
يوجد عدة طرق من خلال استعمال دوال API... وجميع هذه الطرق تريد معلومات عن النافذة , بعذها يطلب عنوان النافذة
واسم الكلاس كما هو الحال في FindWindow ... وآخر هي التي تحصل على معلوماتها بنفسها مثل GetForegroundWindow فهي تاخذ النافذة المفعلة او النشطة حالياً ... وغيرها الكثير من الطرق للحصول على مقبض النافذة

مثال للحصوال على مقبض النافذة من خلال الدالة FindWindow
الدالة تحتاج معلومتين او بارمترين للتجلب لنا المقبض الخاص بالنافذة التي قدمنا معلوماتها لدالة ...
المعلومة الاول او البارمتر الأول : IpClasseName
هذا يعني عنوان النافذة , نحصل عليه من كود آخر ... ( ابحث بالمنتدى ) ... او تستتطيع ان تجلبه من خلال برامج خارجية مثل WinSpy

المعلومة الثانية او البارمتر الثاني : IpWindowName
هذا يعني اسم الصنف ... وهو مهم لكي يتعامل النظام مع النافذة وهذا نحصل عليه كذلك من كود آخر او نستطيع الحصول عله كذلك من برنامج WinSpy او غيره ...

بعد ان حصلنا على المعلومات او البارمترات نكتب الكود التالي :
PHP كود :
var
  
HandleWindow : THandle;
begin
  HandleWindow 
:= FindWindow('','ya h o o messenger');
  
ShowWindow(HandleWindow,SW_HIDE)
end; 
بعدها سيتم إخفاء النافذة .
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم