PDA

View Full Version : سوال: اجرا کردن فایل اجرایی درون یک فرم در سی شارپ؟



firoozi90
یک شنبه 15 مرداد 1391, 14:48 عصر
با سلام خدمت دوستان
من یه برنامه تایمر برای کافی نت ها با نرم افزار multimedia builder طراحی کردم و می خوام این برنامه رو که یک فایل اجرایی هست درون فرم سی شارپ اجرا بشه.
از د.ستان کسی هست که در این مورد منو راهنمایی کنه؟

sinaprog
یک شنبه 15 مرداد 1391, 15:27 عصر
فایلو تو debug کپی کن بعد تو فرم لود بنویس

System.Diagnostics.Process.Start(Application.Start upPath + "اسم فایل");

firoozi90
یک شنبه 15 مرداد 1391, 16:37 عصر
ممنون از توجهت
اما من دقیقا همین کارو کردم جواب نگرفتم.مثل اینکه فایلو پیدا نمی کنه
این کدو نوشتم

System.Diagnostics.Process.Start(Application.Start upPath + "suid.exe");

firoozi90
یک شنبه 15 مرداد 1391, 16:42 عصر
System.Diagnostics.Process.Start("d:\\CSS.pdf");

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

rezamansori
یک شنبه 15 مرداد 1391, 19:21 عصر
من قبلا با وی بی 6 این کار رو کردم با استفاده از یک تابع API به نام SetParent.
سعی می کنم به سی شارپ براتون بنویسم (البته اگه تونستم)

sirvan-me
یک شنبه 15 مرداد 1391, 21:21 عصر
سلام شما اول این فضای نام ها رو using کن :

using System.Runtime.InteropServices;
using System.Diagnostics;

بعد این کد ها رو تو کلاس اصلی بنویس :

[DllImport("USER32.DLL")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

[DllImport("USER32.dll")]
private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint);

یه پنل روی فرمت بکش و خاصیت Dock اون رو Fill بذار ...

حالا تو رویداد Load مربوط به فرم یا هر جای دیگه این کدها رو بنویس :

Process process = Process.Start("notepad.exe");
process.WaitForInputIdle();
SetParent(process.MainWindowHandle, this.panel1.Handle);

MoveWindow(process.MainWindowHandle, 0, 0, this.Width - 90, this.Height, true);

به همین خوشمزگی به همین سادگی

firoozi90
دوشنبه 16 مرداد 1391, 11:31 صبح
سلام شما اول این فضای نام ها رو using کن :

using System.Runtime.InteropServices;
using System.Diagnostics;

بعد این کد ها رو تو کلاس اصلی بنویس :

[DllImport("USER32.DLL")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

[DllImport("USER32.dll")]
private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint);

یه پنل روی فرمت بکش و خاصیت Dock اون رو Fill بذار ...

حالا تو رویداد Load مربوط به فرم یا هر جای دیگه این کدها رو بنویس :

Process process = Process.Start("notepad.exe");
process.WaitForInputIdle();
SetParent(process.MainWindowHandle, this.panel1.Handle);

MoveWindow(process.MainWindowHandle, 0, 0, this.Width - 90, this.Height, true);

به همین خوشمزگی به همین سادگی

بسیار عالی بود.ممنون
اما اگر بخوام اون برنامه بصورت ماکسمایز لود بشه باید چیکار کنم؟

sirvan-me
دوشنبه 16 مرداد 1391, 13:18 عصر
خواهش می کنم ... شما این کد ها رو تو رویداد Load فرمت بنویس :

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;

بعد از اون ، این بخش کد پست بالا رو اینصور بنویس :

MoveWindow(process.MainWindowHandle, 0, 0, this.Width, this.Height, true);

ghasem110deh
شنبه 20 اردیبهشت 1393, 12:48 عصر
سلام
من این کد رو استفاده کردم و درست هم هست ... خیلی ممنون
ولی فایل من یه فایل (فلش) با پسوند exe هست و بازم بصورت تمام صفحه خارج از برنامه اجرا میشه !
نمی دونم چی کر کنم ؟

abbas.oveissi
سه شنبه 24 تیر 1393, 02:29 صبح
کسی نمیتونه راهنمایی کنه ؟
Swf رو میتونی از EXE خارج کنی ، بعد هم با کامپوننت shockwave میتونی توی فرم اجراش کنی،حتی متد هاشو فراخوانی بکنید.

ghasem110deh
سه شنبه 24 تیر 1393, 03:20 صبح
سلام
نمیشه ...
در واقع مثل بازی های فلش هستش ... بعد از اجرا میتونی با کلیک روی اون عکس العمل رو ببینی و حالات مختلف داره !
حدود 50 مگ هستش ... هر کاری کردم ، باز از فرم خارج میشه و کل صفحه نمایش رو میگیره :عصبانی++:

abbas.oveissi
سه شنبه 24 تیر 1393, 03:38 صبح
سلام
نمیشه ...
در واقع مثل بازی های فلش هستش ... بعد از اجرا میتونی با کلیک روی اون عکس العمل رو ببینی و حالات مختلف داره !
حدود 50 مگ هستش ... هر کاری کردم ، باز از فرم خارج میشه و کل صفحه نمایش رو میگیره :عصبانی++:
مهم نیست،این روش هر چی باشه اشکال نداره.کامپوننت shockwave که
اگر اشتباه نکنم اسم دقیقش shockwave flash object هست شبیه player معمولی فلشه که میتونی مثل webbrowser یا button بذاریش روی فرم و وقتی لینک swf رو بهش بدید براتون اجراش میکنه.

ghasem110deh
سه شنبه 24 تیر 1393, 04:05 صبح
چطوری فایل فلش رو از "اکزه" به "اس دبیلیو اف" تبدیل کنم ؟

abbas.oveissi
سه شنبه 24 تیر 1393, 04:12 صبح
چطوری فایل فلش رو از "اکزه" به "اس دبیلیو اف" تبدیل کنم ؟
توی سایت stackoverflow یکی اینو معرفی کرده بود : http://www.northcode.com/blog.php/2007/08/02/Extract-SWF-files-from-Flash-Executables

ghasem110deh
سه شنبه 24 تیر 1393, 13:18 عصر
نشد ... :ناراحت:

abbas.oveissi
سه شنبه 24 تیر 1393, 20:01 عصر
نشد ... :ناراحت:
چرا ؟کدوم بخشش ؟؟ من تاحالا SWF رو تست نکردم که از EXE جدا کنم اما با توجه به نظرات انگار خیلی از افراد اینکار رو کردند.اما بخش دوم رو خودم اصن یک پروژه داشتم که باید فایل SWF رو توی فرم نمایش میدادم و مطمئن هستم که کار میکنه.

khokhan
سه شنبه 24 تیر 1393, 22:55 عصر
نشد ... :ناراحت:
می شه فایلهای فلش با پسوند exe یا هر فایل اجرایی دیگر رو در داخل پنل اجرا کرد :لبخند:
این هم نمونه....... می تونی فایل خودت رو جایگزین کنی و از داخل برنامه نام فایل رو عوض کنی و ......... !!!!! فایل فلش با پسوند exeداخل پوشه debug قرار دادم

ghasem110deh
پنج شنبه 26 تیر 1393, 15:38 عصر
سلام ...
نمیدونم ایراد از چیه ؟ شاید این فایل exe اصلا فلش نیست (از جایی که دانلود کردم گفته بود فلش هست)
الان توی برنامه ای شما لطف کردین هم جایگزین کردم ولی باز بصورت full screen نمایش داده میشه ! (البته پوشه دیتاشو بخاطر حجم زیادش نریختم)
پروژه (http://up.ashiyane.org/images/43h3dt2plurwg49lv1lg.rar)