PDA

View Full Version : تشخیص برنامه در حال اجرا



H_r_m
یک شنبه 04 مرداد 1383, 15:55 عصر
با سلام
دوستان همانطور که میدانید با دستور App.PrevInstance میتوان فهمید که برنامه اجرا شده و در حافظع است یا نه
حالا اگر برنامه اجرا شده باشد و Minimize باشد وما برنامه را دوباره اجرا کنیم چطور میتوان آنرا بزرگ کرد که کاربر بتواند اعمالش را انجام دهد
ممنون میشوم اگر پاسخ کاملی در این باره بفرمایید .

H_r_m
دوشنبه 05 مرداد 1383, 20:46 عصر
پس این اساتید کجا هستند 8)
این بخش خیلی کمرنگ حال میده ها :lol:

H_r_m
یک شنبه 11 مرداد 1383, 08:54 صبح
سلام
لطفا اگه کسی جوابو بلده راهنمایی کنه اخه خیلی واجبه :(

behzad65
سه شنبه 27 مرداد 1383, 15:31 عصر
اگه منظورت این باشه که وقتی برنامه Minimize است و زمانی که دوباره برنامه را اجرا میکنی ان وقت برنامه ای که Minimize هست Restore یا Maximize بشه!!!
خوب راحت یک شرت بزار که اگه برنامه Minimize بود همان برنامه را Restore کنه!!!
نمی دونم فهمیدی یا نه!!!!

H_r_m
سه شنبه 27 مرداد 1383, 16:17 عصر
سلام
خدارا شکر که حداقل یکی یه جواب داد :D :D :wink:
Behzad65 نه متوجه منظورتون نشدم
اون شرط رو کجا باید بزارم
البته من غیر از restore یا Maximize یه کارای دیگه ای هم با برنامه دارم
مثلا فرستادن یه سری پارامتر به برنامه و اجرای اونا
ولی من میخام تمام این کارها رو با برنامه اول انجام بدم یعنی نمیخام چند تا برنامه بیان بالا و هر کدام یه کاری بکنن :evil:
امیدوارم شما هم متوجه شده باشید :oops:

سعید قدیری مقدم
سه شنبه 27 مرداد 1383, 17:28 عصر
دوست عزیز یک راحش اینه که از API استفاده کنی
البته یک خورده پیچیده هست. ما api هایی داریم که می تونه title برنامه های اجرا شده تو محیط ویندوز رو بخونه . مثلا شما تو title برنامت نوشتی "My Best Software" خوب وقتی برنامه مجددا اجرا شد بجای اینکه از app استفاده کنی به کمک api میای title پنجره های فعال رو میخونی اگه پنجره ای با title "My Best Software" بود در اون صورت با یک api دیگه یک دستور به اون پنجره ارسال میکنی مثلا اینکه یک sub و یا fanction مشخصی اونجا اجرا بشه. بعد خودشو میبنده
دقیقا کاری که برنامه های مثل یاهو مسنجر انجام میده :wink:
اما چطوری میشه این کارا رو کرد. باید به تایپیک های قبلی مراجعه کنی من هم قبلا این مشکل رو داشتم دوست خوبم lord کدشو تو تایپیک های قبلی نوشته یک خورده بگردی پیداش میکنی :)

MM_Mofidi
سه شنبه 27 مرداد 1383, 18:44 عصر
آقای سعید قدیری مقدم در تاپیک مذکور آیا روشی برای بدست گرفتن کنترل برنامه ازپیش اجرا شده هست ؟ یعنی ID که سیستم به نرم افزار اختصاص میدهد را بعنوان ID در نظر گرفته و نسخه جدید اجرا شده را ببندیم و پارامترهای مورد نظر را به برنامه در حال اجرا ارسال کنیم ؟
با تشکر فراوان.
ضمنا برای بدست آوردن Application ها یا Procesessدر MSDN مثالی هست که نام و آدرس فایل(در حال اجرا) را برمیگرداند. فکر میکنم شاید راحتتر باشد

H_r_m
سه شنبه 27 مرداد 1383, 18:52 عصر
سعید جان سلام
ممنون از جوابتون
اگه میشه عنوان تاپیک رو هم لطف کنین و بنویسین :oops: :oops:

سعید قدیری مقدم
سه شنبه 27 مرداد 1383, 20:00 عصر
باشه میگردم و لینکشو میزارم اینجا
در ضمن جناب MM_Mofidi این api که من اشاره کردم به کمک title برنامه رو بدست میاره بعد handel برنامه رو بر میگردونه و بقیه کارا با handel انجام میشه در این شکل پارامتر ها به برنامه قبلی ارسال میشه و برنامه جدید رو باید ببندیم
در ضمینه api اگه اطلاعات دقیق بخوایی باید از loard بپرسید چون اطلاعات ایشون در این ضمینه کامل تر از منه :)

AminSobati
چهارشنبه 28 مرداد 1383, 09:52 صبح
برای پیدا کردن و Maximize کردن یک برنامه در حال اجرا این مثال رو ببینین.
موفق باشید

H_r_m
چهارشنبه 28 مرداد 1383, 10:41 صبح
سلام
من که مثالی نمیبینم :shock:

H_r_m
چهارشنبه 28 مرداد 1383, 10:45 صبح
امین جان شرمنده :oops:
دانلود گذاشته بودی و من عجله کردم :|
ممنونم میرم که سری بهش بزنم (:D)

H_r_m
پنج شنبه 29 مرداد 1383, 11:54 صبح
امین جان سلام
ممنون از برنامه ات
ایا میشه از طریق API مثلا متنی رو به یه Text Box فرستاد تا ضمن ماکسیم شدن اون تکست هم عوض بشه
مثل یه اخطار به کاربر :?:

AminSobati
پنج شنبه 29 مرداد 1383, 12:40 عصر
حمید جان،
هر آبجکت یک پنجره مخصوص به خودش رو داره که این پنجره دارای یک کد یونیک هستش. برای دیدن این کد عنوان مثال:


msgbox Text1.hwnd

هر بار که فرم نمایش داده میشه Text1 ممکنه یک hwnd جدید بگیره. با داشتن این کد، شما میتونی از تایع API به اسم SendMessage استفاده کنین تا دستور عوض کردن محتویات(Text1.Text) رو بهش برسونی. پس الان ما دو تا برنامه(App) لازم داریم. در برنامه اول شما کد hwnd اون textbox رو بدست میارین. برنامه دوم از این کد استفاده میکنه تا بهش SendMessage انجام بده. در برنامه دوم شما یک textbox دارین به اسم txtMyMessage که هر چی داخلش باشه، میخوایم به برنامه اولی به Text1 برسونیم:


Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Sub Command1_Click()
SendMessage xxxx, 12, 0, ByVal txtMyMessage.Text
End Sub

اینجا به جای xxxx کد hwnd از textbox برنامه اول رو قرار بده. ضمنا کدی که نوشتم در برنامه دوم باید قرار بگیره.
نکته مهم اینه که برنامه دوم از کجا بدونه hwnd در برنامه اول چند هستش؟
برای این کار در برنامه اول توسط SaveSetting این کد رو در Registry خیلی راحت ذخیره کن و در برنامه دوم با GetSetting اون رو بخون. این دو تابع از توابع VB هستن، نه API.

موفق باشین،
امین ثباتی MCSD

H_r_m
پنج شنبه 29 مرداد 1383, 14:50 عصر
سلام
ممنونم از لطفتون فکر کنم که مشکلم حل شده :wink:
میرم که یه امتحانی بکنم :idea:

AminSobati
پنج شنبه 29 مرداد 1383, 15:26 عصر
ّI hope so :)

H_r_m
دوشنبه 02 شهریور 1383, 20:06 عصر
امین جان سلام
باز هم یه مشکل پیش اومده
ایا میتوان بوسیله SendMessage دستوری را هم به ابجکت فرستاد
مثلا یه Combo Box را Clear کنه یا ایتمهایی رو اضافه کنه
شرمنده :oops: :oops: :oops:

H_r_m
سه شنبه 03 شهریور 1383, 12:21 عصر
امین کجایی بابا :?
این تاپیک داره میفته اون پایینا :shock: :(

H_r_m
سه شنبه 03 شهریور 1383, 22:08 عصر
:? :shock: :قهر: :مخالف: :متفکر: :متفکر: :متفکر: :evil2: :flower:

AminSobati
چهارشنبه 04 شهریور 1383, 13:26 عصر
حمید جان عذر میخوام از تاخیری که در نوشتن جواب پیش اومد. تقریبا بیش از 24 ساعت به اینترنت دسترسی نداشتم(در نوع خودش یک فاجعه! :wink: )
برای این کار از همون تابع SendMessage با پارامترهای LB_ADDSTRING, LB_DELETESTRING میتونین استفاده کنین. ولی نمیدونم در ویندوز 2000 هم جواب میده یا نه.
موفق باشین :)

H_r_m
چهارشنبه 04 شهریور 1383, 17:52 عصر
سلام
امین جون خواهش میکنم :oops:
ممنونم دوباره میرم که امتحان کنم :) :D

AminSobati
چهارشنبه 04 شهریور 1383, 17:54 عصر
موفق باشی :)

H_r_m
چهارشنبه 04 شهریور 1383, 18:08 عصر
سلام
امین جان تو هم مثل اینکه الان انلاینی (دل به دل راه داره) :D :wink:
من خیلی عجله میکنم میشه بگید کد اینها چنده
من اونا رو به جای wParam گذاشتم بگید که درسته یا نه
اگه با 2000 کار نکنه میشه یه دستور دیگه بگید
خیلی خیلی شرمنده :oops: :oops: :oops:

AminSobati
چهارشنبه 04 شهریور 1383, 18:32 عصر
Private Const LB_ADDSTRING = &H180
Private Const LB_DELETESTRING = &H182

H_r_m
چهارشنبه 04 شهریور 1383, 23:18 عصر
امین جان سلام
شرمنده میشه یه مثال اینجا بگذارید :oops:
اخه من هر کار کردم نشد :(
یعنی ارسال تکست رو انجام میده ولی اضافه یا پاک کردن و فرستادن دستورات دیگه رو نه :roll:

AminSobati
چهارشنبه 04 شهریور 1383, 23:38 عصر
در چه ویندوزی تست میکنین؟

H_r_m
پنج شنبه 05 شهریور 1383, 09:02 صبح
سلام
ویندوز ایکس پی :roll:
در ضمن من میخوام که اگر کاربری هر نوع ویندوزی داشت برنامه براش کار کنه :!:

AminSobati
پنج شنبه 05 شهریور 1383, 11:42 صبح
حمید جان من متاسفانه دقت نکردم که شما برای ComboBox منظورتون بود. برای ComboBox از این پارامترها استفاده کنین:


Private Const CB_ADDSTRING = &H143
Private Const CB_DELETESTRING = &H144


براتون یک مثال هم درست کردم که امیدوارم مشکل شما رو حل کنه. من اینرو روی ویندوز 2000 تست کردم.
موفق باشید :)

H_r_m
پنج شنبه 05 شهریور 1383, 15:26 عصر
امین جان سلام
خیلی خیلی ممنون از راهنماییتون :تشویق: :تشویق: :تشویق:
مشکل من که حل شد 8)
امید وارم شما هم در کلیه امور موفق باشید :flower: :kiss: :موافق:

AminSobati
پنج شنبه 05 شهریور 1383, 19:43 عصر
:)