PDA

View Full Version : مشاهده ورودی و خروجی برنامه تحت DOS در یک برنامه تحت ویندوز



ravanfar
سه شنبه 15 اردیبهشت 1383, 13:26 عصر
سلام
من یک برنامه تحت DOS دارم که بعد از RUN شدن یک سری عدد ، نام فایل ومسیرشان و پارامتر میگیره و یکسری خروجی عددی و فایلی میسازه
من یک سئوال دارم آیا امکانش هست این برنامه را از طریق یک Interface تحت ویندوز اجرا کرد و از همین طریق پارامترها و دادههای مورد نیاز برنامه را به اون داد و در نهایت خروجی را در یک اینترفیس ( پنجره ) مشاهده نمود؟ یعنی پردازش توسط همان برنامه تحت DOS بشه و ظاهرش
ویندوزی باشه؟
به عبارتی یک لباس زیبای ویندوزی برای یک برنامه تحت DOS خط فرمانی
اصلا شدنی است یا خیر؟مسئله اینست :)
روانفر

Sepidar
سه شنبه 15 اردیبهشت 1383, 14:48 عصر
با کسب رخصت از اساتید

عرض شود که در داس میم توان از علامت کوچکتری برای مشخص کردن خروجی استفاده نمود. مثلا خط زیر:

dir >a.txt
نتیجه را در یک فایل تکست به نام ای.تی ایکس تی میریزد.

فکر کنم بتوانید با استفاده از این تکنیک (اگر خروجیهای برنامه تحت داس تکست باشد) نتیجه بگیرید.

در ضمن خدمت آقای کرامتی عرض شود که دکمه اسکرول لاک ما شیکست و اینگیلیسی سایت شما کار نکرد. اون یه تیکه رو هم مجبور به کپی پیست شدم. :(

ravanfar
سه شنبه 15 اردیبهشت 1383, 15:15 عصر
سلام
از شما تشکر میکنم جناب sepidar
من متوجه نشدم کمی بیشتر توضیح دهید ممنونم
روانفر :?:

ravanfar
چهارشنبه 16 اردیبهشت 1383, 11:13 صبح
سلام
من از مدیران و متخصصین امر میخواهم مرا راهنمایی کنند آیا این کار شدنی است
متشکرم
روانفر

moradi_am
چهارشنبه 16 اردیبهشت 1383, 14:12 عصر
یک نمونه از برنامه که دستور ِ Dir را اجرا کرده و نتیجه را در فایل a.txt میریزد. حال این فایل را میتوانید در یک memo ریخته و استفاده کنید . برنامه dos را نیز میتوانید توسط آن اجرا کنید :

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,shellapi, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure ExecuteShellCommand(cmdline: string; hidden: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ExecuteShellCommand('dir>a.txt', True);
end;

procedure Tform1.ExecuteShellCommand(cmdline: string; hidden: Boolean);
const
flags: array[Boolean] of Integer = (SW_SHOWNORMAL, SW_HIDE);
var
cmdbuffer: array[0..MAX_PATH] of Char;
begin
GetEnvironmentVariable('COMSPEC', cmdBUffer, SizeOf(cmdBuffer));
ShellExecute(0,'open',cmdbuffer, PChar('/c' + cmdline), nil, flags[hidden]);
end;
end.

ravanfar
شنبه 19 اردیبهشت 1383, 20:24 عصر
سلام با تشکر از شما به خاطر جوابتان
این سورس کد ها را اجرا کردم موفق نشدم و لی با مطالعه ضمنی این خطوط آنچه را که مد نظر من است نمیتوان استخراج نمودمن پس از اجرای برنامه ام کاملا در محیط آن برنامه قرار میگیرم ولی با هر بار اجرای CMD یک پنجره commandline جدید باز شده از محیط برنامه اولیه من خارج میشود.

moradi_am
یک شنبه 20 اردیبهشت 1383, 06:56 صبح
این روش برای برنامه هایی که خروجی تکست روی مانیتور میفرستند مناسب است .برای اینکار پس باید برنامه داسی خودرا تغیر دهید بطوریکه ورودی خود را از یک فایل بگیرد نه صفحه کلید و فقط پردازش را انجام داده و خروجی را روی مانیتور یا یک فایل بریزد.در اینصورت هم با این روش به نتیجه خواهید رسید . ولی اگر سورس برنام در اختیارتان نیست در اینصورت ........ :oops: