Без рубрики
Русский текст в консольном окне C++
Русский текст в консольном окне C++.
Подробнее »Русский текст в консольном окне C++
Смотрим, что установлено в системе
Смотрим, что установлено в системе. Пример позволяющий просмотреть установленные в системе программы.
Передача файлов с помощью TransmitFile
Передача файлов с помощью TransmitFile. Функция TransmitFile служит для быстрой передачи данных из файлов, благодаря тому, что она работает в режиме ядра(kernel mode), и не происходят частые переключения между режимами. Данная функция это дополнение к WinSock, то есть если Вы пишите программу для Win32 и после хотите перенести код на Unix-системы, то придется значительно изменять код.
Перечисление элементов реестра используя API
Перечисление элементов реестра используя API. У меня установлена программа RegCleaner, в которой можно просмотреть элементы автозапуска. Сейчас попытаюсь объяснить, как сделать перечисление значений ключа реестра, для этого существует API функция RegEnumValue.
Прозрачные окна на C++
Прозрачные окна на C++. Привожу пример, как можно придать прозрачность разнообразным окнам. Для этого нам послужит функция SetLayeredWindowAttributes
Удаление системных часов с панели задач
Удаление системных часов с панели задач. Однажды мне понадобилось удалить часы с панели задач, так как у меня есть своя программа показывающая время. Максимум чего смог добиться, просто скрыть их, но оставалось пустое место, что выглядело не очень красиво. После обнаружил очень интересную вещь, если вызвать Shell_NotifyIcon(NIM_DELETE,&nid); то пустое место исчезает.
Делаем свой mp3 проигрыватель на C++
Для создания проигрывателя, будем использовать элемент управления Media PlayerПодробнее »Делаем свой mp3 проигрыватель на C++
Отправка широковещательного сообщения на API и MFC
Пример отправки широковещательного сообщения используя возможности API и MFC
Подробнее »Отправка широковещательного сообщения на API и MFC
Поиск файлов в текущей директории
Иногда бывают ситуации, когда необходимо произвести поиск файлов в текущей директории, то есть в папке, из которой был произведен запуск программы. Чтобы начать поиск необходима API функция FindFirstFileПодробнее »Поиск файлов в текущей директории
Примеры программирования на Ассемблере
Простой пример обработки сообщения от мыши.
Для обработки сообщения от мыши в DOS`е нам потребуется прерывание 33h.
int 33h Вход: ax =0000h Выход: ax =0000h, если мышь или драйвер мыши не установлены. ax =0ffffh, драйвер и мышь установлены. Bx=число кнопок: 0002 или 0ffffh – две 0003 – три 0000 – другое количество
int 33h Вход: ax=0001h Спрятать курсор: int 33h Вход: ax=0002h
int 33h Вход: ax=000сh es:dx = адрес обработчика cx = условие вызова бит 0: любое перемещение бит 1: нажатие левой копки бит 2: отпускание левой копки бит 3: нажатие правой копки бит 4: отпускание правой копки бит 5: нажатие средней копки бит 6: отпускание средней копки cx = 0000h – отменить обработчик
Обработчик оформляется как дальняя процедура, на входе ax — содержит условие вызова, bx – состояние кнопок, cx и dx – x и y координаты курсора, si и di – счетчик последнего перемещения по горизонтали и вертикали, ds – сегмент данных драйвера мыши.
Делать будем com программу, используя TASM, параметры транслятора и компоновщика такие:
bin\tasm mouse.asm bin\tlink /t /x mouse.obj /t – создать файл типа .com /x – не создавать файл карты(map) .model tiny ; код, данные и стек размещаются в одном сегменте, размером 64 кб .code ; основной сегмент кода org 100h ; счетчик для com start: mov ax,12h ;установка видеорежима 640х480, 16 цветов int 10h mov ax,0000h ;инициализация мыши int 33h mov ax,0ch ; установка обработчика мыши mov cx,0001h ; любое перемещение lea dx,handler_I ; смещение обработчика int 33h ;----------------------------------------- mov ah,10h ; ждем нажатие любой кнопки int 16h mov ax,000ch mov cx,0000h ; отменяем обработчик int 33h ret ; конец программы handler_I: ; наш обработчик ; cx и dx – x и y координаты курсора, а для int 10h это номера строки и столбца push cs pop ds ; в ds сегмент кода и данные программы mov bh,0 ; номер видеостраницы mov ah,0ch ; вывести точку на экран mov al,color_m ; цвет точки int 10h retf ; выход из процедуры color_m db 0000010 end start
Здесь необходимо заметить, что в режиме 12h возвращаемые координаты совпадают с координатами пикселов. Если использовать режим 13h, то необходимо координату X разделить на 2. Программу можно оптимизировать, необходимо в обработчике мыши использовать прямую запись в видеопамять вместо прерывания 10h.
Массивы на Ассемблере
Создание одномерного массива на Ассемблере.
.model tiny .code org 100h start: push cs pop ds ;--------------------------------------- mov cx,99 ;Значение счетчика циклов для команды loop mov si,0 ;Индекс первого элемента, si так же будет и значением ARR_loop: mov array[si],si;array[0]=0,array[1]=1...array[n]=n inc si loop ARR_loop ;цикл int 20h ;--------------------------------------- array dw 99 dup (?) ;Не инициализированный массив end start
Создание двухмерного массива на Ассемблере.
.model tiny .code org 100h start: push cs pop ds ;в сегмент данных заносим сегмент кода mov si,0 ;Начальная строка mov bx,0 ;Начальный столбец ;--------------------------------------- array_loop: mov array[bx][si],bx ;Заполняем элементы массива текущим индексом столбца inc si ;На следующий элемент строки cmp si,10 ;Конец строки? jz NextLine ;если да, переходим на метку NextLine jmp array_loop ;иначе, продолжаем заполнять строку NextLine: mov si,0 ;Обнуляем индекс элемента строки inc bx ;Переходим на следующий столбец cmp bx,10 ;Последний столбец? jz exit ;если да,выход jmp array_loop ;иначе, продолжаем заполнять следующею строку exit: ;--------------------------------------- int 20h ;Выход из com программы ;--------------------------------------- array dw 10 dup (10 dup (?)) end start
Поиск числа в двухмерном массиве на Ассемблере.
.model tiny .code org 100h start: push cs pop ds ;в сегмент данных заносим сегмент кода mov si,0 mov bx,0 ;Поиск---------------------------------- array_find: mov ax,array[bx][si] call Proverka inc si ;На следующий элемент строки cmp si,2 ;Конец строки? jz NLine ;если да, переходим на метку NextLine jmp array_find ;иначе, продолжаем заполнять строку NLine: mov si,0 ;Обнуляем индекс элемента строки inc bx ;Переходим на следующий столбец cmp bx,3 ;Последний столбец? jz exit ;если да,выход jmp array_find ;иначе, продолжаем заполнять следующею строку exit: ;--------------------------------------- int 20h ;Выход из com программы ;--------------------------------------- array dw 2 dup (3 dup (0)) message db "Yes ",0dh,0ah,'$' ;--------------------------------------- Proverka proc cmp ax,0 jz YES ret YES: mov ah,9 mov dx,offset message int 21h ret Proverka endp end start
Пример расчета факториала на Ассемблере.
Пример расчета факториала, на мой взгляд, очень полезная программа для понимания работы стека.
.model small .486 .stack 100h .code start: mov ax,@data mov ds,ax mov res,1 push 5 call factorial ;----------------------------------------------------- mov ax,4c00h int 21h ;----------------------------------------------------- factorial proc push bp mov bp,sp mov cx,[bp+4] mov ax,cx mul res mov res,ax dec cx jcxz end_p push cx call factorial end_p: mov sp,bp pop bp ret factorial endp ;----------------------------------------------------- .data res dw 0 end start
Прямая запись в видео память на ассемблере.
Рисование горизонтальной линии, с помощью прямой записи в видео память.
.model tiny .code org 100h start: mov al,13h int 10h mov ax,0A000h mov es,ax mov dx,320*100+160 ;320*y1+x1(начальная точка) mov cx,13 ;Длина линии call gline mov ah,10h int 16h ret ;------------------------------------------------------------ gline proc mov di,dx mov al,111b ;color rep stosb ;копируем al в ES:DI, dec DI ret gline endp ;------------------------------------------------------------ end start
Вывод ASCII кодов на ассемблере.
.model tiny .code org 100h start: mov ax,13h int 10h mov cx,256 ;Счетчик кругов для loop mov ax,0003h ;Установка видеорижима 3, курсор в 0,0 int 10h ;и очистка экрана mov ax,0b800h mov es,ax ;Загружаем в дополнительный сегментный регистр абсол.адрес mov di,0 ;Смещение относительно адреса 0b800h mov ah,010b ;Атрибуты, цвет текста зеленый mov al,00h ;ASCII код mov es:[di],ax ;Грузим не в регистр а по адресу который наход. в регистре ;---------------------- cloop: add di,4 ;Смещение на 4 байта, чтобы выглядело нормально inc al ;Следущий ASCII код mov es:[di],ax ;Грузим по адресу в видеопамять loop cloop ;Дальше... ;---------------------- mov ah,10h ;Ждем нажатие Any Key int 16h ret end start
1С:Предприятие, мои первые шаги в обучении
Надо отдать должное компании 1С, так как благодаря их усилиям по внедрению повсеместно продуктов аналитического учета таких как 1С:Предприятие, найти работу обычным эникейщикам которые не имеют опыта работы с данными системами становиться очень сложно. Практически во всех вакансиях, которые присутствуют в общем доступе, требуются знание и опыт администрирования, а так же программирования в данной системе, желательны еще и знания бухгалтерского учета.
До первого знакомства с данной системой у меня было не особенно положительное мнение о встроенном языке программирования 1С, до сих пор в Интернете можно встретить высказывания негативного характера о данной системе, в основе этих высказываний лежит банальное невежество, будем это исправлять.
После анализа сложившейся ситуации пришел к выводу, что изучить данную систему просто необходимо, для этого решил воспользоваться программным продуктом «1С:Предприятие 8.2 Версия для обучения программированию». На официальном сайте о данном решение говориться следующие:
Версия для обучения программированию – доступное решение для широкого круга пользователей, которые хотят познакомиться с системой программ «1С:Предприятие 8» и научиться приемам конфигурирования: созданию и изменению структуры метаданных, написанию программных модулей, разработке диалогов и интерфейсов, администрированию прикладных решений на платформе «1С:Предприятие 8».
В состав продукта входит:
Книги:
1С:Предприятие 8.2. Руководство разработчика (в 2-х частях);
1С:Предприятие 8.2. Руководство администратора
М.Г.Радченко, Е.Ю. Хрусталева «1С:Предприятие 8.2. Практическое пособие разработчика. Примеры и типовые приемы» (+ CD-ROM)
CD-ROM:
1С:Предприятие 8.2. Версия для обучения программированию
На мой взгляд, очень полезным и интересным здесь является платформа для обучения, за столь не высокую цену получаем легальную систему для освоения администрирования и программирования. Хотя у нее много ограничений и притом снижена скорость работы, но все-таки для начала думаю самое то:
Ограничения и особенности учебной версии платформы «1С:Предприятия 8.2»
По сравнению с коммерческими версиями учебная версия платформы «1С:Предприятие 8.2» имеет следующие ограничения:
ограничено количество данных:
максимальное количество записей в таблицах счетов 500;
максимальное количество записей в главных таблицах объектов 200;
количество записей в табличных частях объектов 1000;
количество записей в наборах записей 1000;
не поддерживается работа в варианте клиент-сервер;
не поддерживается работа распределенных информационных баз;
не поддерживается COM-соединение;
отсутствует возможность использования паролей и аутентификации операционной системы для пользователей;
печать и сохранение табличных документов поддерживаются только в режиме Конфигуратора;
не поддерживается копирование содержимого более чем одной ячейки табличного документа в режиме «1С:Предприятия»;
быстродействие учебной версии ниже, чем у коммерческой версии «1С:Предприятие 8.2»;
не поддерживается работа с хранилищем конфигурации;
не доступна функциональность, связанная с поставкой конфигурации;
количество одновременных сеансов работы с информационной базой ограничено одним сеансом.
Учебная версия платформы «1С:Предприятие 8.2» не имеет аппаратной или программной защиты, однако ее быстродействие снижено по сравнению с коммерческой версией «1С:Предприятие 8.2».
Первым делом регистрируемся на сайте по адресу: http://users.v8.1c.ru/getpswbase.jsp . Особенно порадовала непрошибаемая форма Регистрация пользователя на сайте по PIN-коду, где постоянно выдавала ошибку о том, что неверно заполнены данные регистрационного номера и PIN кода, хотя данные были проверены несколько раз и вводились крайне внимательно!
Потратив немного времени, все-таки после нескольких попыток мне удалось зарегистрироваться и благополучно получить свой пароль для доступа в личный кабинет. Главное что меня интересовало в это кабинете так это страница Порядок получения обновлений с пользовательского сайта «1С:Предприятия 8» где довольно подробно и с картинками было описан метод обновления.
После распаковки коробки и регистрации на сайте, пробуем установить учебную версию 1С, запускаем autorun.exe, появляется первоначальное окно запуска:
Выбираем автоматическую установку и далее программа установки сама все устанавливает без нашего вмешательства в процесс, в конце установки выводится окно запуска учебной версии 1С:Предприятия
Далее устанавливаем приложение к книге «1С:Предприятие 8.2 Практическое пособие разработчика. Примеры и типовые приемы», процесс не сложный и быстрый. В описании к поставке хорошо описано, что собой представляет данный комплект. Теперь можно смело приступать к изучению 1С.
Быстрая установка FreeBSD
В данном примере хочу поделиться своим опытом быстрой установки операционной системы FreeBSD и дальнейшего использования в качестве рабочей станции.
Отказ от ответственности
Отказ от ответственности.
В соответствии с действующим законодательством, Администрация отказывается от каких-либо заверений и гарантий, предоставление которых может иным образом подразумеваться, и отказывается от ответственности в отношении Сайта, Содержимого и их использования.
1. Размещаемая на страницах портала https://blagin.ru и его поддоменах информация предназначена для свободного ознакомления пользователей с вопросами, которые могут представлять для них интерес.
2. Вся информация предоставляется в исходном виде, без гарантий полноты или своевременности, и без иных, явно выраженных или подразумеваемых гарантий. Доступ к https://blagin.ru и его поддоменах, а также использование его содержимого осуществляется исключительно по вашему усмотрению и на ваш риск.
3. Администрация (владельцы, должностные лица, директора, акционеры, учредители, работники, агенты, Кураторы секций и иные представители) прикладывает все усилия, чтобы обеспечить пользователей точной и достоверной информацией, но в то же время не исключает возможности возникновения ошибок.
4. blagin.ru — это проект, работающий по принципу «как есть», без заключения каких-либо договорённостей или договоров между вами, пользователями данного сайта, администрацией, владельцами серверов, на которых он размещён, либо кем-то ещё, любым образом связанными с этим или родственными ему проектами, которые (договора) могут стать предметом прямых претензий.
5. Администрация не дает каких-либо заверений или гарантий в отношении https://blagin.ru, его поддоменах и его сервисов, служб, форумов, продуктов или услуг (далее — Сервисы), в том числе, без ограничения, в отношении своевременности, актуальности, точности, полноты, достоверности, доступности или соответствия для какой-либо конкретной цели и Сервисов, в отношении того, что: при использовании https://blagin.ru и его поддоменах не возникнет ошибок, Сервисы будут безопасными и бесперебойными, Администрация будет исправлять какие-либо ошибки, или что на https://blagin.ru и его поддоменах не будет вирусов или иных вредоносных кодов, а также, что информация не нарушает прав третьих лиц.
6. Некоторые ссылки на https://blagin.ru и его поддоменах ведут к ресурсам, расположенным на сторонних сайтах. Данные ссылки размещены для удобства пользователей и не означают, что Администрация одобряет содержание других сайтов. Кроме этого, Администрация не несет никакой ответственности за доступность этих ресурсов и за их контент. Это заявление относится ко всем ссылкам, представленным на https://blagin.ru и его поддоменах, и материалам всех веб-сайтов, доступных через баннеры и ссылки на веб-сайте по адресу https://blagin.ru.
7. В обязанности Администрации не входит контроль легальности передаваемой информации (любой, включая, но не ограничиваясь, информацией, передаваемой между пользователями, внутренней пересылки в виде различных ссылок, текстов или архивов), определение прав собственности или законности передачи, приема или использования этой информации.
8. Администрация принимает разумные меры для обеспечения точности, актуальности и правомерности информации, размещенной на https://blagin.ru и его поддоменах, но она не принимает на себя ответственности за действия лиц или организаций, прямо или иным образом осуществленные на основании информации, имеющейся на https://blagin.ru и его поддоменах или полученной через него, как предоставленной Администрацией, так и третьими лицами.
9. В соответствии с действующим законодательством, Администрация отказывается от каких-либо заверений и гарантий, предоставление которых может иным образом подразумеваться, и ответственности в отношении https://blagin.ru и его поддоменах, Сервисов и их использования. Ни при каких обстоятельствах Администрация не будет нести ответственности ни перед какой стороной за какой-либо прямой, непрямой, особый или иной косвенный ущерб в результате любого использования информации на этом сайте или на любом другом сайте, на который имеется гиперссылка с https://blagin.ru и его поддоменах, возникновение зависимости, снижения продуктивности, увольнения или прерывания трудовой активности, а равно и отчисления из учебных учреждений, за любую упущенную выгоду, приостановку хозяйственной деятельности, потерю программ или данных в ваших информационных системах или иным образом, возникшие в связи с доступом, использованием или невозможностью использования https://blagin.ru и его поддоменов, Сервисов или какого-либо связанного интернет-сайта, или неработоспособностью, ошибкой, упущением, перебоем, дефектом, простоем в работе или задержкой в передаче, компьютерным вирусом или системным сбоем, даже если администрация будет явно поставлена в известность о возможности такого ущерба.
10. За рекламу, размещаемую на https://blagin.ru и его поддоменах, несет ответственность лишь рекламодатель. Сайт особо уведомляет о том, что не гарантирует возможность приобретения или использования тех или иных товаров или услуг по ценам и/или на условиях, указываемых в рекламных блоках (текстах, баннерах). Вы соглашаетесь с тем, что https://blagin.ru не несет никакой ответственности за возможные последствия (включая любой ущерб), возникшие в результате каких-либо отношений с рекламодателями.
11. На https://blagin.ru и его поддоменах предусмотрена возможность отправки пользователями вопросов, замечаний, предложений и другой информации с целью включения её в соответствующие разделы, которые могут и будут использоваться другими его посетителями. https://blagin.ru не несет никакой ответственности ни за содержание и точность этой информации, ни за любые рекомендации или мнения, которые могут в ней содержаться, ни за применимость её к конкретным пользователям. Кроме того, поскольку интернет не обеспечивает в полной мере надежной защиты информации, Сайт не несет ответственности за информацию, присылаемую через интернет.
12. Высылая материалы, отправляющая сторона гарантирует и подтверждает, что она обладает авторскими правами на эти материалы, получила разрешение на публикацию от обладателя авторских прав, или что эти материалы являются общественным достоянием и размещаются в соответствии с законодательством или требованиями первоисточника. Отправляющая сторона также гарантирует и подтверждает, что получатель имеет полное и неограниченное право отправки данных материалов, и такая отправка не ущемляет ничьих прав и законных интересов.
13. https://blagin.ru может использовать идентификационные файлы cookies для хранения как вашей личной, так и общей информации. «Cookies» представляют собой небольшие текстовые файлы, которые могут использоваться интернет-сайтом для опознавания повторных посетителей, упрощения доступа и использования посетителем сайта, а также отслеживания сайтом обращений посетителей и сбора общей информации для улучшения содержания. Пользуясь https://blagin.ru и его поддоменами, вы выражаете свое согласие на использование https://blagin.ru cookies.
14. Администрация оставляет за собой право вносить изменения без уведомления о них пользователей. Также Администрация не несет ответственности за изменение, редактирование или удаление любой информации, добавленной вами на https://blagin.ru или другие связанные с ним проекты.
15. Администрация вправе отказать в доступе к https://blagin.ru и его поддоменам любому Пользователю, или группе Пользователей без объяснения причин своих действий и предварительного уведомления.
16. Администрация вправе изменять либо удалять ссылки на информацию, графические, звуковые и прочие данные, размещенные Пользователями на https://blagin.ru и его поддоменах, без предварительного уведомления и объяснения причин своих действий.
17. Любые торговые марки, знаки и названия товаров, служб и организаций, права на дизайн, авторские и смежные права, которые упоминаются, используются или цитируются на страницах https://blagin.ru и его поддоменах, принадлежат их законным владельцам и их использование здесь не дает вам право на любое другое использование. Если не указано иное, страницы https://blagin.ru никак не связаны с правообладателями, и никто, кроме правообладателя, не может распоряжаться правами на использование материалов, защищенных авторским правом. Вы несете ответственность за использование этих и подобных материалов.
18. Чтение, распространение или изменение информации, размещённой на данном сайте, может являться нарушением законов той страны, в которой вы просматриваете этот сайт.
19. Пользователь соглашается с тем, что все возможные споры будут разрешаться по нормам российского права.
20. Бездействие со стороны Администрации в случае нарушения Пользователем либо группой Пользователей пользовательского соглашения не лишает Администрации права предпринять соответствующие действия в защиту интересов https://blagin.ru позднее.
21. Все права на материалы, находящиеся на https://blagin.ru и его поддоменах, охраняются в соответствии с законодательством ЕС и РФ, в том числе, об авторском праве и смежных правах.
22. Если в соответствии с действующими законами какие-либо условия будут признаны недействительными, остальные условия остаются в полной силе.
23. Все заявления о получении прибыли или дохода, а также примеры получения прибыли или дохода, которые могут быть размещены на сайте https://blagin.ru и его поддоменах, являются только прогностической оценкой возможного заработка и не гарантируют его получение. При указании конкретной величины дохода отдельных лиц или видов бизнеса не гарантируется получение вами аналогичного дохода. Считая предполагаемую прибыль гарантированной, вы принимаете на себя риск ее неполучения. Любые заявления, размещенные на этом сайте, касающиеся возможного получения прибыли, не считаются средней величиной заработка. Гарантии того, что какие-либо предшествующие успехи или результаты деятельности, касающиеся получения доходов, могут использоваться в качестве указания на последующие финансовые результаты, отсутствуют. Величина дохода и его денежное выражение базируются на многих факторах. Администрация не располагает информацией об успешности вашей деятельности в будущем и не гарантируем вытекающей отсюда вероятности получения каких-либо больших, малых или вообще каких-либо денежных сумм. Администрация не гарантируем получение вами аналогичных сумм. Ведение деловой деятельности в сети Интернет и связанное с ней получение прибыли сопряжены с неопределенными рисками. Решение о занятии подобными видами деятельности не может основываться на какой-либо информации, размещенной на этом сайте https://blagin.ru и его поддоменах, касающейся предоставляемых услуг должно приниматься исключительно с учетом возможных значительных убытков или неполучения прибыли.
Используя https://blagin.ru и его поддомены, вы выражаете свое согласие с «Отказом от ответственности» и установленными Правилами и принимаете всю ответственность, которая может быть на вас возложена.
Администрация https://blagin.ru в любое время вправе внести изменения в Правила, которые вступают в силу немедленно. Продолжение пользования сайтом после внесения изменений означает ваше автоматическое согласие на соблюдением новых правил.
Пользовательно соглашается с тем, что ознакомлен с отказом от ответственности