
Опытный
 
Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва
Репутация: 1 Всего: 1
|
зная твою любовь к виндовой консоли, я порылся в своих старых исходниках и откопал тебе это что касается вопроса как задать счетчик времени - получай текущее время и выводи его в консоль. Не пытайся его считать по таймерам - оно будет не точным.. Код | #include <stdlib.h> #include <stdio.h> #include <iostream.h> #include <dir.h> #include <windows.h> #include <conio.h> #include <vcl.h>
//---------------------------------------------------------------------------
#pragma hdrstop
#define MAXCOMLEN 255 #define MAXPARAMLEN 255 char command[MAXCOMLEN]=""; char originalcom[MAXCOMLEN]=""; char param[MAXPARAMLEN]=""; AnsiString Message;
//--------------------------------------------------------------------------- class Console { //private: public: HANDLE hConsoleOutPut; HANDLE hConsoleInPut; BOOL bCursorFlag; public: Console(); #define STDCON 1 Console(BYTE ConType); void CharXY(BYTE x, BYTE y, char c); void Char(char c); void AttrXY(BYTE x, BYTE y, WORD attr); void SetCursorSize(BYTE size); void ChangeCursorVis(); void WriteXY(BYTE x, BYTE y, char *sString); void Write(char *sString); void CLS(); void SetCP(WORD page); void SetTitle(char *sTitle); void Get(char* lpBuffer, BYTE lenght); }; //--------------------------------------------------------------------------- Console::Console() { hConsoleOutPut=CreateConsoleScreenBuffer(GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CONSOLE_TEXTMODE_BUFFER,NULL); hConsoleInPut=CreateConsoleScreenBuffer(GENERIC_READ,FILE_SHARE_WRITE,NULL,CONSOLE_TEXTMODE_BUFFER,NULL); SetConsoleActiveScreenBuffer(hConsoleOutPut); } //--------------------------------------------------------------------------- Console::Console(BYTE ConType) { switch (ConType) { case 1: { hConsoleOutPut=GetStdHandle(STD_OUTPUT_HANDLE); hConsoleInPut=GetStdHandle(STD_INPUT_HANDLE); bCursorFlag=TRUE; } } } //--------------------------------------------------------------------------- void Console::CharXY(BYTE x, BYTE y, char c) { COORD CP; CP.X=x; CP.Y=y; WriteConsoleOutputCharacter(hConsoleOutPut,&c,1,CP,NULL); } //--------------------------------------------------------------------------- void Console::Char(char c) { _CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hConsoleOutPut,&csbi); WriteConsoleOutputCharacter(hConsoleOutPut,&c,1,csbi.dwCursorPosition,NULL); csbi.dwCursorPosition.X++; if(csbi.dwCursorPosition.X>csbi.dwSize.X || c=='\n') { csbi.dwCursorPosition.X=0; csbi.dwCursorPosition.Y++; } SetConsoleCursorPosition(hConsoleOutPut,csbi.dwCursorPosition); } //--------------------------------------------------------------------------- void Console::AttrXY(BYTE x, BYTE y, WORD attr) { COORD CP; CP.X=x; CP.Y=y; WriteConsoleOutputAttribute(hConsoleOutPut,&attr,1,CP,NULL); } //--------------------------------------------------------------------------- void Console::SetCursorSize(BYTE size) { _CONSOLE_CURSOR_INFO cci; cci.dwSize=size; cci.bVisible=bCursorFlag; SetConsoleCursorInfo(hConsoleOutPut,&cci); } //--------------------------------------------------------------------------- void Console::ChangeCursorVis() { _CONSOLE_CURSOR_INFO cci; cci.dwSize=20; cci.bVisible=bCursorFlag^=TRUE; SetConsoleCursorInfo(hConsoleOutPut,&cci); } //--------------------------------------------------------------------------- void Console::WriteXY(BYTE x, BYTE y, char *sString) { _CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hConsoleOutPut,&csbi); while(*sString) { if(x>csbi.dwSize.X || *sString=='\n') { x=0; y++; } if(*sString=='\n') { sString++; continue; } CharXY(x++,y,*sString++); } } //--------------------------------------------------------------------------- void Console::Write(char *sString) { _CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hConsoleOutPut,&csbi); while(*sString) { if(csbi.dwCursorPosition.X>csbi.dwSize.X || *sString=='\n') { csbi.dwCursorPosition.X=0; csbi.dwCursorPosition.Y++; } if(*sString=='\n') { sString++; continue; } CharXY(csbi.dwCursorPosition.X++,csbi.dwCursorPosition.Y,*sString++); } SetConsoleCursorPosition(hConsoleOutPut,csbi.dwCursorPosition); } //--------------------------------------------------------------------------- void Console::CLS() { _CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hConsoleOutPut,&csbi); csbi.dwCursorPosition.X=0;csbi.dwCursorPosition.Y=0; FillConsoleOutputCharacter(hConsoleOutPut,' ',csbi.dwSize.X*csbi.dwSize.Y,csbi.dwCursorPosition,NULL); SetConsoleCursorPosition(hConsoleOutPut,csbi.dwCursorPosition); } //--------------------------------------------------------------------------- void Console::SetCP(WORD page) { SetConsoleCP(page); SetConsoleOutputCP(page); } //--------------------------------------------------------------------------- void Console::SetTitle(char *sTitle) { SetConsoleTitle(sTitle); } //--------------------------------------------------------------------------- void Console::Get(char* lpBuffer, BYTE lenght) { ReadConsole(hConsoleInPut,lpBuffer,lenght,(unsigned long*)lpBuffer,NULL); } //--------------------------------------------------------------------------- //########################################################################### //--------------------------------------------------------------------------- bool compare(char *str1, char *str2) { while(*str1++==*str2++ && *str1); if(*str1!=*str2) return false; return true; } void clear(char *str, BYTE lenght) { for(BYTE i=0;i<lenght;i++) str[i]=0; } void copystr(char *src, char *dest) { while(*src) *dest++=*src++; } int lenght(char *str) { int i=0; while(*str++) i++; return i; } void trim(char* str) { // } int pos(char* lpszStr, char* lpszSubStr,int nStartPos) { int i; for(i=0;lpszStr[i]!=0;i++); if(nStartPos>=i) return -1;
int nLenght,nCount=0; for(i=0;lpszSubStr[i]!=0;i++); nLenght=i; for(i=nStartPos;lpszStr[i]!=0;i++) { if(lpszStr[i]==lpszSubStr[nCount]) while((lpszStr[++i]==lpszSubStr[++nCount]) && (lpszStr[i]!=0)); if (nCount==nLenght) return i-nLenght; else if(nCount>0) i--; nCount=0; } return -1; } int entrance(char* lpszStr, char* lpszSubStr) { int nCount=0; for(int i=0;pos(lpszStr,lpszSubStr,i)!=-1;nCount++) i=pos(lpszStr,lpszSubStr,i)+1; return nCount; } void uppercase(char *str) { while(*str) { if(*str>='a' && *str<='z') *str=*str-32; str++; } } //--------------------------------------------------------------------------- //########################################################################### //--------------------------------------------------------------------------- Console CON1(STDCON); void prompt() { char path[255]; CON1.Char('A'+getdisk()); CON1.Write(":\\"); getcurdir(0,path); CON1.Write(path); CON1.Write(">"); } //--------------------------------------------------------------------------- void translate(char *command, char *param) { command[lenght(command)-2]=0; trim(command); int i=pos(command," ",0); if(i>0) { copystr(command+i,param); command[i]=0; } copystr(command,originalcom); uppercase(command); } //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { //for(int i=1;i<argc;i++) //printf((*(argv+i)));
CON1.SetCP(1251); CON1.SetTitle("Љ®¬ ¤ п бва®Є "); CON1.Write("Microsoft Windows XP [Версия 5.1.2600]\n(C) Корпорация Майкрософт, 1985-2001.\n\n");
while(1) { prompt(); clear(command,MAXCOMLEN); clear(originalcom,MAXCOMLEN); clear(param,MAXPARAMLEN); CON1.Get(command,MAXCOMLEN); translate(command,param); //CON1.WriteXY(0,15,command); //CON1.WriteXY(0,16,param); if(compare(command,"EXIT")) return 0; if(compare(command,"CLS")) { CON1.CLS(); continue; } //ShellExecute(CON1.hConsoleInPut,"open","ping","-t 127.0.0.1",NULL/*"%system root%"*/,SW_SHOWNORMAL); //WinExec(command, SW_SHOWNORMAL); //_STARTUPINFOA si; //CreateProcess("ping.exe","-t 127.0.0.1", NULL,NULL,FALSE,0,NULL,NULL,&si,NULL);
if(lenght(command)>0) { Message=(AnsiString)"\"" + (AnsiString)originalcom + (AnsiString)"\"" + (AnsiString)" не явлеятеся внутренней или внешней\nкомандой, исполняемой программой или пакетным файлом.\n\n"; CON1.Write(Message.c_str()); } } } //---------------------------------------------------------------------------
|
PS и завязывай с виндой
--------------------
undefined
|