Командная строка

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
TIEtankao
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 14.05.2005 (Сб) 18:12

Командная строка

Сообщение TIEtankao » 14.05.2005 (Сб) 18:15

Привет, всем... Кто нибудь знает как написать полноценный эмулятор командной строки???

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 14.05.2005 (Сб) 19:02

Гыыыыыыы........
помести текстбокс на форму и будет тебе счастье....
Shell Text1.text, vbNormal

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 14.05.2005 (Сб) 19:14

Ну не совсем так, там же есть поиск. Его можно взять тут:
http://bbs.vbstreets.ru/viewtopic.php?t=16155

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 14.05.2005 (Сб) 23:48

Я щас как раз этим занимаюсь... только на C++... я реализрвал с использованием пайпов (Pipes)
вот что получилось:
Код: Выделить всё
#include <stdio.h>
#include <iostream.h>

#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
#pragma comment(linker,"/OPT:NOWIN98")

typedef struct {HANDLE hRead; HANDLE hWrite;} PIPE;

PIPE input, output;
PROCESS_INFORMATION pi;

void init(void)
{
SECURITY_ATTRIBUTES sa;
STARTUPINFO si;

sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;

CreatePipe(&input.hRead, &input.hWrite, &sa, 0);
CreatePipe(&output.hRead, &output.hWrite, &sa, 0);

ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdInput = input.hRead;
si.hStdOutput = output.hWrite;
si.hStdError = output.hWrite;

CreateProcess(NULL, "cmd.exe", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
}

int main()
{
   init();
   DWORD dwBuff;
   char buff[4096];
   char cmd[1024];

   Sleep(500);

   ReadFile(output.hRead,buff ,4096, &dwBuff, NULL);
   buff[dwBuff]='\0';
   printf("%s",buff);

   while(1)
   {
      cmd[0]='\0';
      cin.getline(cmd,1024);
      strcat(cmd,"\r\n");
      
      WriteFile(input.hWrite, cmd, strlen(cmd), &dwBuff, NULL);
      
      do
      {
         ReadFile(output.hRead, buff, 4096, &dwBuff, NULL);
         buff[dwBuff]='\0';
         printf("%s",buff);
         if(buff[dwBuff-1]=='>')
            break;
         buff[0]='\0';      
      }while(dwBuff!=0);
      
   }
   return 0;
}
Ушел в себя, вернусь не скоро...

Если вам нужно сделать прозрачной только форму, а контролы на ней нет, то вам сюда!!!

ism
Постоялец
Постоялец
 
Сообщения: 337
Зарегистрирован: 12.12.2001 (Ср) 12:59
Откуда: Russia, Saint-Petersburg

Сообщение ism » 15.05.2005 (Вс) 2:38

Код: Выделить всё

Option Explicit
Private Type PIPE
hRead As Long
hWrite As Long
End Type

Private Type PROCESS_INFORMATION
        hProcess As Long
        hThread As Long
        dwProcessId As Long
        dwThreadId As Long
End Type
Private Type SECURITY_ATTRIBUTES
        nLength As Long
        lpSecurityDescriptor As Long
        bInheritHandle As Long
End Type
Private Type STARTUPINFO
        cb As Long
        lpReserved As String
        lpDesktop As String
        lpTitle As String
        dwX As Long
        dwY As Long
        dwXSize As Long
        dwYSize As Long
        dwXCountChars As Long
        dwYCountChars As Long
        dwFillAttribute As Long
        dwFlags As Long
        wShowWindow As Integer
        cbReserved2 As Integer
        lpReserved2 As Long
        hStdInput As Long
        hStdOutput As Long
        hStdError As Long
End Type
Private Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As SECURITY_ATTRIBUTES, ByVal nSize As Long) As Long
Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
      lpApplicationName As String, ByVal lpCommandLine As String, ByVal _
      lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
      ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
      ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As String, _
      lpStartupInfo As STARTUPINFO, lpProcessInformation As _
      PROCESS_INFORMATION) As Long
     
Private Declare Function ReadFile Lib "kernel32" ( _
          ByVal hFile As Long, _
          ByVal lpBuffer As String, _
          ByVal nNumberOfBytesToRead As Long, _
          lpNumberOfBytesRead As Long, _
          ByVal lpOverlapped As Any) As Long
         
Private Declare Function WriteFile Lib "kernel32" ( _
          ByVal hFile As Long, _
          ByVal lpBuffer As String, _
          ByVal nNumberOfBytesToRead As Long, _
          lpNumberOfBytesRead As Long, _
          ByVal lpOverlapped As Any) As Long

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Const STARTF_USESHOWWINDOW = &H1
Private Const SW_HIDE = 0
Private Const STARTF_USESTDHANDLES = &H100


Private input1 As PIPE
Private output1 As PIPE
Private pi As PROCESS_INFORMATION

Private Sub init()
Dim sa As SECURITY_ATTRIBUTES
Dim si As STARTUPINFO

sa.nLength = Len(sa)
sa.bInheritHandle = 1
sa.lpSecurityDescriptor = 0

Call CreatePipe(input1.hRead, input1.hWrite, sa, 0)
Call CreatePipe(output1.hRead, output1.hWrite, sa, 0)

si.cb = Len(si)
si.dwFlags = STARTF_USESHOWWINDOW Or STARTF_USESTDHANDLES
si.wShowWindow = SW_HIDE
si.hStdInput = input1.hRead
si.hStdOutput = output1.hWrite
si.hStdError = output1.hWrite

Call CreateProcessA(vbNullString, "CMD.exe", 0&, 0&, 1&, _
         0, 0&, vbNullString, si, pi)
End Sub




Private Sub Command1_Click()
Dim dwBuff As Long
Dim buff As String * 4096
Dim cmd As String * 1024

cmd = vbNullString
cmd = InputBox("Команда")
cmd = RTrim(cmd) & vbCrLf

Call WriteFile(input1.hWrite, cmd, Len(cmd), dwBuff, ByVal 0&)

Sleep (500)
Do
                    Call ReadFile(output1.hRead, buff, 4096, dwBuff, ByVal 0&)
                    buff = Left(buff, dwBuff)
                    Text1.Text = Text1.Text & RTrim(buff)
                    If (Right(RTrim(buff), 1) = ">") Then Exit Do
                    buff = vbNullString
Loop While (dwBuff <> 0)
End Sub

Private Sub Form_Load()
Dim dwBuff As Long
Dim buff As String * 4096
Dim cmd As String * 1024

        init
        Sleep (500)
        Call ReadFile(output1.hRead, buff, 4096, dwBuff, ByVal 0&)
        Text1.Text = RTrim(buff)
End Sub


Токо русский шрифт караказябистый, в OEM


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 75

    TopList  
cron