PDA

View Full Version : سوال: خوندن از برنامه ي Dosي



Mainar
شنبه 12 دی 1388, 09:14 صبح
سلام.
من ميخوام گزارشي رو كه از يك برنامه ي Dos ي گرفتم تو Application م باز كنم.
فايلي كه از برنامه ي Dos مي گيرم با فرمت txt ذخيره ميكنم ولي تو ويندوز تمام نوشته هاي فايل txt بهم ميريزه.نميدونم راهي هست كه بشه فايل برنامه ي Dos ي رو بدون اينكه بهم بريزه تو ويندوز باز كنم يا برنامه بتونه اونو بخونه؟

ASKaffash
شنبه 12 دی 1388, 09:38 صبح
سلام
فقط با برنامه نویسی باید متن ها و اعداد را از طریق کلاسهای IO خوانده و تفکیک کنید بعد با استفاده از توابعی خودتان مینویسید یا تهیه میکنید رشته های تحت Dos را به رشته های تحت win تبدیل کنید که عموما رشته های Dos براساس CodePage ایران سیستم است

Mainar
شنبه 12 دی 1388, 10:10 صبح
سلام
فقط با برنامه نویسی باید متن ها و اعداد را از طریق کلاسهای IO خوانده و تفکیک کنید بعد با استفاده از توابعی خودتان مینویسید یا تهیه میکنید رشته های تحت Dos را به رشته های تحت win تبدیل کنید که عموما رشته های Dos براساس CodePage ایران سیستم است

خوب مشكل سر همين تبديل از dos به win .ميشه بيشتر راهنماييم كنيد يا يه تيكه كد براي انجام اين كار واسم بذاريد؟
من بايد سريعا اين برنامه رو بنويسم و متاسفانه هنوز نتونستم مشكل خوندن از dos رو حل كنم.

ASKaffash
شنبه 12 دی 1388, 12:49 عصر
سلام
توی تالار Foxpro دیدم که یک نمونه کد تبدیل قرار داده بودند و ایران سیستم را به Win تبدیل می کرد Syntax زبان Foxpro شبیه VB6 است (زحمت جستجو را بکشید)

Saeed_m_Farid
شنبه 12 دی 1388, 15:55 عصر
خوب مشكل سر همين تبديل از dos به win .ميشه بيشتر راهنماييم كنيد يا يه تيكه كد براي انجام اين كار واسم بذاريد؟
من بايد سريعا اين برنامه رو بنويسم و متاسفانه هنوز نتونستم مشكل خوندن از dos رو حل كنم.
دوست عزیز
اگه شما می تونید از طریق برنامه C#‎‎‎‎ تون فایل DOS رو فراخوانی کنید و منتظر اتمام کار فایل بشید، راه حل اینه که با CreateProcess یه Process رو Console ایجاد (آغاز) کنید و از طریق دو تا pipe مجزا stdout و stderr رو طی اجرای برنامه پر کنید.
نکته: با توجه به اینکه مایکروسافت اون زمان تا اتمام کامل برنامه، کاراکترها رو روی Pipe نمی فرستاد! و فقط تو CRT نمایش میداد، در صورتی که شما نیاز به دریافت فوری یا همزمان نمایش کاراکترها داشته باشید، جواب نخواهد داد. (بیخود نبود که همه از دستش شاکی بودن!)

به هر صورت، چون پیاده کردن این راه حل یه مقدار سخت هست، یه نمونه از Capture Console برای C#‎‎‎‎ رو می تونید تو لینک زیر ببینید :
http://www.codeproject.com/KB/threads/CaptureConsole.aspx

البته DLL هست و نحوه استفاده اش هم بصورت زیر :
[DllImport("CaptureConsole.dll", EntryPoint="ExecuteW", CharSet=CharSet.Unicode)]
static extern UInt32 ExecuteW(string s_Commandline,
UInt32 u32_FirstConvert,
string s_CurrentDir,
string s_Environment,
bool b_SeparatePipes,
UInt32 u32_Timeout,
[MarshalAs(UnmanagedType.BStr)] out string s_ApiError,
[MarshalAs(UnmanagedType.BStr)] out string s_StdOut,
[MarshalAs(UnmanagedType.BStr)] out string s_StdErr);

string s_ApiError, s_StdOut, s_StdErr;
UInt32 u32_ExitCode = ExecuteW(@"C:\Test\Console.exe Hello Wörld", 1, null, null,
true, 120000, out s_ApiError, out s_StdOut, out s_StdErr);

فایل راهنمایی اش رو هم ضمیمه کردم.
موفق باشید.