PDA

View Full Version : سوال: آیا راهی هست که با دونستن هندل یک کامپوننت نام اون رو پیدا کنیم؟



mbshareat
پنج شنبه 24 فروردین 1391, 12:59 عصر
سلام
من یک برنامه دارم که مال خودم نیست. چند تا کامپوننت داره که از یک کلاس هستند و Text اونها هم یکیه!
(با WM_GetText نمیشه اونها رو تشخیص داد!)
آیا راهی هست که نام کامپوننتها رو بدست بیارم و بعد با چه کدی می تونم از این نام کامپوننت برای ارسال Message استفاده کنم؟
برای من مهم نیست حتما از نام کامپوننت استفاده کنم ولی یک مشخصه ثابت می خوام که با SendMessage یا از راه دیگه به کامپوننت پیغام بفرستم.

Felony
پنج شنبه 24 فروردین 1391, 16:51 عصر
بعد از کامپایل یک برنامه Native دیگه اسم کامپوننت معنایی نداره ، فقط نام کلاس کامپوننت موجود هست که اون هم بین کامپوننت های همسان مشترک هست و عنوان کامپوننت که به دردمون نمیخوره ؛ راهی که دارید این هست که هندل اولین کنترل از کلاس مورد نظر رو با تابع FindWindow و FindWindowEX به دست بیارید و بعد ببینید Tab Order کنترل مورد نظر چند تا بعد از این کنترل که هندلش رو به دست آوردید هست ، بعد با استفاده از تابع GetWindow و ارسال پارامتر GW_HWNDNEXT بهش هندل کنترل بعدی رو به دست بیارید ؛ مثلا در کد زیر من هندل کنترلی رو به دست آوردم که Tab Order اون 5 تا بعد از اولین کنترلم هست :

var
NextHandle: THandle;
I: Integer;
begin
NextHandle := FindWindow('TForm1', 'Form1');
NextHandle := FindWindowEx(NextHandle, 0, 'TEdit', nil);
for I := 1 to 5 do
NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
end;

mbshareat
پنج شنبه 31 فروردین 1391, 21:55 عصر
سلام
من برای دو تا برنامه این کد رو تست کردم دیدم GetWindow(NextHandle, GW_HWNDNEXT); هندل کامپوننت قبلی رو بر می گردونه.
(لازمه ذکر کنم که یکی از برنامه ها رو خودم نوشته بودم که TabOrder رو هم نگاه کردم!)

Felony
پنج شنبه 31 فروردین 1391, 23:10 عصر
کدی که قرار دادم مورد خاصی نداره که بگیم ممکنه فلان جاش درست کار نکنه ، یک تابع هست با 2 پارامتر که پارامترها هم کاملا واضح هستند ، مشکل از جای دیگه ای هست ، اگر میتونید برنامه ای که روش این تست رو انجام دادید ضمیمه کنید .

mbshareat
پنج شنبه 31 فروردین 1391, 23:47 عصر
سلام
86018
آقای تاجیک من در زمینه شبیه سازی کلیک بر روی چیزی شبیه لینک در پنجره ای که Minimize شده مشکل دارم لطفا به این تاپیک (http://barnamenevis.org/showthread.php?337490-%DA%86%D8%B7%D9%88%D8%B1-%D9%85%DB%8C-%D8%AA%D9%88%D9%86%D9%85-%DA%A9%D9%84%DB%8C%DA%A9-%D8%A8%D8%B1-%D8%B1%D9%88%DB%8C-%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA%D B%8C-%D8%A7%D8%B2-%D9%BE%D9%86%D8%AC%D8%B1%D9%87-%D8%A7%DB%8C-%DA%A9%D9%87-%D9%85%DB%8C%D9%86%DB%8C%D9%85%D8%A7%DB%8C%D8%B2-%D8%B4%D8%AF%D9%87-%D8%B1%D9%88-%D8%B4%D8%A8%DB%8C%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%DA%A9%D9%86%D9%85%D8%9F&p=1488848#post1488848) هم سر بزنین!