PDA

View Full Version : سوال: پنهان شدن یا مینیمم شدن فرم اگر برنامه دیگری باز است



forodo
چهارشنبه 25 دی 1392, 15:39 عصر
سلام
چطور می تونم بگم که مثلاً اگر برنامه KMPlayer باز بود برنامه من پنهان یا مینیمم شود و در صورت بسته شدن برنامه دوباره نمایش داده شده یا ماکزیمم شود؟
با تشکر

maythamahmadi
چهارشنبه 25 دی 1392, 15:43 عصر
سلام.میتونی اینطوری کد نویسی کنی که اگر پردازشی مثلا با نام Kmplayer باز بود فرم من رو hide کن. یه امتحان بکن احتمالا بشه.

اینم کدش


if (Process.GetProcessesByName("KMPlayer").Length > 0)
{
this.Hide();

}
else

{
this.Show();
}




تو اونت timer1_Tick یه Timer بنویسش. موفق باشی

forodo
چهارشنبه 25 دی 1392, 16:27 عصر
نمی خوام از تایمر استفاده کنم.
اینو پیدا کردم ولی روی خط 3 یعنی p.WaitForExit(); ارور زیر رو می ده.

Object reference not set to an instance of an object.


Process p = Process.Start(@"D:\Man.Ki.Hastam.1998.HDTV.1080p_Iran-Film.mkv");
this.Hide();
p.WaitForExit();
if (p.HasExited)
{
this.Show();
}

maythamahmadi
چهارشنبه 25 دی 1392, 16:43 عصر
دوست من اینکه شما میگید پردازش نیست که.یه فایله که باید توسط یه برنامه اجرا بشه.حالا چه kmplayer چه هر چیز دیگه ای.

forodo
چهارشنبه 25 دی 1392, 21:33 عصر
دقیقاً. هر برنامه ای می تونه باشه و مهم نیست چه برنامه ای.
وقتی که برنامه باز شد فرم مینیمم بشه و وقتی که برنامه رو بستم فرمم دوباره ماکزیمم بشه.

maythamahmadi
چهارشنبه 25 دی 1392, 21:41 عصر
خوب دوست من کدی که بالا برات گذاشتم به نظرم مناسب ترین کد بود.

forodo
چهارشنبه 25 دی 1392, 22:45 عصر
ممنون از راهنماییتون.
ولی ممکنه kmplayer، power dvd، jet audio، winamp، یا هرچیزه دیگه ای باشه.
بعد بخوام توی تایمر هم بندازم سرعت برنامه کم می شه.
همینطوری کار با فایل سرعت رو پایین میاره دیگه تایمر میترکونتش.:قهقهه:
اگه مشکل اروره این کد حل بشه به نظرم کد خوبی میاد.

danialafshari
پنج شنبه 26 دی 1392, 09:48 صبح
ممنون از راهنماییتون.
ولی ممکنه kmplayer، power dvd، jet audio، winamp، یا هرچیزه دیگه ای باشه.
بعد بخوام توی تایمر هم بندازم سرعت برنامه کم می شه.
همینطوری کار با فایل سرعت رو پایین میاره دیگه تایمر میترکونتش.:قهقهه:
اگه مشکل اروره این کد حل بشه به نظرم کد خوبی میاد.

سلام دوست عزیز
مهندس جان نیازی نیست به ازای هر برنامه یک حلقه بزاری و شرط! || مال همین موقع هاست

forodo
پنج شنبه 26 دی 1392, 12:52 عصر
اگه با کدایی که خودم گذاشتم بشه که خیلی عالیه.
نمی خوام از تایمر استفاده کنم.
اگه با کدای خودم بشه اصلاً مهم نیست که چه برنامه ای بازه و اسمش چیه.
اگه من کدارو درست متوجه شده باشم می گه:
1- داخل p برنامه ای که باز شده و مهم نیست که چیه.
2- فرم من رو پنهان کن
3- صبر کن تا برنامه من که همان p هستش بسته شود و باز هم مهم نیست که چه برنامه ای
4- بعد اگه p یا همان برنامه که باز بود و باز هم مهم نیست که چه برنامه ای بسته شد فرم من رو نشان بده.

mthreat.info
پنج شنبه 26 دی 1392, 13:02 عصر
سلام ، از اونجا که پستهای قبل شما در مورد نرم افزار آرشیو فیلم و ... هست
1-اگر این فیلم ها با نرم افزار شما باید اجرا بشه نه بدست کاربر => قبل از اجرای فیلم برنامه رو minimize کنید
2-اگر می خواهید ببینید که اگر برنامه باز بود و کاربر گرفت هر فیلمی اجرا کرد برنامه بره تو حالت minimize شما میتونید یا از حلقه و روش های جست و جوی پروسس برنامه رو ببرید رو minimize یا بگیر focus رو چک کن و باقی ماجرا

forodo
پنج شنبه 26 دی 1392, 17:05 عصر
سلام ، از اونجا که پستهای قبل شما در مورد نرم افزار آرشیو فیلم و ... هست
1-اگر این فیلم ها با نرم افزار شما باید اجرا بشه نه بدست کاربر => قبل از اجرای فیلم برنامه رو minimize کنید
2-اگر می خواهید ببینید که اگر برنامه باز بود و کاربر گرفت هر فیلمی اجرا کرد برنامه بره تو حالت minimize شما میتونید یا از حلقه و روش های جست و جوی پروسس برنامه رو ببرید رو minimize یا بگیر focus رو چک کن و باقی ماجرا
ممنون از پاسختون.
در جواب سوال 1: برای خودمه ولی می خوام خودم ازش لذت ببرم. جینگولت بازیهایی توش انحام دادم که :لبخند: 1/5 ترابایت فیلم
در جواب جمله خبری 2: متوجه نمی شم درست یعنی باید از توابع API استفاده کنم که البته کد اینکار چیه و از کدوم dll ویندوز باید استفاده کنم رو نمی دونم.

دوستان اگه بگید چرا کدهایی که خودم گذاشتند ارور می دن واقعاً ممنون می شم چون به نظر من با همون چند خط کد که خیلی هم ساده ولی کارا هستند کارم راه می افته.
می دونم خواهش زیادیه ولی اگه این چند خط کد رو خودتون اجرا کنید ببینید مشکلش چیه ممنون می شم.
با تشکر

mthreat.info
پنج شنبه 26 دی 1392, 19:10 عصر
نمی خوام از تایمر استفاده کنم.
اینو پیدا کردم ولی روی خط 3 یعنی p.WaitForExit(); ارور زیر رو می ده.

Object reference not set to an instance of an object.


Process p = Process.Start(@"D:\Man.Ki.Hastam.1998.HDTV.1080p_Iran-Film.mkv");
this.Hide();
p.WaitForExit();
if (p.HasExited)
{
this.Show();
}

این کد شما اروری نمیده!! فقط باید مسیر فایل رو درست داد و برنامه خوب کار میکنه

forodo
پنج شنبه 26 دی 1392, 21:39 عصر
این کد شما اروری نمیده!! فقط باید مسیر فایل رو درست داد و برنامه خوب کار میکنه
د بیا :متعجب::متعجب::متعجب:
دقیقاً همین کدارو استفاده کردید؟؟؟ فقط به جای آدرس فیلم من خودتون یه فایل تصویری دیگه رو اجرا کردید دیگه؟؟؟
پس چرا واسه من ارور میده.
فیلم رو اجرا می کنه، مشکلی نیست ولی روی همون خط که عرض کردم همون ارور رو میده.
چجوریاست:گیج::گیج::گیج:

forodo
پنج شنبه 26 دی 1392, 21:49 عصر
چرا p مقدارش null هست؟
چیزی اصلاً توی p نیست که حالا صبر کنه تا بسته بشه.
چرا؟

mthreat.info
پنج شنبه 26 دی 1392, 21:55 عصر
:قهقهه: من همون طور که خودتون گفتید فقط آدرس فایل رو عوض کردم ( با این تفاوت که حجم فایل من 0 بایت بود :D یک فایل txt خالی رو تغییر پسوند دادم بعد اجرا کردم player پیشفرض اجرا شد ) برنامه Hide شد بعد از بستن player برنامه Show شد !!! شاید بخاطر CPU باشه خودم خیلی وقتا این طوری شدم تا این که پلتفرم رو از AnyCpu کردم 86x ( سیستم عامل خودم 32 بیتی هست ) شما هم این گزینه رو دستکاری کنید احتمالا درست میشه

forodo
پنج شنبه 26 دی 1392, 22:00 عصر
باهاش برنامه word رو امتحان کردم ( فقط گفتم برنامه ورد رو باز کن ) درست کار می کنه.
ولی وقتی بهش گفتم که برنامه kmplayer رو باز کن اروره زیر رو داد که می گه اصلاً همچین چیزی نیست!!!

The system cannot find the file specified

مشکلش با kmplayer هستش. powerdvd هم همینطور.
اینطوری نوشتم اشتباهه؟

Process p = Process.Start("KMPlayer.exe");

mthreat.info
پنج شنبه 26 دی 1392, 22:01 عصر
من kmplayer رو تست کردم مشکلی نداشت اون یکی هم نداشتم ولی با vlc هم امتحان کردم بازم ارور نداد

forodo
پنج شنبه 26 دی 1392, 22:12 عصر
اینطوری نوشتم درست شد::عصبانی++:

string s = @"D:\Man.Ki.Hastam.1998.HDTV.1080p_Iran-Film.mkv";
Process p = Process.Start(@"C:\Program Files (x86)\The KMPlayer\KMPlayer.exe", s);
this.Hide();
p.WaitForExit();
if (p.HasExited)
{
this.Show();
}

من می خوام فیلم خودش باز بشه و بهش نگم که با فلان برنامه باز شو.
سری قبل وقتی که فیلم اجرا می شد خود به خود با خود kmplayer اجرا می شد که p مقداری نداشت و اون ارور رو می داد.
چرا اینطوری بود؟ دلیلش چیه؟ و چرا برنامه winword.exe رو که میدم باز می شه ولی kmplayer رو باید با آدرس کامل بهش بدم تا پیدا کنه؟ جفتش تو مسیر پیش فرض نصب شده. :کف:

forodo
پنج شنبه 26 دی 1392, 22:40 عصر
ویندوز من 64 بیتیه.
لیست کشویی Platform نوشته Active (x86)
Platform target هم x86 هستش که اینو هرچیزی گذاشتم بازم مشکل قبلیم درست نشد.

mthreat.info
پنج شنبه 26 دی 1392, 22:41 عصر
من که از این کد استفاده کردم

Process p = Process.Start(Application.StartupPath+@"\test.mkv");
this.Hide();
p.WaitForExit();
if (p.HasExited)
{
this.Show();
}

با player پیشفرض باز میشه و باقی ماجرا شما
شما این جا رو یه نگاه بنداز Build=>Platform target

forodo
پنج شنبه 26 دی 1392, 22:52 عصر
من که از این کد استفاده کردم

Process p = Process.Start(Application.StartupPath+@"\test.mkv");
this.Hide();
p.WaitForExit();
if (p.HasExited)
{
this.Show();
}

با player پیشفرض باز میشه و باقی ماجرا شما
شما این جا رو یه نگاه بنداز Build=>Platform target
همچین چیزی ندارم.
تو یه پست قبل از آخرین پست شما اون چیزی که مد نظر شماست رو نوشتم.
BuilD من اینارو داره:
115471
کار شما رو انجام دادم و یه فیلم کپی کردم تو مسیر برنامه و اینجوری نوشتم و فیلم باز می شه مثل قبل ولی باز همون ارور رو می ده.

Process p = Process.Start(AppDomain.CurrentDomain.BaseDirector y + "Godzilla.1954.1080p_Iran-Film.mkv");

دارم دیوونه می شم. اگه واسه شماهم ارور می داد می فهمیدم کد یه جاییش می لنگه ولی برای شما که جواب می ده می خوام با سر برم تو دیفال :گیج:

mthreat.info
پنج شنبه 26 دی 1392, 23:14 عصر
http://img.ir/SfBc.gif

forodo
پنج شنبه 26 دی 1392, 23:29 عصر
ویندوز من 64 بیتیه.
لیست کشویی Platform نوشته Active (x86)
Platform target هم x86 هستش که اینو هرچیزی گذاشتم بازم مشکل قبلیم درست نشد.
115473

mthreat.info
پنج شنبه 26 دی 1392, 23:36 عصر
شاید بخاطر CPU باشه خودم خیلی وقتا این طوری شدم تا این که پلتفرم رو از AnyCpu کردم 86x ( سیستم عامل خودم 32 بیتی هست ) شما هم این گزینه رو دستکاری کنید احتمالا درست میشه

دفعه ی بعد که ارور داد روی لینک help کلیک کنید بعضی وقتا اطلاعات مفیدی میده

forodo
جمعه 27 دی 1392, 00:02 صبح
115475
روی Search for more help online... که کلیک می کنم این میاد:
115476
بعد ok رو که می زنم این لینک (http://search.msdn.microsoft.com/search/en-US/default.aspx?query=System.NullReferenceException) رو بهم می ده.

mthreat.info
جمعه 27 دی 1392, 11:17 صبح
نه منظور get general help for this exception بود شما مطمئن هستید که چنین آدرسی وجود داره؟ چون من تست کردم اگه آدرس فایل نباشه ارور میده و اگه بجای آدرس فایل آدرس پوشه داده بشه ارور میده

forodo
جمعه 27 دی 1392, 15:15 عصر
نه منظور get general help for this exception بود شما مطمئن هستید که چنین آدرسی وجود داره؟ چون من تست کردم اگه آدرس فایل نباشه ارور میده و اگه بجای آدرس فایل آدرس پوشه داده بشه ارور میده
سلام
ممنون از اینکه پیگیر هستید.
روی اون گزینه ای که گفتید کلیک می کنم این لینک (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28EHNULLREFERENCE%29;k%28TargetFrameworkMonike r-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29;k%28DevLan g-CSHARP%29&rd=true) رو می ده.
در مورد آدرس، اگر منظور شما آدرس فیلم هست مطمئن هستم که این فیلم در اون مسیر وجود داره چون با چند تا فیلم دیگه در درایوهای دیگه هم امتحان کردم بازم نشد.
مشکل فایل نیست. مشکل با برنامه های kmplayer یا powerdvd هستش که سیستم نمی دونم چرا اونا رو نمیشناسه
اینطوری ارور نمی ده:

Process p = Process.Start(@"C:\Program Files (x86)\The KMPlayer\KMPlayer.exe", @"D:\Man.Ki.Hastam.1998.HDTV.1080p_Iran-Film.mkv");
Process p = Process.Start("wmplayer.exe", @"D:\Man.Ki.Hastam.1998.HDTV.1080p_Iran-Film.mkv");

اینطوری ارور میده:

Process p = Process.Start(AppDomain.CurrentDomain.BaseDirector y + "Godzilla.1954.1080p_Iran-Film.mkv");
Process p = Process.Start(@"D:\Man.Ki.Hastam.1998.HDTV.1080p_Iran-Film.mkv");
Process p = Process.Start("KMPlayer.exe", @"D:\Man.Ki.Hastam.1998.HDTV.1080p_Iran-Film.mkv");

به نظر من kmplayer رو نمی تونه مسیرش رو پیدا کنه و فیلم که اجرا می شه یه برنامه ای حسابش می کنه که فقط باز شد و انگار بسته شد و برای همین دیگه برنامه بازی نیست که بخواد داخل p بریزه برای همین خالیه و به خاطر همون هم برنامه ای نیست که بخواد صبر کنه که بسته بشه چون برنامه ای باز نیست که ببندتش.
به نظر من، درست و غلطش رو نمی دونم، اگر مشکل پایین حل بشه تمومه:

Process p = Process.Start("KMPlayer.exe", @"D:\Man.Ki.Hastam.1998.HDTV.1080p_Iran-Film.mkv");

خط بالا اروره زیر رو می ده: دیگه فیلم هم اجرا نمی شه :

The system cannot find the file specified