Меню Рубрики

Windows api console functions

Функции API для работы с консолью

Для начала работы с консолью необходимо получить ее дескриптор.

Функция получения дескриптора стандартного устройства ввода, вывода или ошибки в зависимости от переданного константного параметра:
HANDLE WINAPI GetStdHandle(__in DWORD nStdHandle);

nStdHandle может принимать значения

  • STD_INPUT_HANDLE = -10; // устройство ввода
  • STD_OUTPUT_HANDLE = -11; // устройство вывода
  • STD_ERROR_HANDLE = -12; // ошибка

Использование русского языка в консоли с помощью API

Для указания кодовой страницы используются функции

  • Кодовая страница консоли вывода
    BOOL WINAPI SetConsoleOutputCP(UINT wCodePageID);
  • Кодовая страница консоли ввода
    BOOL WINAPI SetConsoleCP(UINT wCodePageID);

где wCodePageID — номер кодовой страницы.
Для перекодировки на русский язык используется кодовая страница wCodePageID=1251 .

Для перекодировки русского текста, введенного в Win-коде также может использоваться функция

  • lpszSrc – указатель на строку-источник;
  • lpszDst/strong> – указатель на строку-приемник

Возвращаемое значение 1 в случае успешной перекодировки.

Чтение/запись данных в консоль/файл

Для чтения и записи данных в консоль используются функции

В случае успешного завершения функции возвращают ненулевое значение.
Аргументы функций

  • hFile -дескриптор файла/консоли. Файл/консоль должен иметь доступ для чтения для функции ReadFile() и доступ для записи для функции WriteFile() .
  • lpBuffer — указатель на буфер (строку) для чтения/записи данных.
  • nNumberOfBytesToWrite — число байтов, которые будут записаны в файл.
  • lpNumberOfBytesWritten — указатель на переменную, которая получает число считанных/записанных байтов.
  • lpOverlapped — указатель на структуру OVERLAPPED , которая используется в операциях асинхронного ввода-вывода (например, получение данных по интерфейсу связи). Для синхронного ввода-вывода данный указатель имеет значение NULL .

Установка заголовка окна консоли

Функция установки заголовка окна консоли

lpConsoleTitle – указатель на строку имени консоли с завершающим нуль-символом

Установка цвета символов и фона в консоли

Цвет символов и фона задается с помощью констант, определяющих тетрады символов.
Цвет символов

  • FOREGROUND_BLUE = 0x01
  • FOREGROUND_GREEN = 0x02
  • FOREGROUND_RED = 0x04
  • FOREGROUND_INTENSITY = 0x08
  • BACKGROUND_BLUE = 0x10
  • BACKGROUND_GREEN = 0x20
  • BACKGROUND_RED = 0x40
  • BACKGROUND_INTENSITY = 0x80

Каждая тетрада, определяющая цвет символов или фона, представляет собой значение от 0 до 15, задаваемая логической суммой соответствующих констант:

Например, цвет символов с кодом 13 задается как

FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY .

Функция определения атрибутов вводимых символов в окне консоли

  • hConsoleOutput – дескриптор буфера консоли вывода;
  • wAttributes – цвет букв и фона, получаемый путем комбинации констант

Функция, задающая цвет фона консоли(путем закрашивания фона отдельных символов)

  • hConsoleOutput – дескриптор буфера вывода консоли;
    wAttribute – атрибут цвета фона символа в консоли;
  • nLength – количество ячеек символов, фон которых устанавливается заданным цветом;
  • dwWriteCoord – координаты первой закрашиваемой ячейки;
  • lpNumberOfAttrsWritten – указатель на идентификатор, в который записывается количество реально закрашенных ячеек.

Для того чтобы изменить цвет всего окна консоли необходимо задать цвет символов, количество которых определяется размером окна консоли. Размер стандартного окна консоли 80×25 = 2000 символов.

Установка позиции курсора

Функция установки позиции курсора в окне консоли

hConsoleOutput – дескриптор буфера вывода консоли;
dwCursorPosition – структура координат COORD, определяющая позицию курсора.

Структура координат представляет собой

Результат выполнения

Примечание: для корректной компиляции программы необходимо изменить тип кодировки проекта на многобайтовую.

Источник

Руководство по API командной строки

Command Line API Reference — оригинал статьи. Перевод статьи от нашего старшего frontend разработчика Сэма Булатова.

API консоли содержит коллекцию полезных функций для выполнения простых задач: выделение и испектирование DOM элементов, вывод данных в читабельном формате, остановка и запуск профайлера, и мониторинг DOM событий.

Это API доступно только из консоли. Вы не сможете получить доступ к нему из скриптов страницы.
Если вы ищите функции которые работают с консолью ( функции которые начинаются с console.*), ознакомьтесь с Console API .

$_ возвращает последнее выполненное выражение.

В следующем примере, выполняется простое выражение (2 + 2). $_свойство содержит результат этого выражения.

В следующем примере, в консоль вводится массив имен. Выполнение $_.length для нахождения длины массива, приведет к изменению содержимого $_ , что в итоге будет равно 4:

Команды $0, $1, $2, $3 и $4 содержат последние 5 проинспектированных DOM элементов через панель Elements или последние 5 JavaScript обектов выбранные в панели Profiles. $0возвращает самый последний выделенный элемент или JavaScript объект, $1 возвращает предыдущий выделенный элемент и так далее.

В следующем примере, выделенный через панель Elements тег img , $0 содержит ссылку на тег img так как это последний выбранный элемент:

На изображении ниже показан другой элемент выбранный на той же странице. Теперь $0 возвращает недавно выбранный элемент, а $1возвращает предыдущий выбранный элемент, то есть тег img .

$(selector, [startNode])

$(selector) возвращает первый DOM элемент подходящий под переданный CSS селектор. Эта функция алиас для document.querySelector() .

В седеющем примере возвращается ссылка на первый элемент imgв странице:

Клик правой кнопки мыши по результату и выберите “Reveal in Elements Panel”, чтобы найти элемент в DOM или “Scroll in to View”, чтобы перейти к этому элементу на странице.

Следующий пример, возвращает ссылку на выбранный элемент и выводит значение его src атрибута:

Эта функция также принимает второй параметр, startNode, элемент или узел(node) в котором нужно искать элемент. По умолчанию это параметр равен document .

В следующем примере возвращается ссылка на первый элемент выбранного, в данный момент, узла и выводит его src :

Если вы используете такую библиотеку как Jquery, которая использует знак $ , эта функциональность переписывается и будет использоваться реализация библиотеки

$$(selector, [startNode])

$$(selector) возвращает массив всех элементов подходящих под CSS селектор. Эта команда эквивалента document.querySelectorAll() .

Следующий пример использует $$() для получения массива всех элементов на странице и выводит значение атрибута srcкаждого элемента:

var images = $$(‘img’);for (each in images) <
console.log(images[each].src);
>

$$() так же принимает параметр startNode и работает точно так же как и предыдущая функция.

Далее вы ведите измененную версию предыдущего примера, здесь мы используем $$() для получения массива элементов в переданном узле:

var images = $$(
‘img’,
document.querySelector(‘.devsite-header-background’)
);for (each in images) <
console.log(images[each].src);
>

Используйте Shift + Enter в консоле, чтобы перейти на новую строку без выполнения написанного

$x(path, [startNode])

$x(path) вернет массив DOM элементов которые соответствуют XPath выражению.

Источник

Разбираемся в WinAPI

Для кого эта статья

Эта статья адресована таким же, как и я новичкам в программировании на С++ которые по воле случая или по желанию решили изучать WinAPI.
Хочу сразу предупредить:
Я не претендую на звание гуру по C++ или WinAPI.
Я только учусь и хочу привести здесь несколько примеров и советов которые облегчают мне изучение функций и механизмов WinAPI.

В данной статье я предполагаю что вы уже достаточно ознакомились с С++, что бы уметь создавать классы и перегружать для них различные операторы и что вы уже «прятали» какие-то свои механизмы в класс.

Создание и использование консоли

Для отладки Win32 приложения или просто для того что посмотреть как оно там всё внутри происходит я всегда пользуюсь консолью.
Так как вы создаете GUI приложение, а не консольное, то консоль не подключается. Для того что бы её вызвать в недрах интернета был найден вот этот код

if (AllocConsole())
<
int hCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), 4);
*stdout = *(::_fdopen(hCrt, «w»));
::setvbuf(stdout, NULL, _IONBF, 0);
*stderr = *(::_fdopen(hCrt, «w»));
::setvbuf(stderr, NULL, _IONBF, 0);
std::ios::sync_with_stdio();
>
Для удобства советую обернуть его в функцию. Например:
void CreateConsole()
<
if (AllocConsole())
<
int hCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), 4);
*stdout = *(::_fdopen(hCrt, «w»));
::setvbuf(stdout, NULL, _IONBF, 0);
*stderr = *(::_fdopen(hCrt, «w»));
::setvbuf(stderr, NULL, _IONBF, 0);
std::ios::sync_with_stdio();
>

Вызванная консоль работает только в режиме вывода и работает он также как и в консольных приложениях. Выводите информацию как и обычно — cout/wcout.
Для работоспособности данного кода необходимо включить в прект следующие файлы:
#include
#include #include
и включить пространство имен std в глобальное пространство имён:
using namespace std;
Конечно же, если вы не хотите этого делать, то просто допишите std:: ко всем сущностям которые в ней находятся.

Наследование объектов для вывода и арифм. операций

При создании и изучении самих «окошек» мне всегда требовалось выводить в консоль какое-нибудь значение.
Например:
Вы получаете размер клиентской области окна с помощью функции GetClientRect куда как параметр передается адрес объекта структуры RECT, что бы заполнить этот объект данными. Если вам нужно узнать размер полученной клиентский области вы просто можете вывести его в уже подключённую консоль

Но делать так каждый раз (особенно если вам часто приходиться делать что-то подобное) очень неудобно.
Здесь нам на помощь приходит наследование.
Создайте класс который открыто наследуется от структуры RECT и перегрузите оператор вывода class newrect:public RECT
<
public:
friend ostream& operator

Теперь просто выводите обьект с помощью cout/wcout:

И вам в удобном виде будет выводиться всё так, как вам требуется.
Так же вы можете сделать с любыми нужными вам операторами.
Например, если надо сравнивать или присваивать структуры (допустим тот же RECT или POINT) — перегрузите operator==() и operator=() соответственно.
Если хотите реализовать оператор меньше class BaseWindow
<
WNDCLASSEX _wcex;
TCHAR _className[30];
TCHAR _windowName[40];
HWND _hwnd;
bool _WindowCreation();
public:
BaseWindow(LPCTSTR windowName,HINSTANCE hInstance,DWORD style,UINT x,UINT y,UINT height,UINT width);
BaseWIndow(LPCTSTR windowName,HINSTANCE hInstance);
const HWND GetHWND()const
LPCTSTR GetWndName()const
>;

Один раз хорошенько продумав и написав такой класс вы облегчите себе жизнь и будете больше времени уделять обучению и оттачиванию навыков чем написанию одного и того же каждый раз. Тем более, я считаю это очень полезно — самому сделать такой класс и дополнять его по необходимости.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Windows apache не стартует
  • Windows apache включить mod rewrite
  • Windows apache virtualhost настройка
  • Windows apache tomcat php
  • Windows apache msi installer