PDA

View Full Version : سوال: بدست آوردن مقدار edit از یه فایل exe که در حال اجراست



Delphi7_love
پنج شنبه 04 شهریور 1389, 14:08 عصر
فرض کنید یه برنامه داریم که در حال اجراست و روی اون یه ادیت داره که یه مقدار داخلش داره(این برنامه فقط یه فایل exe است که توسط یه نفر دیگه ساخته شده ) و اون مقدارو میخوایم داخل یه برنامه دیگه ازش استفاده کنیم(برنامه ای که ما برای خودمون نوشتیم ). حالا برای جلوگیری از اینکه کاربر به صورت دستی بیاد این مقدارو داخل برنامه ما کپی کنه میخوام با برنامه نویسی انجام بدم .
چطور ممکنه ؟ لطفا راهنمایی نمایید .
با تشکر .

tdkhakpur
پنج شنبه 04 شهریور 1389, 14:16 عصر
الگوریتم کار به این شکله
1- توسط FindWindow هندل edit را بدست بیارید.
2- توسط sendmessage داده ای را که میخواهید به هندل فوق ارسال کنید.
دموهای زیای ارسال شده کلمات SendMessage و FindWidow را جستجو کنید.

Felony
پنج شنبه 04 شهریور 1389, 16:16 عصر
باید توسط FindWindow بای هندلد فرم برنامه رو پیدا کنید و توسط FindWindowEX هندل Edit داخل فرم و در آخر هم توسط SendMessage یا PostMessage بهش متن رو ارسال کنید .

Delphi7_love
پنج شنبه 04 شهریور 1389, 17:21 عصر
کلافه شدم ، همه پست هایی که در این رابطه بود و خوندم ....
بیشتر که حرف آقای تاجیک رو زده بودن و جاهایی هم که پاسخ داده بودن من نتونستم استفاده کنم . اگه کسی یه مثال کوچولو داره و بذاره اینجا عالیه.
خواهش دارم فقط نگید جستجو کن که همه رو دیدم
ممنون

Felony
پنج شنبه 04 شهریور 1389, 17:54 عصر
یه نمونه براتون ضمیمه کردم که حاوی یک فایل exe با نام Sample anOther APP هست ، این برنامه رو اجرا کنید و پروژه دلفی همراه رو هم کامپایل و اجرا کنید ، با کلیک بر روی دکمه Send Text نتیجه رو مشاهده کنید .

Delphi7_love
پنج شنبه 04 شهریور 1389, 19:09 عصر
با تشکر از شما آقای تاجیک
من این کارو از مثال های خودتون در پست های دیگه تونستم انجام بدم فقط مشکلم سر اینه که میخوام از برنامه دیگه تو برنامه خودم متن رو نشون بدم . متشکرم

acilios
پنج شنبه 04 شهریور 1389, 19:11 عصر
سلام.
از این خط ایراد میگیره!

Application.MainFormOnTaskbar := True;

Delphi7_love
پنج شنبه 04 شهریور 1389, 19:20 عصر
سلام.
از این خط ایراد میگیره!

Application.MainFormOnTaskbar := True;

این خط رو غیر فعال کنید درست میشه
البته منم علتش رو نمیدونم چرا .
فکر کنم مربوط به ورژن های بالاست . اگه زحمتی نبود آقای تاجیک در رابطه با این مساله توضیح بدبد

Felony
پنج شنبه 04 شهریور 1389, 21:12 عصر
با تشکر از شما آقای تاجیک
من این کارو از مثال های خودتون در پست های دیگه تونستم انجام بدم فقط مشکلم سر اینه که میخوام از برنامه دیگه تو برنامه خودم متن رو نشون بدم . متشکرم
تابع زیر رو قبلا نوشته بودم ، هندل شئ مورد نظر رو بهش بدید و متنش رو به عنوان خروجی دریافت کنید :
function GetText(hWnd: THandle): String;
var
I: Integer;
begin
if (SendMessageTimeout(hWnd, WM_GETTEXTLENGTH, 0, 0, SMTO_ABORTIFHUNG, 2000, dword(I)) <> 0) then
begin
SetLength(Result, I + 1);
if SendMessageTimeout(hWnd, WM_GETTEXT, I + 1, integer(Result), SMTO_ABORTIFHUNG, 2000, dword(I)) <> 0 then
SetLength(Result, I)
else Result := '';
end
else
Result := '';
end;

مثلا در همون برنامه قبلی که ضمیمه کردم :
var
Hand: THandle;
begin
Hand:= FindWindow('TFRM_Main', 'Main Form');
Hand:= FindWindowEx(Hand, 0, 'TEdit', nil);
ShowMessage(GetText(Hand));
end;


این خط رو غیر فعال کنید درست میشه
البته منم علتش رو نمیدونم چرا .
فکر کنم مربوط به ورژن های بالاست . اگه زحمتی نبود آقای تاجیک در رابطه با این مساله توضیح بدبد
MainFormOnTaskbar از نسخه 2009 به بعد به دلفی اضافه شد و با مقدار دهی اون با True فقط فرم اصلی برنامتون تو Taskbar نمایش داده میشه و با False کردنش هر فرمی که تو برنامتون باز کنید ( Show کنید ) براش یه آیکن تو Taskbar در نظر گرفته میشه .

موفق باشید .