PDA

View Full Version : ارسال یک مقدار استرینگ به تکست باکس برنامه ای دیگر



Sir-Programmer
چهارشنبه 08 مرداد 1393, 19:15 عصر
با سلام ،
من میخوام یه برنامه دارم الکی ساختم که یه تکست باکس داره و یک باتن روش کلیک میکنی یه مسج نمایش میده حالا یه پروژه باز کردم و میخوام تو این برنامه یه متن ارسال کنم خواستم ببینم باید چجوری این کارو انجام بدم خیلی چیز های گوگناگون زیادی دیدم ولی متاسفانه به کارم نیومد میدونم نحوه ی کار چجوریه فقط یه یه کد میخوام که یه تکست رو به فلان پنجره که نامش فلانه ارسال کنه اگه ممکنه نمونه کدی بزارید با تشکر :خجالت::قلب:

travianplus.org
چهارشنبه 08 مرداد 1393, 21:30 عصر
نظر شخصی بنده اینه که یک کلاس تعریف کن بعد مقدار تکس رو بریز تو کلاسی که ساختی بعد تو فروم بعدیت مقداری که داخل کلاس ریختی باز بریز تو یک تکس باکس
یک راه دیگه هم داری که تو فروم دوم تکس باکس رو خاصیت modifiers رو public کنید و از فروم یک مستقیم بریزید داخلش
حالا اگه اینایی که گفتم همونیه که میخواستی و نتونستی پیداش کنی بگید کد بدم

Sir-Programmer
چهارشنبه 08 مرداد 1393, 21:41 عصر
ممنون دوست عزی ولی فکر کنم متوجه نشدی من میخوام 2 تا مقدارو به یک برنامه دیگه بفرستم ، عکس زیرو نگاه کنی متوجه میشی
121754

felfely
چهارشنبه 08 مرداد 1393, 23:01 عصر
سلام.

کار جالبیه ولی فکر نکنم به همین راحتیا انجام بشه چون برنامه دوم هم باید قابلیت دریافت رو داشته باشه. چطور میخواید برنامه یاهو مسنجر داده هاتون رو دریافت کنه وقتی به سورس کدش دسترسی ندارید؟
به نظرم از راه برنامه نویسی نمیشه ولی شاید از طریق مفاهیم خاص سیستم عامل بشه کاریش کرد. خودم ایده ای ندارم ولی تو کامپیوتر کار نشد نداره!

Sir-Programmer
چهارشنبه 08 مرداد 1393, 23:14 عصر
ممنون واسه راهنماییت ، باید بگم که کار راحتیه دوسع عزیز مثال های زیادی دیدن امروز که خیلی مفید بودن ولی متاسفانه نمی دونم گیر کارم کجاست و هر کاری میکنم واسه من جواب نمیده واسه این کار باید ایتدا با استفاده از FindWidnows API عنوان برنامه رو بگیری بعد با استفاده از SendMessage اطلاعات رو ارسال کنی من خودم قبلاً میتونستم روی دکمه برنامه ی منسجر یا هر برنامه دیگه ای این کارو انجام بدمولی متاسفانه سورسشو نمی دونم کجا گذاشتم و حالا باید ابتدا یوزر و پسورد رو به تکست باکس برنامه ارسال و بعد بروی دکمه مورد نظر کلیک کنی من فقط مثالی در کوچیک اگه باشه در این مورد میخوام که متاسفانه کسی نیست جواب بده ولی اگه به جواب برسم حتماً اینجا قرارش میدم

omid nasri
چهارشنبه 08 مرداد 1393, 23:27 عصر
گام اول:
شما باید دونبال مبحث هوک بگردید تو اینترنت، منبع فارسی دورست و حسابی نداره، البته تو فروم های خارجی خیلی خوب دربارش توضیح داده شده است،
گام دوم:
بلفرض اینکه شما هوک رو بلدید، تعریفی کلی : هوک به زبان ساده تر به معنی چنگ زدن هستش،وقتی من در حال حاضر دکمه ای رو فشار می دم امکان داره عملیات هوک انجام شده باشه، برای مثال وقتی Alt+F4 زده میشه روی هر برنامه ای که باشی اون برنامه به صورت پیش فرض بسته میشه؟درسته، در اینجا عملیات هوک انجام گرفته، که از قبل برای این دوستورات توابعی در نظر گرفته شده است

گام سوم:
شما مقادیر دو تکست باکس رو در یک ارایه که دو تا اندیس داره ذخیره می کنی، حالا روی دکمه که اماده کرده اید کلیک می کنید، حالا با دستور هوکی که تعریف کردی میگی ، وقتی هر جا دوبار کلیک شد اندیس اول ذخبره شه و برای بار دوم هر جا کلیک شد اندیس دوم دخیره شه، بعد از این کار حتما باید تابع هوک رو ~ کنید. به همین راحتی.
البته شما گفتی هر وقت روی دکمه کلیک شد این کار رو انجام دهد، اما در این روش باید روی هر دو تکست باکس کلیک بشه.
سوالی بود در خدمت هستم.

امیر مهرشاد
پنج شنبه 09 مرداد 1393, 23:38 عصر
مبحث هوک سبک نیست و با کد نویسی ضعیف شاید خطاهایی در اجرای صحیح برنامت داشته باشی بلاه متاسفانه رفرنسهای فارسی جالبی نداره یا لااقل من پیدا نکردم ولی مبحث خیلی جالبیه من یجایی دنبال گرفتن تلفن تماس گیرنده از برنامه ونتا فکس بودم و عملی هم شد اگر پیدا کردم میزارمش همینجا

danialafshari
پنج شنبه 09 مرداد 1393, 23:56 عصر
سلام
اگر هر دو برنامه مال خودتونه یکی از راه هایی که به ذهنم میرسه سوکن هست

abbas.oveissi
جمعه 10 مرداد 1393, 00:04 صبح
مبحث هوک سبک نیست و با کد نویسی ضعیف شاید خطاهایی در اجرای صحیح برنامت داشته باشی بلاه متاسفانه رفرنسهای فارسی جالبی نداره یا لااقل من پیدا نکردم ولی مبحث خیلی جالبیه من یجایی دنبال گرفتن تلفن تماس گیرنده از برنامه ونتا فکس بودم و عملی هم شد اگر پیدا کردم میزارمش همینجا
اگر یا اینکه فوکوس روی برنامه دیگر باشید،مشکلی ندارید میتوانید از SendKeys استفاده کنید.خیلی راحت هم هست.
اما یک راه دیگه هم استفاده از UI Automation هست که میتونید به تمام المان های UI یک برنامه دیگر دسترسی داشته باشید و حتی رو دکمه های آن کلیک کنید!

Sir-Programmer
جمعه 10 مرداد 1393, 00:30 صبح
اگر یا اینکه فوکوس روی برنامه دیگر باشید،مشکلی ندارید میتوانید از SendKeys استفاده کنید.خیلی راحت هم هست.
اما یک راه دیگه هم استفاده از UI Automation هست که میتونید به تمام المان های UI یک برنامه دیگر دسترسی داشته باشید و حتی رو دکمه های آن کلیک کنید!
ممنون دوست عزیز تو یه سایت انگلیسی هم یه مورد دیدم از UI Automation حرف می زد اگه میشه نمونه ای بزارید
تشکر

abbas.oveissi
جمعه 10 مرداد 1393, 00:55 صبح
ممنون دوست عزیز تو یه سایت انگلیسی هم یه مورد دیدم از UI Automation حرف می زد اگه میشه نمونه ای بزارید
تشکر
تنها مثالی که دارم،برای یکی از پروژه های خیلی وقت پیشم هست.توی اینترنت بگردید مثال های بیشتر و توضیحات زیادی میتونید پیدا کنید.

این یک متد هست که باهاش URL مرورگر Chrome رو میخوندم .پارامتر ورودیش Process کروم بود :
public static string GetChromeUrl(Process process)
{
try
{
if (process == null)
{


throw new ArgumentNullException("process");
}
if (process.MainWindowHandle == IntPtr.Zero)
return null;


AutomationElement element = AutomationElement.FromHandle(process.MainWindowHan dle);
if (element == null)
return null;
AutomationElement edit1 = element.FindFirst(TreeScope.Subtree, new PropertyCondition(AutomationElement.ControlTypePro perty, ControlType.Edit));

ValuePattern d =(ValuePattern) edit1.GetCurrentPattern(ValuePattern.Pattern);
string url = d.Current.Value.ToString();
return url;
}
catch(Exception ex)
{
return null;
}
}
البته چون این کد ها کاملا به UI برنامه ربط دارند احتمال داره روی نسخه های جدید کروم کار نکنه،الان دیگه تست نکردم.

امیر مهرشاد
جمعه 10 مرداد 1393, 02:11 صبح
سلام
اگر هر دو برنامه مال خودتونه یکی از راه هایی که به ذهنم میرسه سوکن هست

یا راحت تر و بهینه ترش pipe (لوله)

Sir-Programmer
جمعه 10 مرداد 1393, 11:51 صبح
تنها مثالی که دارم،برای یکی از پروژه های خیلی وقت پیشم هست.توی اینترنت بگردید مثال های بیشتر و توضیحات زیادی میتونید پیدا کنید.

این یک متد هست که باهاش URL مرورگر Chrome رو میخوندم .پارامتر ورودیش Process کروم بود :
public static string GetChromeUrl(Process process)
{
try
{
if (process == null)
{


throw new ArgumentNullException("process");
}
if (process.MainWindowHandle == IntPtr.Zero)
return null;


AutomationElement element = AutomationElement.FromHandle(process.MainWindowHan dle);
if (element == null)
return null;
AutomationElement edit1 = element.FindFirst(TreeScope.Subtree, new PropertyCondition(AutomationElement.ControlTypePro perty, ControlType.Edit));

ValuePattern d =(ValuePattern) edit1.GetCurrentPattern(ValuePattern.Pattern);
string url = d.Current.Value.ToString();
return url;
}
catch(Exception ex)
{
return null;
}
}
البته چون این کد ها کاملا به UI برنامه ربط دارند احتمال داره روی نسخه های جدید کروم کار نکنه،الان دیگه تست نکردم.
ممنون از راهنمایی هات دوست عزیز ، منم هنوز تست نزدم فقط در مورد اینکه بخوام متن رو در آدرس بار کروم بزارم یا کلاً برای ست کردن یه استرینگ در تکست باکس برنامه باید چیکار کرد ؟ میشه این تغییرات رو تو همین سورس اعمال کنی که با نحوه کارش آشنا شم ؟
ممنون

khokhan
جمعه 10 مرداد 1393, 13:55 عصر
ممنون دوست عزیز تو یه سایت انگلیسی هم یه مورد دیدم از UI Automation حرف می زد اگه میشه نمونه ای بزارید
تشکر

.................................................. .......

abbas.oveissi
جمعه 10 مرداد 1393, 14:39 عصر
ممنون از راهنمایی هات دوست عزیز ، منم هنوز تست نزدم فقط در مورد اینکه بخوام متن رو در آدرس بار کروم بزارم یا کلاً برای ست کردن یه استرینگ در تکست باکس برنامه باید چیکار کرد ؟ میشه این تغییرات رو تو همین سورس اعمال کنی که با نحوه کارش آشنا شم ؟
ممنون
کنترل های تکست باکس یدونه متد SetValue دارند که میشه با اون متد براشون مقدار تعیین کنید.
الان نمونه کد متد SetChromeUrl رو براتون میذارم که به جای یک پارامتر دارای دو پارامتر ورودی هست.دومی متنی هست که میخواهید در Address bar قرار بگیرد.کد چگونگی استفاده اش هم براتون گذاشتم :
public void SetChromeUrl(Process process,string url)
{
try
{
if (process == null)
{
throw new ArgumentNullException("process");
}
if (process.MainWindowHandle == IntPtr.Zero)
return;


AutomationElement element = AutomationElement.FromHandle(process.MainWindowHan dle);


if (element == null)
return;


AutomationElement edit1 = element.FindFirst(TreeScope.Subtree, new PropertyCondition(AutomationElement.ControlTypePro perty, ControlType.Edit));


ValuePattern d = (ValuePattern)edit1.GetCurrentPattern(ValuePattern .Pattern);
d.SetValue(url);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}




private void btnSet_Click(object sender, EventArgs e)
{
var query = from p in Process.GetProcesses()
where p.ProcessName.Contains("chrome")
select p;
foreach (var p in query)
{
if (p.MainWindowHandle != IntPtr.Zero)
{
SetChromeUrl(p,textBox1.Text);
}
}
}
یک نمونه پروژه که نحوه ی استفاده از GetUrlChrome و SetUrlChrome رو نشون میده هم براتون ضمیمه کردم.

khokhan
جمعه 10 مرداد 1393, 15:23 عصر
ممنون دوست عزیز تو یه سایت انگلیسی هم یه مورد دیدم از UI Automation حرف می زد اگه میشه نمونه ای بزارید
تشکر
این هم نمونه برای UI Automation
اگه یه وقت دیدی برای رفرنسها ایراد گرفت از مسیر C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0 اون دوتا dllرو بازسازی کن :لبخند: