PDA

View Full Version : خواندن آیتمهای list box از برنامه ای دیگر



saeidd
چهارشنبه 07 بهمن 1394, 21:28 عصر
سلام.

من میخوام توسط کدهای دلفی، آیتمهای یک list box رو که در یه برنامه دیگه هست و اون برنامه با C++ نوشته شده، استخراج کنم و بیارم تو برنامه خودم؛ تو جستجو هایی که کردم به کلید واژه ای به نام Hook رسیدم. چون آشنایی زیادی با هوک ندارم لطفا بگید که آیا کاری که میخوام انجام بدم با همین هوک انجام میشه یا راههای دیگه ای هم داره؟

کلاً دسترسی به اشیاء موجود دربرنامه های دیگر و دسترسی به اطلاعات مربوط به اونها مثل آیتمهای List Box، ستونهای گرید و حتی Hint مربوط به اونها و ... از چه راهی انجام میشه؟

خیلی هم نیاز به پیدا کردن کد ندارم، یعنی اگه یه اپلیکیشن هم باشه که اینکار رو انجام بده، فعلا کارم راه می افته، اگه نیست لطفا راهنمایی کنید که از کجا باید شروع کنم؟ چه کلید واژه هایی رو جستجو کنم؟
ممنون

Felony
پنج شنبه 08 بهمن 1394, 06:40 صبح
با هوک خیلی به دردسر میخورید برای پیدا کردن توابعی که این عملیات ها رو انجام میدن DLL های مختلفی مثل gdi32, kernel32,user32 و ... در تولید اون کنترل نقش دارن پس هوک کردن کار خیلی پردردسریه تو این مورد .

راحت ترین راه پیدا کردن هندل کنترل های و ارسال و دریافت پیغام هست - البته اگر UI برنامه گرامی رو با Qt نزده باشن !

جستجو اینها میتونه کمکتون کنه : FindWindow, FindWindowEX, FindWindoNext, PostMessgae, SendMessage

saeidd
پنج شنبه 08 بهمن 1394, 17:47 عصر
آقا مجتبی ممنون؛ با راهنمایی شما تونستم این کد رو پیدا کنم:

procedure GetListBoxItems(Handle: HWND; Target: TListBox);
var
I: Integer;
ItemCount: Integer;
TextBuffer: string;
TextLength: Integer;
begin
ItemCount := SendMessage(Handle, LB_GETCOUNT, 0, 0);
if ItemCount <> LB_ERR then
begin
Target.Items.BeginUpdate;
try
Target.Clear;
for I := 0 to ItemCount - 1 do
begin
TextLength := SendMessage(Handle, LB_GETTEXTLEN, I, 0);
SetLength(TextBuffer, TextLength);
SendMessage(Handle, LB_GETTEXT, I, LPARAM(PChar(TextBuffer)));
Target.Items.Add(TextBuffer);
end;
finally
Target.Items.EndUpdate;
end;
end;
end;


و در برنامه های دیگه درست کار می کنه ولی در اون برنامه ای که من میخوام نه!!!

اشکالش اینه که وقتی میخواد تعداد آیتمهای لیست باکس رو برگردونه، فقط تعداد آیتمهایی رو بر میگردونه که تو لیست باکس دیده میشن (آیتمهای زیر اسکرول رو نمی تونه حساب کنه)

و مشکل بعدی اینکه در این برنامه از فونتهای مخصوص داخلی استفاده شده، در نتیجه همون چند آیتمی رو هم که بر می گردونه، معلوم نیست چیه!! البته یکی از فونتهاش رو از تو فایلهاش پیدا کردم و نصب کردم ولی فایده ای نداره!

لطفا کمک کنید