PDA

View Full Version : نحوه دسترسی به کنترلهای فرمی از یک Process دیگر



mehdi_turbo
چهارشنبه 19 اسفند 1388, 09:01 صبح
با سلام

من میخاستم بدونم میشه یه برنامه exe را اجرا کنم و بعد با توجه به فیلدهای درون ان (textbox) فیلدها را پر کنم ؟

در واقع مثل اینکه اتوماتیک یک فایل exe را اجررا کنم و ببینم چه فیلدهای ورودی ای دارد و من انها را از طریق اطلاعات موجود در بانک پر کنم !!

همین کار را تحت وی نبز نیاز دارم ؟؟؟

میدونم چه شکلی فایل اجرایی مثل notepad رش با ارگومان اجرا کنم ولی این چیزی که در بالا گفتم ارگومان برنامه نیست بلکه فیلدهای ورودی خود برنامه است !!

با تشکر از همگی

mehdi_turbo
چهارشنبه 19 اسفند 1388, 09:35 صبح
لطفا اگر منبع ای را میشناسید که در این مورد صحبت کرده ذکر کنید . من نمی دونم دقیقا باید چی را سرچ کنم ؟

M.YasPro
چهارشنبه 19 اسفند 1388, 09:50 صبح
منظورتون واضح نیست

mehdi_turbo
چهارشنبه 19 اسفند 1388, 10:15 صبح
منظورتون واضح نیست

فک کنم نشه واضح تر از این منظورم را بیان کنم :افسرده:

ببین فرض کنید یک فایل مثل a.exe داریم که با اجرای این فایل از کاربر 5 مقدار را دریافت میکند:
مثل نام و نام خانوادگی و ...
حالا من میخام این مقادیر را به صورت اتوماتیک بدون اینکه کاربر وارد کند ، از طریق برنامه ثالثی وارد کنم!!!

متوجه شدید ؟

M.YasPro
چهارشنبه 19 اسفند 1388, 10:24 صبح
http://barnamenevis.org/forum/showthread.php?t=64210
پست شماره دو
فکر نکنم به این کار بگن "اتوکامپلیمنت"!!!

mehdi_turbo
چهارشنبه 19 اسفند 1388, 10:31 صبح
http://barnamenevis.org/forum/showthread.php?t=64210
پست شماره دو
فکر نکنم به این کار بگن "اتوکامپلیمنت"!!!

دستت درد نکنه دوست من !
منم درست نمیدونم که بشه به این کار گفت اتوکامپلیمنت ولی اسم دیگه ای به ذهنم نرسید!

ولی دوست من این پستی که گذاشتی فقط 2 تا فایل اجرایی داخلش بود که اصلا بدرد من نمیخوره ؟ چون من میخام کد نویسی کنم و سورس برنامه ها را میخام نه خود برنامه ها :عصبانی++:

debugger
چهارشنبه 19 اسفند 1388, 13:41 عصر
با sendkeys میشه یه متنی را ارسال کرد به بک برنامه دیگر

در وب این کار به سادگی انجام میشه . چون هر فیلد یک id داره ولی در نرم افزار (ارسال از یک نرم افزار به نرم افزار دیگه) فکر می کنم با sendkeys عملی بشه

اول میای هندل فرم را پیدا می کنی و روش فوکوس می کنی

بعد یک مقداری را برای تکست باکس میفرستی و بعد یک tab میفرستی تا فوکوس بره تو تکست باکس بعدی و بعد مقدار را ارسال می کنی و بعد یک tab دیگه و الی اخر

mehdi_turbo
چهارشنبه 19 اسفند 1388, 15:35 عصر
ممنون از حسن توجه شما دوست عزیز :تشویق:
میشه کمی در مورد گرفتن هندل برنامه و ارسال اطلاعات به ان از این طریق توضیح دهید من سرچ کردن چیزی نیاورد

s_mehdi
چهارشنبه 19 اسفند 1388, 16:29 عصر
سلام برای گرفتن هندل پنجره از API باید استفاده کنی.
یک سرچ بزنی پیدا می کنی.
این لینک فکر کنم کارتو را بندازه:
http://www.csharphelp.com/2006/08/get-current-window-handle-and-caption-with-windows-api-in-c/

اما بهتره که این جوری کار که برنامه ای که می خوای اطلاعاتت رو به اون ارسال کنی رو اسم پراسسش رو پیدا کنی بعد
با دستور زیر از اون تو برنامه ات استفاده کنی:

Process[] SameProcesses = Process.GetProcessesByName("ThisProcess.exe");
Process SameProcess = SameProcesses[0];

بعد با API برنامه ات رو با دستور زیر اکتیو کن.

[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
SetForegroundWindow(SameProcess.MainWindowHandle);

در آخر با SendKeys اطلاعاتت رو ارسال کن

mehdi.mousavi
چهارشنبه 19 اسفند 1388, 16:56 عصر
سلام.
اگر با Win32 آشنا هستید، این کار رو می تونید براحتی انجام بدید. کافیه، ابتدا با یکی از API های موجود، Handle به Window و البته، کنترلی کنترلی که قصد دارید محتوای اونو تغییر بدید رو بدست بیارید. سپس توسط SetWindowText Win32 API، مقدار مورد نظر خودتون رو در کنترل مزبور Set کنید. نیازی به ارسال کلید توسط SendKeys و اینجور کارها نیست (یعنی اینکار در واقع ممکنه مشکلاتی رو هم پیش بیاره که از کنترل شما خارجه).

اما API ها مورد استفاده در این روش:


FindWindow برای گرفتن Handle مورد نظر به پنجره ای که قصد دخل و تصرف در اون رو دارید. (یا دیگر API ها، بسته به اینکه چه مشخصه ای از Window مقصد رو دارید).
GetDlgItem برای گرفتن Handle به کنترل مورد نظر روی پنجره ای که در مرحله قبل Handle به اون رو بدست آوردید (یا اگر ID اش رو نمیدونید، باید دونه به دونه Iterate کنید کنترلهای موجود در Dialog رو...)
SetWindowText برای Set کردن Text مورد نظر در TextBox موجود (اگر TextBox باشه)، یا فرضا ارسال BM_SETCHECK به کنترل، برای انتخاب یک CheckBox (اگر checkbox باشه) و ...

موفق باشید.

yazd_alireza
پنج شنبه 23 اردیبهشت 1389, 10:49 صبح
سلام

منم همین مشکل را دارم.من میخوام یه برنامه ای بنویسم که در هنگام اجرا داخل مسیرش جستجو کنه و فایل هایی که مربوط به update ویندوز هست را داخل یک صف بریزه بعد یک به یک اجرا کنه و نصب کنه روند همه فایل ها یکسانه.

به طور مثال اجرا کنه دکمه next صدا زده بشه و اگر در این حین check box ی هست انتخاب کنه next کنه تا finish و بعد فایل بعدی.

ممنون میشم کمک کنید.

mehdi.mousavi
سه شنبه 28 اردیبهشت 1389, 16:14 عصر
سلام منم همین مشکل را دارم.من میخوام یه برنامه ای بنویسم که در هنگام اجرا داخل مسیرش جستجو کنه و فایل هایی که مربوط به update ویندوز هست را داخل یک صف بریزه بعد یک به یک اجرا کنه و نصب کنه روند همه فایل ها یکسانه. به طور مثال اجرا کنه دکمه next صدا زده بشه و اگر در این حین check box ی هست انتخاب کنه next کنه تا finish و بعد فایل بعدی. منون میشم کمک کنید.

سلام.
اینکار برای نصب برنامه ها مناسب نیست. عموما برای نصب برنامه ها سوئیچ هایی در نظر گرفته میشه که در "سکوت" و بدون نمایش GUI به کاربر، برنامه نصب بشه. و الا اومدیم یکی از اون CheckBox هایی که شما میخواهید روشن کنید، نوشته بود:

Yes, Please f*** the entire hard disc.

و شما هم اونو روشن کردید...

برای حل هر مشکل، از راهش وارد بشید.

موفق باشید.

yazd_alireza
چهارشنبه 29 اردیبهشت 1389, 18:25 عصر
سلام.
اینکار برای نصب برنامه ها مناسب نیست. عموما برای نصب برنامه ها سوئیچ هایی در نظر گرفته میشه که در "سکوت" و بدون نمایش GUI به کاربر، برنامه نصب بشه. و الا اومدیم یکی از اون CheckBox هایی که شما میخواهید روشن کنید، نوشته بود:

Yes, Please f*** the entire hard disc.

و شما هم اونو روشن کردید...

برای حل هر مشکل، از راهش وارد بشید.

موفق باشید.

متوجه منظورتون نشدم،منظورتون از سوئیچ برنامه یا برنامه های خاصی است.
من میخوام واسه نصب update های ویندوز این برنامه را بنویسم که اتوماتیک این update ها نصب بشه همه این فایل ها( update) برای نصب روند یکسانی داره.

بازم ممنونم

yazd_alireza
شنبه 15 خرداد 1389, 19:43 عصر
آخه چرا هیچکی پیدا نمیشه جواب بده!؟