Перейти к содержимому

Программное нажатие кнопки

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

Передача файлов с помощью TransmitFile

Передача файлов с помощью TransmitFile. Функция TransmitFile служит для быстрой передачи данных из файлов, благодаря тому, что она работает в режиме ядра(kernel mode), и не происходят частые переключения между режимами. Данная функция это дополнение к WinSock, то есть если Вы пишите программу для Win32 и после хотите перенести код на Unix-системы, то придется значительно изменять код.

Подробнее »Передача файлов с помощью TransmitFile

Перечисление элементов реестра используя API

Перечисление элементов реестра используя API. У меня установлена программа RegCleaner, в которой можно просмотреть элементы автозапуска. Сейчас попытаюсь объяснить, как сделать перечисление значений ключа реестра, для этого существует API функция RegEnumValue.

Подробнее »Перечисление элементов реестра используя API

Удаление системных часов с панели задач

Удаление системных часов с панели задач. Однажды мне понадобилось удалить часы с панели задач, так как у меня есть своя программа показывающая время. Максимум чего смог добиться, просто скрыть их, но оставалось пустое место, что выглядело не очень красиво. После обнаружил очень интересную вещь, если вызвать Shell_NotifyIcon(NIM_DELETE,&nid); то пустое место исчезает.

Подробнее »Удаление системных часов с панели задач

Поиск файлов в текущей директории

Иногда бывают ситуации, когда необходимо произвести поиск файлов в текущей директории, то есть в папке, из которой был произведен запуск программы. Чтобы начать поиск необходима 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. Версия для обучения программированию1С:Предприятие 8.2. Версия для обучения программированию1С:Предприятие 8.2. Версия для обучения программированию
1С:Предприятие 8.2. Версия для обучения программированию1С:Предприятие 8.2. Версия для обучения программированию1С:Предприятие 8.2. Версия для обучения программированию

В состав продукта входит:
Книги:
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 кода, хотя данные были проверены несколько раз и вводились крайне внимательно!
Регистрация пользователя на сайте по PIN-коду
Потратив немного времени, все-таки после нескольких попыток мне удалось зарегистрироваться и благополучно получить свой пароль для доступа в личный кабинет. Главное что меня интересовало в это кабинете так это страница Порядок получения обновлений с пользовательского сайта «1С:Предприятия 8» где довольно подробно и с картинками было описан метод обновления.
После распаковки коробки и регистрации на сайте, пробуем установить учебную версию 1С, запускаем autorun.exe, появляется первоначальное окно запуска:
Первоначальное окно запуска 1C
Выбираем автоматическую установку и далее программа установки сама все устанавливает без нашего вмешательства в процесс, в конце установки выводится окно запуска учебной версии 1С:Предприятия
Первоначальное окно запуска 1C
Далее устанавливаем приложение к книге «1С:Предприятие 8.2 Практическое пособие разработчика. Примеры и типовые приемы», процесс не сложный и быстрый. В описании к поставке хорошо описано, что собой представляет данный комплект. Теперь можно смело приступать к изучению 1С.