سلام
یه سوال داشتن من دارم یه برنامه با کمک هندل واسه یاهو می نویسم ولی به مشکل برخوردم
به عنوان مثال توی صفحه لاگین یاهو دو تا تکست باکس هست که اولی یوزنیم میشه و دومی پسورد من با استفاده از findWindow و findwindowex دارم یوزر نیم رو با هندل وارد می کنم ولی چون جفتشون تکس باکسن و class جفتشون رو یکی داره نشون میده پسورد به جای اینکه توی تکست باکس پسورد وارد بشه بازم توی همون تکست باکس یوزرنیم وارد میشه . کسی می تونه کمکم کنه که چه جوری هندل تکس باکس دومی رو بدست بیارم یا اینکه کل هندل های اون پنجره رو پیدا کنم؟ . مرسی
فقط ممنون میشم در حد مبتدی توضیح بدید
از رو classname مربوط به parent اون Editbox میتونی تشخیص بدی کدوم به کدوم هست
مثلا parent مربوط به password تو یاهو 7-8 بودش #32770
ممنون از پاسختون ولی هنوز نتونستم مشکلم رو حل کنم ممنون میشم اگه بتونین بصورت کد همین چیزی رو که گفتید رو بهم توضیح بدید خودم دارم تست می کنم ولی بازم به مشکل بر می خورم
این کدی هست که زمان یاهو 8-9 برای تست نوشته بودم
کد:
var
handle:HWND;
classname:array[0..255]of Char;
begin
GetClassName(h,classname,256);
if classname='Edit'then
begin
handle:=GetParent(h);
GetClassName(handle,classname,256);
if classname='#32770'then
begin
if SendMessage(h,EM_GETPASSWORDCHAR,0,0)>0 then
begin
PostMessage(h,EM_SETPASSWORDCHAR,0,0);
Sleep(10);
SendMessage(h,WM_GETTEXT,256,Integer(@classname));
list.Add(classname);
Sleep(10);
PostMessage(h,EM_SETPASSWORDCHAR,integer('*'),0);
end
else
begin
SendMessage(h,WM_GETTEXT,256,Integer(@classname));
list.Add(classname);
end;
end;
end;
مرسی ولی بازم به اون چیزی که می خواسنم نرسیدم من مشکلم اینه که نمی تونم توی اون پنجره هندل های مختلف رو پیدا کنم واسه اینکه classnameشون یکیه caption هم ندارن ، واسه همین یا هندل رو پیدا نمیکنه یا فقط هندل editor اول رو پیدا میکنه
الان من فقط میخوام هندل های بعدی رو هم که classnameشون با اولی یکی هست رو پیدا کنم ؟
ممنون
باید از تابع enumchildproc و enumchildwindow استفاده کنید
مرسی
میشه در مورد enumchildwindow و enumWindows بیشتر توضیح بدید و چه جوری باید ازش استفاده کنم ؟
در اینجور مواقع از تابع GetWindow استفاده میشه و پارامترهای زیر:
پنجره بعد از هندلی که میگیره.
پنجره قبل از هندلی که میگیره
آخرین پنجره در parent مشترک از هندلی که میگیره.
اولین پنجره در parent مشترک از هندلی که میگیره.
ساختار تابع هم به شکل زیر هستش:
کد:
function GetWindow(hWnd: HWND; uCmd: UINT): HWND;
hwnd: هندل ورودی که نسبت به اون هندل پنجره های قبل یا بعد رو انتخاب میکنی.
uCmd: آرگومنت مورد نظر برای انتخاب پنجره قبلی یا بعدی شما که در بالا توضیح دادم.
مثال:
کد:
var
PwTxt:Hwnd;
begin
PwTxt:=GetWindow(YHandle,GW_HWNDNEXT);
end;
پیروز باشید.
اگر متوجه نشدی فانکشن زیر هندل ادیت باکس پسورد یاهو رو بهت میده
کد:
function GetYahooPwHandle():Hwnd;
var
PwHandle:Hwnd;
begin
PwHandle:=0;
Result:=0;
PwHandle:=FindWindow('YahooBuddyMain',nil);
PwHandle:=FindWindowEx(PwHandle,0,'#32770','YLoginWnd');
PwHandle:=FindWindowEx(PwHandle,0,'Edit',nil);
PwHandle := GetWindow(PwHandle, GW_HWNDNEXT);
PwHandle := GetWindow(PwHandle, GW_HWNDNEXT);
Result:=PwHandle;
end;
پیروز باشید.