C+中的控制台+;应用 我想在C++应用程序中实现控制台。比如ftp。或(IIRC)sql,一旦连接到服务器

C+中的控制台+;应用 我想在C++应用程序中实现控制台。比如ftp。或(IIRC)sql,一旦连接到服务器,c++,C++,有人知道一个实现这一点的库吗?最好是自动完成之类的?我的搜索结果只有“如何构建一个C++控制台应用程序”,我知道如何做。实现了你想要的特性。如果文件名自动完成不是您需要的排序,请使用例程。如果您还想自动完成,您可以 查看(轻量级readline替代品)的示例 基本上,您必须在循环中解析Userinput行 非常基本的CommadLineInterface示例: 在while循环中显示提示和读取输入 在\n 将标记中的行至少拆分为空格(然后;)将第一个字符串作为Commandcmd,其余作为arg

有人知道一个实现这一点的库吗?最好是自动完成之类的?我的搜索结果只有“如何构建一个C++控制台应用程序”,我知道如何做。

实现了你想要的特性。如果文件名自动完成不是您需要的排序,请使用例程。

如果您还想自动完成,您可以 查看(轻量级readline替代品)的示例

基本上,您必须在循环中解析Userinput行

非常基本的CommadLineInterface示例:

  • 在while循环中显示提示和读取输入
  • \n
  • 将标记中的行至少拆分为
    空格
    (然后
    )将第一个字符串作为Command
    cmd
    ,其余作为
    args
  • 调用
    dispatch(cmd,args)

  • 对于Windows:使用
    alloconsole()
    将文本控制台连接到GUI应用程序和
    freopen(“CON”,“w”,stdout)
    重定向,并
    printf()
    输出文本

    示例代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    // Function prototypes.
    LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam );
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow );
    
    // In a C++ Windows app, the starting point is WinMain().
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow )          
    {
    
      // these next few lines create and attach a console
      // to this process.  note that each process is only allowed one console.
      AllocConsole() ;
    
      freopen( "CON", "w", stdout ) ;
    
      printf("HELLO!!! I AM THE CONSOLE!\n" ) ;
    
    
      WNDCLASSEX wc = { 0 };
      wc.cbSize = sizeof( WNDCLASSEX ) ;
      wc.cbClsExtra = 0;  // ignore for now
      wc.cbWndExtra = 0;  // ignore for now
      wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
      wc.hCursor = LoadCursor( NULL, IDC_ARROW ); 
      wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
      wc.hInstance = hInstance;
      wc.lpfnWndProc = WndProc;
      wc.lpszClassName = TEXT(" ");
      wc.lpszMenuName = 0;
      wc.style = CS_HREDRAW | CS_VREDRAW; // Redraw the window
    
      RegisterClassEx( &wc );
    
      HWND hwnd = CreateWindowEx( 0, TEXT(" "), TEXT("window's title!"), WS_OVERLAPPEDWINDOW, 10, 10, 200, 200, NULL, NULL, hInstance, NULL );      
    
      ShowWindow(hwnd, iCmdShow );
      UpdateWindow(hwnd);
    
      MSG msg;
    
      while( GetMessage( &msg, NULL, 0, 0 ) )
      {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
      }
    
      return msg.wParam;    // return from WinMain
    }
    
    LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam )
    {
      switch( message )
      {
      case WM_CREATE:
        // upon creation, let the speaker beep at 50Hz, for 10ms.
        Beep( 50, 10 );
        printf("HELLO!!! I AM THE CONSOLE!\n" ) ;
        return 0;
        break;
    
      case WM_PAINT:
        {
          // we would place our Windows painting code here.
          HDC hdc;
          PAINTSTRUCT ps;
          hdc = BeginPaint( hwnd, &ps );
    
          // draw a circle and a 2 squares
          Ellipse( hdc, 20, 20, 160, 160 );
          Rectangle( hdc, 50, 50, 90, 90 );
          Rectangle( hdc, 100, 50, 140, 90 );
          printf("HELLO!!! I AM THE CONSOLE!\n" ) ;
    
          EndPaint( hwnd, &ps );
        }
        return 0;
        break;
    
      case WM_LBUTTONDOWN:
        printf("STOP POKING MEEE!!!\n") ;
        break;
    
      case WM_DESTROY:
        PostQuitMessage( 0 ) ;
        return 0;
        break;
    
      }
    
      return DefWindowProc( hwnd, message, wparam, lparam );
    }
    
    #包括
    #包括
    //功能原型。
    LRESULT回调WndProc(HWND HWND,UINT消息,WPARAM WPARAM,LPARAM LPARAM);
    int WINAPI WinMain(HINSTANCE HINSTANCE、HINSTANCE hPrevInstance、LPSTR szCmdLine、int iCmdShow);
    //在C++ Windows应用程序中,起点是WINMINE()。
    int WINAPI WinMain(HINSTANCE HINSTANCE、HINSTANCE hPrevInstance、LPSTR szCmdLine、int iCmdShow)
    {
    //接下来的几行创建并连接控制台
    //请注意,每个进程只允许有一个控制台。
    allocsole();
    弗雷奥普(“CON”、“w”、stdout);
    printf(“你好!!!我是控制台!\n”);
    WNDCLASSEX wc={0};
    wc.cbSize=sizeof(WNDCLASSEX);
    wc.cbClsExtra=0;//暂时忽略
    wc.cbWndExtra=0;//暂时忽略
    wc.hbrBackground=(HBRUSH)GetStockObject(白色画笔);
    wc.hCursor=LoadCursor(空,IDC_箭头);
    wc.hIcon=LoadIcon(空,IDI_应用程序);
    wc.hInstance=hInstance;
    wc.lpfnWndProc=WndProc;
    wc.lpszClassName=文本(“”);
    wc.lpszMenuName=0;
    wc.style=CS_HREDRAW | CS_VREDRAW;//重新绘制窗口
    注册类别(&wc);
    HWND HWND=CreateWindowEx(0,文本(“”),文本(“窗口的标题!”),WS_重叠窗口,10,10,200,200,NULL,NULL,NULL);
    显示窗口(hwnd、iCmdShow);
    更新窗口(hwnd);
    味精;
    while(GetMessage(&msg,NULL,0,0))
    {
    翻译信息(&msg);
    发送消息(&msg);
    }
    return msg.wParam;//从WinMain返回
    }
    LRESULT回调WndProc(HWND HWND,UINT消息,WPARAM WPARAM,LPARAM LPARAM)
    {
    开关(信息)
    {
    案例WM_创建:
    //创建后,让扬声器以50Hz的频率嘟嘟响10毫秒。
    嘟嘟声(50,10);
    printf(“你好!!!我是控制台!\n”);
    返回0;
    打破
    案例WM_油漆:
    {
    //我们将把我们的Windows绘画代码放在这里。
    HDC-HDC;
    PAINTSTRUCT-ps;
    hdc=开始喷漆(hwnd和ps);
    //画一个圆和两个正方形
    椭圆(hdc,20,20,160,160);
    矩形(hdc,50,50,90,90);
    矩形(hdc,100,50,140,90);
    printf(“你好!!!我是控制台!\n”);
    端漆(hwnd和ps);
    }
    返回0;
    打破
    案例WM_LBUTTONDOWN:
    printf(“停止戳米!!!\n”);
    打破
    案例WM_销毁:
    PostQuitMessage(0);
    返回0;
    打破
    }
    返回DefWindowProc(hwnd、message、wparam、lparam);
    }
    
    当你可以创建一个提供相同功能的C++控制台应用程序时,为什么要重新发明轮子?这叫做终端仿真器。我不知道你为什么需要它,但…它可能在某些方面有所帮助。@JLaw:我不想重新发明法律,这就是我为什么要问的原因。我希望有一个库,我可以提供我可能的命令,并将为我杜其余(函数调用,自动完成),所以我不必重新发明它。