PDA

View Full Version : سوال: اجرای یک Process داخل فرم



leilav_1984
سه شنبه 07 خرداد 1387, 14:37 عصر
سلام
من یه سری فایل دارم که فقط با نرم افزار خاصی قابل باز شدن هستن...
برای باز کردن هر فایل با نرم افزار مربوطه اینکار رو کردم:

Process p = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = listBoxFiles.SelectedItem.ToString();
startInfo.WindowStyle = ProcessWindowStyle.Maximized;
startInfo.Verb = "Open";
startInfo.UseShellExecute = true;
p.StartInfo = startInfo;
p.Start();
کار انجام می گیره، البته اینجوری اون نرم افزار جدا از برنامه من Run میشه
اما من می خوام اون Process داخل فرم برنامه من باز بشه (صفحه اون نرم افزار داخل فرم من قرار بگیره)
آیا اینکار اصلا امکانپذیره؟ چطوری؟

پ.ن. : سایت رو خیلی جستجو کردم و راهنماییهایی هم مثلا برای اجرای نرم افزار MS Word و ... داخل برنامه پیدا کردم، ولی جوابگوی مشکل من نبود.

hassan razavi
سه شنبه 07 خرداد 1387, 15:29 عصر
اگه اون نرم افزاري مخصوص شما بصورت OLE باشه , مثل Word , Excel و مي ونيد كنترل OLE اون رو در VS اضافه كنيد و استفاده كنيد .

leilav_1984
چهارشنبه 08 خرداد 1387, 14:29 عصر
اگه اون نرم افزاري مخصوص شما بصورت OLE باشه , مثل Word , Excel و مي ونيد كنترل OLE اون رو در VS اضافه كنيد و استفاده كنيد .

خیر، همونطور که کد نشون میده من در واقع اصلا نرم افزار رو انتخاب نکردم
من فعل "باز شدن" رو در مورد اون فایلها اجرا کردم
حالا با هر نرم افزاری که روی سیستم کاربر به عنوان پیش فرض باز شدن اونها تعیین شده باشه
چون در شرکت چندین نرم افزار برای اینکار استفاده میشه

gdevnb
چهارشنبه 08 خرداد 1387, 14:37 عصر
اگه مشکلتون فایلهایی مثل Word , pdf و... هستش می تونید از یه سری کمپوننت که قابلیت کار کردن با این فرمت ها رو در اختیارتون می زاره استفاده کنید.

leilav_1984
چهارشنبه 08 خرداد 1387, 15:32 عصر
اگه مشکلتون فایلهایی مثل Word , pdf و... هستش می تونید از یه سری کمپوننت که قابلیت کار کردن با این فرمت ها رو در اختیارتون می زاره استفاده کنید.

نه فایلهای Tif با ابعاد بزرگ مثلا 20000*15000 هستن که معمولا با Microsoft Office Document Imaging یا نرم افزارهای scanner باز میشن

رضا عربلو
چهارشنبه 08 خرداد 1387, 16:46 عصر
بایستی با توابع api کار بکنی. ابتدا هندل اون پنجره مورد نظر را پیدا می کنی و سپس اون پنجره را با یک رابه دیگر می توانی به فرمت اضافه کنی.

مهران موسوی
چهارشنبه 08 خرداد 1387, 16:57 عصر
با استفاده از توابع :


HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName );

و


HWND SetParent( HWND hWndChild, HWND hWndNewParent );

ميتوني اين كار رو انجام بدي ...

ابتدا با اولي هندل پنجره ي برنامه مورد نظر رو ميگيري بعد با استفاده از دومي و هندل اون برنامه Parent اون رو فورم خودت قرار ميدي ..

رضا عربلو
چهارشنبه 08 خرداد 1387, 17:09 عصر
با این می توانی هندل ویندو ات را بدست بیاوری.


[DllImport("user32.dll")]
public static extern int FindWindow(string strclassName, string strWindowName);


با یک تابع api زیر نیز می توانی این پنجره ات را به عنوان child به یک پنجره دیگر اضافه کنی.


SetParent
http://msdn.microsoft.com/en-us/library/ms633541(VS.85).aspx

علیرضا مداح
چهارشنبه 08 خرداد 1387, 17:28 عصر
سلام دوست عزیز
باید از تابع API به نام SetParent استفاده نمایید :

http://barnamenevis.org/forum/attachment.php?attachmentid=18382&stc=1&d=1211981632
منبع نمونه کد ها : http://www.geekpedia.com/tutorial230_Capturing-Applications-in-a-Form-with-API-Calls.html (ممکن است فیلتر شده باشد)

leilav_1984
شنبه 11 خرداد 1387, 09:27 صبح
ممنون از همه...
فقط هنوز نفهمیدم lpClassName چی هست؟

leilav_1984
شنبه 11 خرداد 1387, 10:00 صبح
سلام دوست عزیز
باید از تابع API به نام SetParent استفاده نمایید :

http://barnamenevis.org/forum/attachment.php?attachmentid=18382&stc=1&d=1211981632
منبع نمونه کد ها : http://www.geekpedia.com/tutorial230_Capturing-Applications-in-a-Form-with-API-Calls.html (ممکن است فیلتر شده باشد)

آقای مداح خط
tabapp1.StartInfo.Arguments += " /K TITLE Command Prompt1"; چکار می کنه؟