PDA

View Full Version : سوال: فرستادن یك مقدار از برنامه ای، به برنامه ی دیگر كه در حال اجرا است؟!



newgoldenman
دوشنبه 01 تیر 1388, 02:17 صبح
سلام عزیزان.
یه سوالی دارم، اگه كمكم كنید خیلی ممنونتون میشم.

فرض كنید من یه برنامه ای دارم،كه داخل اون یدونه TextBox هست.
یه برنامه ی دیگه هم دارم، كه میتونم باهاش handle فرم برنامه ی دیگر رو بدست بیارم!
حالا چطور میتونم از طریق برنامه ی دوم، مقداری رو به داخل TextBox موجود در برنامه ی اول بفرستم؟


دقیقاً سوال منو اینجا یه بنده خدایی پرسیده، خودش هم بعد از مدتی به جواب رسیده! ولی من نتونستم handle اون TextBox كه مدنظرم هست رو به دست بگیرم!
http://www.c-sharpcorner.com/Forums/ShowMessages.aspx?ThreadID=34913

كسی از عزیزان تا حالا همچین تجربه ای داشته؟!
پیشاپیش خیلی خیلی ممنونم از كمكها و پیشنهاداتتون

esmaeily-hosein
دوشنبه 01 تیر 1388, 16:35 عصر
میتونی از SendMessage استفاده کنی .


int RF_TESTMESSAGE = 0xA123;
var W = (IntPtr)128;
Process[] processes = Process.GetProcessesByName("ProgramName");

if (processes.Length >= 1)
{
//iterate through all running target applications
foreach (Process p in processes)
//now send the RF_TESTMESSAGE to the running instance
SendMessage(p.MainWindowHandle, RF_TESTMESSAGE, W, IntPtr.Zero);
}

newgoldenman
دوشنبه 01 تیر 1388, 17:52 عصر
esmaeily-hosein جان، سلام. ممنونم بابت راهنماییت. فقط تنها مشكلی كه من دارم اینه كه نمیدونم الان اون TextBox ای كه دارم، handle اش چیه؟ و یا اون Button ای كه توی فرم هست، handle اش چیه. ممنون میشم این رو هم توضیح بدی. آخه الان فقط میتونیم handle خود فرم رو بدست بیاریم. باز هم ممنونم.

esmaeily-hosein
دوشنبه 01 تیر 1388, 21:34 عصر
int RF_TESTMESSAGE = 0xA123;
protected override void WndProc(ref Message m)
{
if (m.LParam == IntPtr.Zero)
{
if (m.Msg == RF_TESTMESSAGE)
{
textBox1.Text = m.WParam.ToString();
}
}
base.WndProc(ref m);
}


تمام message ها ابتدا در دستگیره اصلی پردازش و سپس به دستگیره های پایینتر پاس داده میشوند .
برای گرفتن handle کنترل ها معمولا یا از طریق Point استفاده میشه یا از طریق GetSubWindow که لیست
Handle ها بک دستگیره اصلی را به ما میدهد .
برای Custom message ها من هیچکدوم 2 روش فوق را توصیه نمیکنم .
روش Point معمولا دیکشنری ها زیاد استفاده میکنند (به فرض هر جا کلیک میکنی برات ترجمه میکنه ).
روش دوم کاربردهای خودش داره مثلا میخوای تمام دکمه های یک فرم به حالت Disable تبدیل کنی یه SendMessage با نوع پیغام مشخص .

در کل این روش Messaging روشی که اکثر سیستم عامل ها دارن ازش استفاده میکنند .

newgoldenman
سه شنبه 02 تیر 1388, 01:42 صبح
باز هم سلام.
مشكل من اینه كه تا حالا تجربه ای توی این زمینه نداشتم. میخوام فرض كنید كه اینكار رو انجام بدم:

با استفاده از برنامه ی اول، تمامی هندل های كنترل های روی فرم برنامه ی دوم رو لیست كنم، از توی اونها، مثلاً داخل فلان TextBox مه مد نظرم هست، مقداری رو بخونم و یا وارد كنم. همچنین دكمه ای رو فشار بدم یا ...

یه كمی دیگه اگه راهنمایی كنی، خدا بیشتر خیرت بده الهی جوون! جای دوری نمیره این كمك ها!

این لینك رو هم ببینید:
http://www.codeproject.com/KB/threads/winspy.aspx

یه قسمتی از كار رو انجام داده! تشخیص و تفكیك تك تك كنترل ها به نحو احسن!
البته میخوام #C كار كنم و از كدهای آماده ی این عزیز استفاده كنم.

به هر حال، نیازمند یاری شما عزیزانم!

یا علی مدد.

newgoldenman
چهارشنبه 03 تیر 1388, 23:15 عصر
از عزیزان كسی نمیتونه توی این زمینه كمكی لینكی چیزی ...؟

خیلی ممنونم

SMRAH1
پنج شنبه 04 تیر 1388, 00:12 صبح
سلام

اگر هر دو برنامه کار خودته (Source هر دو رو در اختیار داری و می تونی اونها رو باز نویس و تغییر بدی) راه ها بهتری هم هست.
ولی اگر برنامه مورد نظر یک برنامه خارجی است (خارج از محدوده اختیارات شما) باید بعد از دریافت handel پنچره EditControl ،پیغام WM_GETTEXT را برای دریافت متن اون و پیغام WM_SETTEXT را برای تخصیص مقدار اون استفاده کنی.چون از اینجا به بعدش بیشتر مربوط به برنامه نویسی win32 پیشنهاد می کنم در اونجا ها این مطلب رو پی بگیری.در ضمن اگر مشکلی در ارسال و دریافت این پیغام ها با استفاده از #C داری (با اینکه بعید می دونم داشته باشی).بگو تا نمونه کد بگذارم.

موفق باشی

newgoldenman
جمعه 05 تیر 1388, 13:00 عصر
سلام علیكم و رحمة الله!
چه سعادتی نصیب من شده كه شما به تاپیك سوال بنده تشریف آوردید! والا چه عرض كنم! متاسفانه من زیاد با توابع API و كلاً با Win32 App خیلی سر و كار نداشتم. از وقتی كه یادم میاد برنامه مینوشتم، تا الان كه چندین سال میگذره، باور بفرمایید حتی یك ماه وقت خالی نداشتم كه برم سراغ حتی یك نمونه ی ساده از API !!!

در واقع اگر بتونم تمامی كنترل های روی فرم یك برنامه (البته خارجی! چون میتونم برنامه های دیگر خودم رو كنترل كنم، با Remote ! ) رو لیست كنم، و از بین اونها اونی رو كه نیاز دارم، مقدارش رو بخونم، و در صورت نیاز داخلش بنویسم و همچنین دكمه ای رو بزنم، یا كامبوباكسی رو بالا و پایین كنم! و از این قبیل كارهای ساده! ....

در هر حال، خیلی خیلی ممنون میشم ازتون كه در این زمینه بنده را راهنمایی بفرمایید. اجرتون با آقا امام هادی (ع) !
باز هم ممنون. یا علی مدد