View Full Version : سوال: درخواست کامپوننتی شبیه به cmd در ویندوز!
BORHAN TEC
دوشنبه 22 اسفند 1390, 13:57 عصر
سلام
آیا کسی کامپوننتی شبیه به command prompt ویندوز سراغ داره؟
با تشکر...
بهروز عباسی
دوشنبه 22 اسفند 1390, 14:20 عصر
درود به شما دوست عزیز
اینو ببین84068
BORHAN TEC
دوشنبه 22 اسفند 1390, 14:24 عصر
لینکش یادتون رفت!
بهروز عباسی
دوشنبه 22 اسفند 1390, 14:31 عصر
لینک هم گذاشتم
BORHAN TEC
دوشنبه 22 اسفند 1390, 14:45 عصر
این لینکی که قرار دادین تقریباً هیچ ربطی به سوال من نداره.:چشمک: من به یک نوع Memo که شبیه به cmd باشه احتیاج دارم که هم دستورات را در آن وارد کنم و هم خروجی را در همان ببینم. در ضمن من به صورت عادی با Capture کردن cmd مشکلی ندارم، چون خودم برای این کار یک کامپوننت ساخته ام. مشکل اصلی من مدیریت آن memo ای است که می خواهم دستورات را در آن وارد کنم. ممکن است این مورد کمی ساده به نظر برسد ولی بر خلاف آنچه که انتظار می رود انجام این کار دشوار است و باید شرایط بسیار زیادی را در نظر گرفت.
بهروز عباسی
دوشنبه 22 اسفند 1390, 14:59 عصر
این لینکی که قرار دادین تقریباً هیچ ربطی به سوال من نداره
شرمنده
مشکل اصلی من مدیریت آن memo ای است که می خواهم دستورات را در آن وارد کنم.
اگه درست متوجه شده باشم شما چیزی کاملاً شبیهCMD لازم دارید یعنی میخواید دستورات رو در یک memo وارد کنیدوخروجی رو در همون memo نشون بدید؟
چیزی در حد تئوری دارم :
برای وارد کردن دستور خط جاری رو در نظر بگیر و محتویاتش رو برای ورودی بخون
ومحتویات قبلی رو در یک متغیر نگه داری کن بعد از پردازش دستور ورودی خروجی رو با محتویات متغیر درون همون memo نمایش بده.
BORHAN TEC
سه شنبه 23 اسفند 1390, 18:19 عصر
اگه درست متوجه شده باشم شما چیزی کاملاً شبیهCMD لازم دارید یعنی میخواید دستورات رو در یک memo وارد کنیدوخروجی رو در همون memo نشون بدید؟
دقیقاً :چشمک:
فعلاً دارم برای کار خودم یه کامپوننت در همین رابطه میسازم ولی اگه کسی نمونه مشابهی را پیدا کرد خوشحال میشم یه خبری هم به ما بده! :لبخندساده:
بهروز عباسی
سه شنبه 23 اسفند 1390, 19:35 عصر
دوست عزیز این کد تقریباً همون کاری که گفتی انجام میده ببین به دردت میخوره
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure Memo1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function GetDosOutput(CommandLine: string; Work: string = 'C:\'): string;
var
SA: TSecurityAttributes;
SI: TStartupInfo;
PI: TProcessInformation;
StdOutPipeRead, StdOutPipeWrite: THandle;
WasOK: Boolean;
Buffer: array[0..255] of AnsiChar;
BytesRead: Cardinal;
WorkDir: string;
Handle: Boolean;
begin
Result := '';
with SA do begin
nLength := SizeOf(SA);
bInheritHandle := True;
lpSecurityDescriptor := nil;
end;
CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0);
try
with SI do
begin
FillChar(SI, SizeOf(SI), 0);
cb := SizeOf(SI);
dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
wShowWindow := SW_HIDE;
hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect stdin
hStdOutput := StdOutPipeWrite;
hStdError := StdOutPipeWrite;
end;
WorkDir := Work;
Handle := CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine),
nil, nil, True, 0, nil,
PChar(WorkDir), SI, PI);
CloseHandle(StdOutPipeWrite);
if Handle then
try
repeat
WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
if BytesRead > 0 then
begin
Buffer[BytesRead] := #0;
Result := Result + Buffer;
end;
until not WasOK or (BytesRead = 0);
WaitForSingleObject(PI.hProcess, INFINITE);
finally
CloseHandle(PI.hThread);
CloseHandle(PI.hProcess);
end;
finally
CloseHandle(StdOutPipeRead);
end;
end;
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var
stra:string;
i,j:Integer ;
begin
j:=Memo1.Lines.Count-1;
stra:=Memo1.Lines.Strings[j];
if (key = #13) then
begin
if stra='cls'then begin Memo1.Clear ;exit;end;
Memo1.Text :=Memo1.Text+ GetDosOutput(stra);
Memo1.Lines.Add('================================= =============================') ;
i:=Memo1.Lines.Count;
Memo1.Lines.Move(i,i+1);
end
end;
end.
بهروز عباسی
سه شنبه 23 اسفند 1390, 19:42 عصر
اینم یه عکس از برنامه در حال اجرا
84133
BORHAN TEC
سه شنبه 23 اسفند 1390, 19:54 عصر
دست شما درد نکنه، بهتر از قبل است ولی باز هم خیلی جالب نیست و چنگی به دل نمی زند. خودم تا حد زیادی تونستم این مشکل را حل کنم و تا الان برای حل این مسئله فکر کنم 1000 خط کد زدم.:کف: به هر حال اگه کامل شد و به یک پایداری نسبی رسید همینجا قرار میدم تا دوستان دیگر هم بتوانند از آن استفاده کنند.:لبخندساده:
بهروز عباسی
سه شنبه 23 اسفند 1390, 20:29 عصر
بهتر از قبل است ولی باز هم خیلی جالب نیست و چنگی به دل نمی زند
اگه میشه بگو مشکلش چیه من بیشتر از این به فکرم نرسید :گیج:کمی در این باره بیشتر توضیح بده.:کف:
ودم تا حد زیادی تونستم این مشکل را حل کنم و تا الان برای حل این مسئله فکر کنم 1000 خط کد زدم
اگه ممکنه شما کدت رو بذار تا ما هم کمی روش کارکنیم شاید یه چیزی شد.:لبخند:
BORHAN TEC
سه شنبه 23 اسفند 1390, 20:44 عصر
اگه میشه بگو مشکلش چیه من بیشتر از این به فکرم نرسید :گیج:کمی در این باره بیشتر توضیح بده.:کف:
به روی چشم.
-اول از همه اینه که در cmd فقط شما معمولاً در خط آخر می توانید عباراتی را وارد کنید، حال اگر دستورات شما طولش زیاد بود به نسبت آن چند خط آخر قابلیت نوشتن دارد و مابقی خط ها ReadOnly خواهند بود.
-دوم اینکه، اگر کرسر ماوس در خط های دیگری بود و دستوراتی را وارد کردید کرسر باید یه همان خطی که دستور را وارد کردید برود.
- سوم اینکه، ... .
- ... .
- هزارم اینکه، ...
اگه ممکنه شما کدت رو بذار تا ما هم کمی روش کارکنیم شاید یه چیزی شد.
اگر کامل شد حتماً این کا رو می کنم. متاسفانه و یا خوشبختانه برای انجام پروژه ام مجبورم یک فریم ورک کامل در این رابطه بنویسم. (:گریه: یا :لبخند:؟!)
بهروز عباسی
سه شنبه 23 اسفند 1390, 20:50 عصر
متاسفانه و یا خوشبختانه برای انجام پروژه ام مجبورم یک فریم ورک کامل در این رابطه بنویسم.
شرمنده از فضولی مگه چی میخوای بسازی
اون چیزای که شما گفتی
- سوم اینکه، ... .
- ... .
- هزارم اینکه، ...
فکر نکنم با memo درست بشه میشه؟
ایده ای برای انجام این کار داری
به نظر من باید برای این کار خط به خط memo زیرنظر بگیری(روش hook کنی)
BORHAN TEC
چهارشنبه 24 اسفند 1390, 08:26 صبح
شرمنده از فضولی مگه چی میخوای بسازیاختیار داری، یک Shell کامل برای Windows Mobile و Android و Blackberry و احتمالاً Windows Phone و محیط های دیگه.
فکر نکنم با memo درست بشه میشه؟آره، میشه.
ایده ای برای انجام این کار داری
به نظر من باید برای این کار خط به خط memo زیرنظر بگیری(روش hook کنی) ایده که برای این کار زیاد دارم، که دارم بهترینهاشو پیاده می کنم.
pashaa
جمعه 26 اسفند 1390, 14:11 عصر
سلام
کمپونت هست برای ویندوز موبایل.
برای اندروید هم هم dll هست هم نرم افزار کنسولی.
برای بلک بری هم نرم افزار کنسولی هست.
برای ویندوز فون فعلا دنبالش نرفتم چیزی ندارم.
بهروز عباسی
جمعه 26 اسفند 1390, 14:25 عصر
کمپونت هست برای ویندوز موبایل.
برای اندروید هم هم dll هست هم نرم افزار کنسولی.
برای بلک بری هم نرم افزار کنسولی هست.
درود دوست عزیز:لبخند:
منظورت از این حرفا اینکه اینارو قبلاً نوشتن و وجود دارن؟:کف:
برای ویندوز فون فعلا دنبالش نرفتم چیزی ندارم.
حالا این یکی ایرادی نداره اگه میشه چندتای بالا رو برام بذار .:تشویق:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.