zoukankan      html  css  js  c++  java
  • 在Win32程序中显示Dos调试窗口,可暂停(AllocConsole,WriteConsole,FreeConsole函数,GetStdHandle函数取得输入句柄)

    在很多程序中,都可以看到程序运行中,会有一个Dos窗口,实时显示一些运行信息,这里就告诉大家是如何实现的,我们做个简单的,其实对控制台的操作还有很多,有兴趣的可以去查资料。

    用到的API函数如下:

    //创建控制台
    AllocConsole;

    //获取控制台窗口
    GetStdHandle;

    //向控制台输出信息
    WriteConsole;

    //释放控制台
    FreeConsole;

    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
        //控制台句柄
        h_Console:THandle;
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      p:PChar;
      num:Cardinal;
    begin
      //获取控制台窗口
      h_Console := GetStdHandle(STD_OUTPUT_HANDLE);
      p := PChar(Edit1.Text);
      //向控制台输出信息
      WriteConsole(h_Console,p,Length(Edit1.Text),num,nil);
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      //创建控制台
      AllocConsole;
    end;
    
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if h_Console = 0 then Exit;
      //释放控制台
      FreeConsole;
    end;
    
    end.

    参考:http://www.cnblogs.com/key-ok/p/3429861.html

    ------------------------------------------------------------------------------------

    function PauseConsole(Prompt: PAnsiChar): boolean;
    var
      hStdIn, hStdOut: THandle;
      dwRd, dwWr, i: Cardinal;
      cBuf: array [0..128] of TInputRecord;
    begin
      result := false;
      hStdIn := GetStdHandle(STD_INPUT_HANDLE);
      hStdOut := GetStdHandle(STD_OUTPUT_HANDLE);
      if ((hStdIn <> 0) and (hStdOut <> 0)) then
      begin
         WriteFile(hStdOut,Prompt[0],lstrlenA(Prompt),dwWr,nil);
         while ReadConsoleInput(hStdIn,cBuf[0],128,dwRd) do
         begin
           for i := 0 to dwRd do
           begin
             if ((cBuf[i].EventType = KEY_EVENT) and (cBuf[i].Event.KeyEvent.bKeyDown)) then
             begin
               Result := true;
               exit;
             end;
           end;
         end;
      end;
    end;
    
     
      try
        PauseConsole('Press a key to continue...');
      except
        on E:Exception do
          Writeln(E.Classname, ': ', E.Message);
      end;

    参考:http://www.cnblogs.com/key-ok/p/3380446.html

  • 相关阅读:
    Array的个人总结
    sublime3 的安装
    小白 安装和配置Tomcat 局域网内访问网页
    安装Axure7.0,完整教程,有验证码和汉化包
    安装 sublime2 (包括插件)
    ffmpeg
    ExecutorService
    artDialog
    交互
    刚查了,Z3795不支持EPT,即WP8开发必须的SLAT,看来只能作为简单的WINDOWS备机了
  • 原文地址:https://www.cnblogs.com/findumars/p/4748525.html
Copyright © 2011-2022 走看看