Разное

Работа с windows api visual: Пошаговое руководство. создание традиционного классического приложения Windows (C++)

Содержание

Win32 API. Эффективная разработка приложений :: Федеральный образовательный портал

Опубликовано на портале: 08-09-2006

Санкт-Петербург: Питер, 2006, 576 с.

Тематический раздел:

В этой книге изложены основополагающие принципы программирования для Windows на языке
C/C++ с применением Win32 API. Книга ориентирована на широкий круг читателей: от
начинающих программистов, студентов вузов, аспирантов и преподавателей до профессионалов
в области программирования, желающих освоить специальные средства Win32 API. Практика
показывает, что те программисты, которые начинают осваивать программирование для
Windows сразу на уровне MFC или Windows Forms, не имея никакого опыта работы с Win32
API, сталкиваются с серьезными проблемами, как только дело доходит до создания реальных
приложений. Напротив, опыт программирования с Win32 API позволяет осваивать более
высокие технологии гораздо гармоничней и продуктивней. Владение базовыми знаниями
Win32 API является надежной основой для вашего профессионального роста в сфере программирования.


Предисловие

Кому адресована эта книга

Как работать с книгой

Благодарности

От издательства

Глава 1. «Hello, World!», или Первые шаги к пониманию основных концепций Windows

  • Базовые концепции
  • Графический интерфейс пользователя
  • Многозадачность
  • Управление памятью
  • Независимость от аппаратных средств
  • Вызовы функций и DLL
  • Объектно-ориентированное программирование
  • Типы данных Win32
  • Архитектура, управляемая событиями
  • Оконная процедура
  • Оконные классы
  • Цикл обработки сообщений
  • Наипростейшая программа для Windows
  • Программа «Hello, world!» — первый вариант
  • Файл исходного текста программы
  • Регистрация класса окна
  • Создание окна
  • Использование функции CreateWindowEx
  • Отображение окна на экране
  • Обработка сообщений
  • Оконная процедура
  • Программа «Hello, world!» — второй вариант
  • Функции поддержки окон
  • Часто используемые сообщения
  • Модификация характеристик окна
  • Особенности программирования для Windows
  • Синхронные и асинхронные сообщения
  • Посылка сообщений из приложения
  • Использование глобальных или статических переменных
  • Получение дескриптора экземпляра приложения
  • Предотвращение зависания приложения
    в случае медленной обработки отдельных событий
  • Использование утилиты Spy++

Глава 2. GDI — графический интерфейс устройства. Рисование линий, фигур, текст

  • Контекст устройства
  • Типы контекстов устройства
  • Регионы Windows. Отсечение
  • Контекст дисплея
  • Использование сообщения WM_PAINT
  • Контекст принтера
  • Контекст в памяти (совместимый контекст)
  • Метафайловый контекст
  • Информационный контекст
  • Системы координат и преобразования
  • Экранные, оконные и клиентские координаты
  • Типы координатных систем
  • Физическая система координат
  • Система координат устройства
  • Страничная система координат и режимы отображения
  • Мировая система координат
  • Получение информации о возможностях устройства
  • Управление цветом. Вывод пиксела
  • Цветовое пространство HLS
  • Цветовое пространство RGB
  • Определение цвета при работе с палитрой
  • Вывод пикселов
  • Атрибуты контекста устройства, влияющие на рисование
  • Режим рисования. Бинарные растровые операции
  • Режим смешивания фона и цвет фона графического элемента
  • Общие операции с графическими объектами
  • Линии и кривые
  • Рисование отрезков
  • Дуги
  • Кривые Безье
  • Перья
  • Стандартные перья
  • Простые перья
  • Расширенные перья
  • Кисти
  • Стандартные кисти
  • Пользовательские кисти
  • Замкнутые фигуры
  • Прямоугольники
  • Эллипсы, сегменты, секторы и закругленные прямоугольники
  • Многоугольники
  • Регионы и отсечение
  • Создание регионов
  • Операции с объектами регионов
  • Прорисовка регионов
  • Отсечение
  • Отображение текста
  • Наборы символов и кодировки
  • Unicode
  • Шрифты
  • Вывод текста
  • Полосы прокрутки и вывод текста
  • Примеры программ
  • Просмотрщик текстовых файлов
  • Вывод временной диаграммы
    напряжения переменного электрического тока

Глава 3. GDI. Палитры, растры, метафайлы

  • Палитры
  • Основные принципы управления палитрами
  • Системная палитра
  • Логическая палитра
  • Растры
  • Аппаратно-независимые растры
  • Аппаратно-зависимые растры
  • DIB-секции
  • Тернарные растровые операции
  • Метафайлы
  • Создание метафайла
  • Воспроизведение метафайла

Глава 4. Средства ввода

  • Клавиатура
  • Фокус ввода
  • Клавиши и символы
  • Аппаратные сообщения
  • Символьные сообщения
  • Работа с кареткой
  • Примитивный текстовый редактор
  • Мышь
  • Терминология, связанная с мышью
  • Сообщения мыши
  • Обработка двойного щелчка
  • Обработка сообщений от колеса мыши
  • Рисуем мышью
  • Эластичные прямоугольники
  • Улучшенное приложение для просмотра текстовых файлов

Глава 5. Ресурсы Windows-приложения

  • Редакторы ресурсов
  • Пиктограммы
  • Создание пиктограммы с помощью графического редактора
  • Импорт существующей пиктограммы
  • Просмотр и редактирование ресурсов приложения
  • Использование ресурса в приложении
  • Курсоры
  • Растровые образы
  • Ресурсы, определяемые программистом
  • Доступ к данным в ресурсе
  • Воспроизведение звуковых файлов
  • Таблицы строк

Глава 6. Меню и быстрые клавиши

  • Организация и виды меню
  • Типы пунктов меню
  • Системное меню
  • Клавиатурный интерфейс меню
  • Статус пунктов меню
  • Отметка пунктов меню
  • Пункт меню, применяемый по умолчанию
  • Определение меню в виде ресурса
  • Шаблон меню
  • Вызов редактора меню
  • Атрибуты пункта меню
  • Уровни меню
  • Процедура определения пункта для меню i-го уровня
  • Процедура определения меню нулевого уровня
  • Добавление меню к окну приложения
  • Внесение изменений в меню
  • Функция CheckMenuItem
  • Функция CheckMenuRadioItem
  • Функция EnableMenuItem
  • Функция ModifyMenu
  • Функции для получения дескриптора меню
  • Сообщения меню
  • Приложение MenuDemo1
  • Работа с контекстным меню
  • Определение шаблона контекстного меню
  • Загрузка меню
  • Вызов меню
  • Приложение MenuDemo2
  • Быстрые клавиши
  • Модификация определения ресурса меню
  • Таблица быстрых клавиш
  • Загрузка таблицы быстрых клавиш
  • Модификация цикла обработки сообщений
  • Приложение MenuDemo3

Глава 7. Диалоговые окна

  • Типы диалоговых окон
  • Элементы управления в диалоговом окне
  • Создание и обработка диалогового окна
  • Шаблон диалогового окна309
  • Шаблонная система единиц
  • Модальный диалог
  • Вызов и использование редактора диалоговых окон
  • Добавление элемента управления Рисунок
  • Добавление элементов управления Надпись
  • Выравнивание элементов управления на форме диалога
  • Определение диалоговой процедуры и вызов диалога
  • Изменение атрибутов элемента управления
  • Использование других элементов управления
  • Кнопки
  • Кнопка Owner draw
  • Флажки
  • Переключатели
  • Групповая рамка
  • Пример использования групповой рамки, флажков и переключателей
  • Клавиатурный интерфейс и порядок обхода элементов управления
  • Окно редактирования
  • Список
  • Комбинированный список
  • Немодальный диалог
  • Различия между модальными и немодальными окнами диалога
  • Пример использования немодального окна диалога
  • Окно сообщений
  • Диалоговые окна общего пользования

Глава 8. Элементы управления общего пользования

  • Основы применения
  • Инициализация библиотеки
  • Создание элементов управления общего пользования
  • Стили элементов управления общего пользования
  • Обмен сообщениями
  • Элементы управления главного окна
  • Панель инструментов
  • Окно подсказки
  • Замена класса KWnd на класс KWndEx
  • Строка состояния
  • Другие элементы управления
  • Индикатор процесса
  • Регулятор
  • Счетчик и поле с прокруткой
  • Создание счетчика

Глава 9. Многозадачность

  • Объекты ядра
  • Процессы и потоки
  • Планирование потоков
  • Классы приоритетов процесса и приоритеты потоков
  • Управление процессами
  • Использование функции CreateProcess
  • Завершение процесса
  • Запуск обособленных дочерних процессов
  • Управление потоками
  • Функция CreateThread
  • Функция Sleep
  • Пример многопоточного приложения
  • Взаимодействие потоков через глобальную переменную
  • Синхронизация
  • Атомарный доступ и семейство Interlocked-функций
  • Критические секции
  • Wait-функции
  • События
  • Семафоры
  • Мьютексы
  • Обмен данными между процессами
  • Виртуальная память. Адресное пространство процесса
  • Файлы данных, проецируемые в память
  • Использование проекции файла для реализации разделяемой памяти
  • Модель «клиент-сервер»
  • Обмен данными с помощью сообщения WM_COPYDATA
  • Приложение ServerApp
  • Приложение ClientApp
  • Когда многопоточность реально полезна?

Глава 10. Таймеры и время

  • Время Windows
  • Системное время
  • Измерение малых временных интервалов
  • Использование счетчика монитора производительности
  • Использование команды RDTSC
  • Программирование задержек в исполнении кода
  • Использование функции Sleep
  • Использование метода uDelay класса KTimer
  • Класс QTimer
  • Стандартный таймер
  • Первый способ использования стандартных таймеров
  • Второй способ использования стандартных таймеров
  • Мультимедийный таймер
  • Функции timeSetEvent и timeKillEvent
  • Тестирование мультимедийного таймера

Глава 11. Специальные приложения

  • Анимация
  • Приложение со стандартным таймером
  • Двойная буферизация
  • Рисование в реальном времени
  • Требования к приемнику информации от метеорадиолокатора
  • Разработка модели программного имитатора

Приложение 1. Интегрированная среда Visual C++ 6.0

  • Запуск IDE. Типы приложений
  • Создание нового проекта
  • Добавление к проекту файлов с исходным кодом
  • Многофайловые проекты
  • Компиляция, компоновка и выполнение проекта
  • Конфигурация проекта
  • Как закончить работу над проектом
  • Как открыть проект,
    над которым вы ранее работали
  • Встроенная справочная система
  • Работа с отладчиком
  • Некоторые полезные инструменты

Приложение 2. Интегрированная среда Visual Studio.NET

  • Создание нового проекта
  • Добавление к проекту нового файла
  • Компиляция, сборка и выполнение
  • Работа с редакторами ресурсов

Приложение 3. Работа с утилитой Spy++

Список литературы

Алфавитный указатель

Ключевые слова

См. также:

Jeff Cogswell, Jonathan Turkanis, Christopher Diggins, Ryan Stephens

[Книга]

Как я могу узнать о Win32 API?

Я хочу научиться использовать Win32 API, так как в последнее время у меня есть много задач , которые мне нужно выполнить, которые требуют функций от user32.dll, поэтому я пытаюсь учиться и гуглю, но дело в том, что каждый учебник об этом просто рассказывает вам, как сделать определенную вещь. например, показать MessageBox через Win32 API, но на самом деле вы не можете изучить Win32 framework.

Так как же вы на самом деле этому учитесь? Откуда вы знаете все функции? с управляемыми библиотеками это довольно просто, особенно с Visual Studio, который предоставляет IntelliSense, Обозреватель объектов и т. д., Но Win32 API настолько запутан (по крайней мере, с точки зрения разработчика C#).

До сих пор я просто искал в Google задачу и видел, что это можно сделать с помощью Win32 API (я понятия не имел), просто копировал функцию и использовал ее (и это ужасно для меня, я чувствую, что мне не хватает много «power»).

Итак, как я могу этому научиться?

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

Спасибо вам всем.

c#

windows

winapi

Поделиться

Источник


MasterMastic    

07 апреля 2012 в 12:53

5 ответов


  • Win32 API аналог отправки / перехвата SIGTERM

    Под ОС POSIX есть сигнал API, который позволяет отправить сигнал процессу, чтобы закрыть его с помощью kill, и вы можете поймать его с помощью sigaction и сделать то, что вам нужно; Однако Win32-это не система POSIX, так что: Как я могу обрабатывать события завершения работы, которые могут прийти,…

  • Очистить RAM (может быть, win32 api)?

    Время от времени я вижу программы Speed Up Your PC, которые предлагают функцию очистки RAM. Они утверждают, что дефрагментируют и освобождают неиспользуемую память, как сборщик мусора или что-то в этом роде… не уверен. Вот несколько примеров:…



8

Из MSDN вы можете найти список WinAPI:
Ниже приведен список справочного содержимого для интерфейса прикладного программирования Windows (API).
http://msdn.microsoft.com/en-us/ library/ff818516(v=vs.85).aspx

Вы можете узнать некоторые вещи с помощью функций Visual Basic Win API. Примеры очень легко следовать и понимать. Затем вы можете перевести код в C#.

Существует 598 функций Visual Basic Windows API в 55 категориях
http://www.ex-designz.net/api.asp

Поделиться


Carlos Quintanilla    

07 апреля 2012 в 13:04



3

Во-первых, Win32-это набор подсистем. Возможно, вы не сможете выучить их все легко. Вам просто нужно расставить приоритеты.

Но тогда, чтобы иметь возможность сказать, что вы хотели бы узнать, вам, вероятно, нужна большая картина. Я считаю, что лучший способ приблизиться к Win32-это через «Programming Windows» Чарльза Петцольда. Это очень ясно читается и легко понять. Есть много примеров, которые вы можете подобрать и поэкспериментировать самостоятельно.

После того, как вы изучите основные вещи, я рекомендую «Microsoft Windows Internals» Марка Русиновича. Он довольно продвинутый,но позволяет вам понять, что находится внутри ядра Windows.

Поделиться


Wiktor Zychla    

07 апреля 2012 в 13:00



3

Я лично считаю, что вы должны начать с вызова Win32 DLLs в C# с помощью P/Invoke

Это даст вам большую часть базовых знаний, которые вам нужно знать о WINAPI, использующем pinvoke в c#. у меня также была автономная версия функций WINAPI, предоставляемых MSDN, но я не могу вспомнить, откуда я ее скачал.

Наконец, получите в свои руки какой-нибудь простой для понимания код WINAPI, для этого есть http://mwinapi.sourceforge.net/ .

EDIT: вы можете скачать автономную версию документации с phatocde .

Поделиться


Chibueze Opata    

07 апреля 2012 в 16:10


  • Как я могу узнать тип данных в ответе graph API?

    Я новичок в графе API. Для моего приложения я должен использовать много графиков API одновременно. Мой вопрос таков… как я могу узнать тип данных ответа? => Как я могу узнать ответ, что это данные друзей? ex) для данных о друзьях. В ответных данных я не могу найти имя данных для друга.(==как имя…

  • Как я могу узнать, принадлежит ли окно моей программе? Использование только win32

    Как я могу узнать, принадлежит ли окно моей программе? Я думаю, что могу использовать дескриптор окна, чтобы получить имя исполняемого файла, но это кажется большой работой, и мне приходится делать это неоднократно, поэтому я думаю, что это может быть проблема с производительностью. Есть ли…


Поделиться


Min Min    

07 апреля 2012 в 13:02



1

Взгляните также на учебник по программированию theForger Win32 API, который:

попытки заставить вас начать развиваться с Win32 API как можно быстрее и яснее».

Поделиться


Bill    

08 апреля 2012 в 07:21


Похожие вопросы:

Как узнать информацию о звонящем?

Это потребует некоторого фона. Я использую обходные пути для перехвата системных вызовов. Для тех, кто не знает, что такое объезд — это инструмент, который перенаправляет вызов системных функций на…

Неуправляемый C++ Win32 API или C#?

Добрый день, Я думал о написании приложения, которое я могу или не могу коммерциализировать, в зависимости от того, насколько хороша конечная заявка. Это как личный проект, с помощью которого я…

Как узнать о результатах работы с компонентом COM?

Я полагаю, что этот вопрос более общий, чем работа с компонентами COM. У меня есть клиент .NET, написанный на C#, и компонент COM, написанный на чистом Win32 API. Клиентская сторона использует этот…

Win32 API аналог отправки / перехвата SIGTERM

Под ОС POSIX есть сигнал API, который позволяет отправить сигнал процессу, чтобы закрыть его с помощью kill, и вы можете поймать его с помощью sigaction и сделать то, что вам нужно; Однако Win32-это…

Очистить RAM (может быть, win32 api)?

Время от времени я вижу программы Speed Up Your PC, которые предлагают функцию очистки RAM. Они утверждают, что дефрагментируют и освобождают неиспользуемую память, как сборщик мусора или что-то в…

Как я могу узнать тип данных в ответе graph API?

Я новичок в графе API. Для моего приложения я должен использовать много графиков API одновременно. Мой вопрос таков… как я могу узнать тип данных ответа? => Как я могу узнать ответ, что это данные…

Как я могу узнать, принадлежит ли окно моей программе? Использование только win32

Как я могу узнать, принадлежит ли окно моей программе? Я думаю, что могу использовать дескриптор окна, чтобы получить имя исполняемого файла, но это кажется большой работой, и мне приходится делать…

как узнать, заблокирована ли панель задач или нет с помощью win32 API

Я хотел бы узнать, заблокирована ли панель задач в системе с помощью win32 API. Как я могу это сделать ?

Где я могу найти информацию о написании OLE серверов, использующих только Win32 API, а не MFC?

У меня есть приложение GUI, которое написано в C и C++ обертке Win32 API. Я должен преобразовать это в сервер OLE. Я знаю, какие изменения в дизайне должны быть сделаны или выясню это. Я хочу узнать…

Могу ли я выучить Win32 API без C++ (только с C)?

Прости, что задал странный вопрос по этому поводу. Я погуглил и посмотрел сюда в поисках решения, но ни один из ответов не удовлетворяет тому, что я на самом деле хочу. Я действительно запутался в…

Учимся работать с файлами через Windows API

Из предыдущих постов, посвященных WinAPI, мы научились настраивать Visual Studio и узнали, как в нем писать простые консольные приложения. Следующим маленьким шажком в изучении WinAPI будет освоение работы с файлами.

Для этого нелегкого дела нам понадобятся следующие процедуры:

CreateFile(szName, dwAccess, dwShareMode, lpSecurityAttributes,
           dwCreationDisposition, dwFlags, hTemplateFile);

В Windows для того, чтобы открыть или создать файл, нужно вызвать процедуру, имеющую целых семь аргументов. К счастью, большинство из них приходится использовать крайне редко. Аргумент szName задает имя файла, а dwAccess — желаемый доступ к файлу, обычно это GENERIC_READ, GENERIC_WRITE или оба значения, объединенные логическим или. Параметр dwShareMode определяет, что могут делать с файлом другие процессы, пока мы с ним работаем. Возможные значения — FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_SHARE_DELETE и их комбинации, однако часто этот параметр просто устанавливают в ноль. Параметр dwCreationDisposition определяет, как именно мы хотим открыть файл, может быть, например, CREATE_NEW, CREATE_ALWAYS, OPEN_EXISTING, OPEN_ALWAYS. О семантике этого хозяйства нетрудно догадаться самостоятельно. С помощью dwFlags можно указать дополнительные свойства файла, например, хранить ли его в зашифрованном или сжатом виде, или сказать, что файл является скрытым, временным или системным. Обычно сюда передают FILE_ATTRIBUTE_NORMAL. Наконец, про lpSecurityAttributes и hTemplateFile сейчас знать не нужно, сюда можно смело передавать NULL.

В случае успешного создания или открытия файла, процедура CreateFile возвращает его хэндл. В случае ошибки возвращается специальное значение INVALID_HANDLE_VALUE. Узнать подробности об ошибке можно с помощью GetLastError.

ReadFile(hFile, lpBuff, dwBuffSize, &dwCount, NULL);

Чтение из файла в буфер lpBuff размером dwBuffSize. В переменную dwCount записывается реальное количество прочитанных байт. Последний опциональный аргумент называется lpOverlapped и о нем сейчас знать не нужно.

WriteFile(hFile, lpBuff, dwBuffSize, &dwCount, NULL);

Аргументы и семантика процедуры WriteFile полностью аналогичны ReadFile.

Файловые дескрипторы закрываются с помощью CloseHandle. На самом деле, эта процедура используется не только для работы с файлами, так что мы еще не единожды с нею встретимся.

Посмотрим теперь на все это хозяйство в действии. Следующая программа пишет в файл counter.dat количество собственных запусков. Первые пять запусков ничем не примечательны. На шестой и последующие запуски программа сообщает, что у нее истек триал и просит приобрести полную версию.

#include <windows.h>

#define MAX_TRIAL_RUNS 5

const TCHAR szCounterFileName[] = L»counter.dat»;
const TCHAR szMsgTmpl[] = L»Вы запустили программу в %d-й раз. %s.»;
const TCHAR szCheckOk[] = L»Все в порядке, продолжайте работу»;
const TCHAR szCheckFailed[] = L»Триал истек, купите полную версию»;

DWORD ReadCounter() {
  DWORD dwCounter, dwTemp;
  HANDLE hFile = CreateFile(szCounterFileName, GENERIC_READ, 0, NULL,
                           OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  if(INVALID_HANDLE_VALUE == hFile) {
    return 1;
  }
  ReadFile(hFile, &dwCounter, sizeof(dwCounter), &dwTemp, NULL);
  if(sizeof(dwCounter) != dwTemp) {
    CloseHandle(hFile);
    return 1;
  }
  CloseHandle(hFile);
  return dwCounter;
}

VOID WriteCounter(DWORD dwCounter) {
  DWORD dwTemp;
  HANDLE hFile = CreateFile(szCounterFileName, GENERIC_WRITE, 0, NULL,
                           CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
  if(INVALID_HANDLE_VALUE == hFile) {
    return;
  }
  WriteFile(hFile, &dwCounter, sizeof(dwCounter), &dwTemp, NULL);
  CloseHandle(hFile);
}

int main() {
  TCHAR szMsg[256];
  DWORD dwCounter = ReadCounter();
  LPCWSTR lpCheckResult = dwCounter > MAX_TRIAL_RUNS ?
                          szCheckFailed : szCheckOk;
  wsprintf(szMsg, szMsgTmpl, dwCounter, lpCheckResult);
  MessageBox(0, szMsg, L»Сообщение», 0);

  if(dwCounter <= MAX_TRIAL_RUNS) {
    WriteCounter(dwCounter+1);
  }

  ExitProcess(0);
}

Как обычно, программа также успешно компилируется при помощи MinGW и запускается под Wine.

В качестве домашнего задания можете попробовать модифицировать программу так, чтобы она выводила время, когда производились все ее запуски. Для этого вам понадобятся процедуры GetLocalTime, SetFilePointer и GetFileSizeEx. Если это задание покажется вам слишком простым, попробуйте найти информацию о том, как при помощи процедур, упомянутых в этой заметке, (1) написать консольное приложение и (2) открыть диск C: на чтение, словно он является обычным файлом.

Если у вас есть дополнения или возникли вопросы, смелее пишите комментарии, не стесняйтесь!

Дополнение: Рекурсивный поиск файлов с использованием WinAPI

Метки: C/C++, WinAPI.

Win API — CyberGuru.ru — все об IT и программировании

Win32 API. Быстрые клавиши

В Microsoft Windows, ускоритель клавиатуры (keyboard accelerator) (или, просто, акселератор) — это нажатие клавиши или комбинация нажатий клавиш, которые генерирует для прикладной программы сообщение WM_COMMAND или WM_SYSCOMMAND.

Win32 API. Пиктограммы

Пиктограмма (icon) – это рисунок, который состоит из растрового изображения, объединенного с маской, которая создает прозрачные области на рисунке. Этот краткий обзор описывает создание, показ на экране, разрушение и дублирование пиктограмм. Windows использует пиктограммы повсюду в интерфейсе пользователя, чтобы представить объекты, такие как файлы, папки, ярлыки, прикладные программы и документы. Функции пиктограммы в Microsoft Win32 прикладном программном интерфейсе (API) дают возможность приложениям создавать, загружать, показывать на экране, упорядочивать и уничтожить пиктограммы.

Win32 API. Функции окна

Следующие функции используются для создания и управления окнами.

Win32 API. Окна

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

Win32 API. Меню

Меню (menu) состоит из перечня пунктов меню (menu items). Выбор пункта меню открывает подменю или принуждает прикладную программу выполнить команду. Этот краткий обзор описывает меню и объясняет, как использовать их в прикладных программах, разработанных при помощи Microsoft Win32 прикладного программного интерфейса (API).

Win32 API. Курсоры

Windows предоставляет набор стандартных курсоров, которые являются доступными для любой прикладной программы, чтобы использовать в любое время. Заголовочные файлы Windows содержат идентификаторы для стандартных курсоров — идентификаторы начинаются с префикса «IDC_«. Каждый стандартный курсор имеет соответствующее заданное по умолчанию изображение, связанное с ним. Пользователь или прикладная программа могут заменять заданное по умолчанию изображение, связанное с любым стандартным курсором в любое время. Прикладная программа заменяет заданное по умолчанию изображение, используя функцию SetSystemCursor.

Win32 API. Работа с клавиатурой

Этот беглый обзор рассматривает, как Windows создает вводимую информацию с клавиатуры и как прикладная программа принимает и обрабатывает эту вводимую информацию.

Win32 API. Каретки

Каретка — мерцающая линия, блок или точечный рисунок в рабочей области окна. Каретка обычно указывает место, куда будет вставлен текст или графика. Следующая иллюстрация показывает некоторые общие вариации в изображении каретки. Поскольку только одно окно одновременно может иметь фокус клавиатуры или быть активным, имеется только одна каретка в системе. Вообще, каждое окно, которое принимает ввод с клавиатуры, должно создать каретку, когда оно принимает фокус клавиатуры и уничтожать каретку, когда оно теряет фокус клавиатуры.  Прикладная программа, написанная для Microsoft Windows может создавать каретку, показывать или скрывать её, перемещать каретку и изменять частоту мерцания.

Win32 API. Диалоговые окна

В Microsoft Windows, диалоговое окно (dialog box) — временное окно, которое создает прикладная программа, чтобы получить данные, вводимые пользователем. Прикладная программа обычно использует диалоговые окна, чтобы запросить пользователя о дополнительной информации для команд. Диалоговое окно обычно содержит один или большее количество элементов управления (дочерние окна), с помощью которых пользователь вводит текст, выбирает параметры, или управляет действием команды.

Win32 API. Буфер обмена

Буфер обмена (clipboard)- набор функций и сообщений, который делает возможным передачу данных в прикладные программы, разработанные при помощи Microsoft Win32 прикладного программного интерфейса (API). Поскольку все прикладные программы имеют доступ к буферу обмена, данные могут быть легко перемещаемы между приложениями или внутри прикладной программы.

Win32 API. Hooks (хуки)

Hook — это некоторая точка в Microsoft Windows механизме обработки сообщений, где приложение может подключить подпрограмму для наблюдения за потоком сообщений в системе и обработки сообщений некоторых типов до того, как они попадут в целевую оконную процедуру. Этот краткий обзор описывает Windows hook-точки и объясняет, как использовать их в базирующейся на Win32 прикладной программе.

Win32 API. Библиотека стандартных диалоговых окон

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

Процессы в Windows

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

Написание экстра-маленьких Win32 приложений на С++ от 1 КБ

Натыкаясь в Интернете на довольно интересные программы, я часто не решался их закачивать после того, как узнавал их размер. Какую ни возьми — все огромные. Да и ресурсов системных потребляют немало. В этой статье я расскажу о том, как сделать программу в среднем в 10 — 100 раз меньше размером, чем попадаются аналогичные.

Win32 API FAQ

Часто задаваемые вопросы по Win32 API.

Win32 API. Спpавочник по сообщениям Windows

Каждый из pазделов этого материала описывает, что делает сообщение, какие значения используются для каждого поля сообщения и какие возвpащаемые значения ожидаются или задаются Windows. В конце каждого описания пpиводятся дополнительные комментаpии. wParam и lParam являются обязательными паpаметpами сообщений Windows.

win32 api | ProgBook — книги и учебники по программированию

Данное пособие будет полностью объяснять всю работу и принципы программирования на С++, также поможет каждому разобраться в функциях Win32 API приложений. Этот материал обязан знать каждый новичок, который хочет разбираться в вопросах и задачах программирования. Ведь в этом пособии будут раскрыты важнейшие темы и все нужные базовые понятия.

Первая глава будет одной из важнейших, ведь здесь будет показан весь интерфейс Windows-приложения. Также тут каждый сможет узнать обо всех важнейших базовых функциях. Например, в разделе этого учебника можно будет узнать про исследования каркаса и про стандартные заготовки Windows-приложений. Этот раздел также даст представления о сообщениях мыши, о нажатии клавиш и про обработки сообщений. Каждый новичок сможет узнать в данном разделе этого учебника про системные шрифты, про диалоги с пользователем, а также про все виды интерактивной графики.

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

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

Книга «Технология программирования на C++. Win32 API-приложения» будет также содержать интересные приложения в конце, которые помогут закрепить все знания и получить новую полезную информацию. Не стоит забывать проходить такие же интересные задания после каждого раздела, ведь они будут помогать хорошо закреплять выученный материал и понимать, какие темы нужно перечитать повторно. Самое главное не пренебрегать ими, потому что последующее изучение будет не продуктивно. Зато после прочтения данного учебника и прохождению всех упражнений вы уж точно полностью поймете все основы программирования, и с легкостью будете использовать полученные знания на практике.

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

Книга «Delphi. Профессиональное программирование» предназначена для опытного пользователя персонального компьютера, стремящегося к самостоятельному обучению программированию и разработке приложений и баз данных в среде Delphi, а также для профессиональных программистов, которые могут использовать книгу как справочник. Издание значительно отличается от подобных ему: оно не является ни «полным» руководством по Borland® Delphi™, ни справочником с переводом файлов помощи к среде программирования. Книга уникальна в том смысле, что представляет собой не просто инструмент, а профессиональную методику для разработки эффективных приложений для среды Windows. Автор детально, последовательно и системно излагает концепцию, основные принципы и особенности языка программирования Delphi. Подробно описаны функции Object Pascal и Win32 API, рассмотрено более 80 компонентов VCL. Первая часть книги посвящена изложению основ Delphi; здесь рассматриваются библиотека визуальных компонентов и принципы разработки собственных компонентов, изучаются библиотеки, подключаемые динамически; рассмотрены многопоточные приложения, программирование на Win32 API, технологии СОМ и OLE-automation, особенности построения сетевого ПО, вопросы межпрограммного взаимодействия и другие. Во второй части внимание уделено вопросам проектирования и создания реляционных баз данных. Проанализированы реляционная модель данных и язык SQL, рассмотрены базирующиеся на механизмах BDE, ADO и InterBase компоненты отображения данных и доступа к данным.

В книге «C++ Builder» представлены справочные и методические материалы по работе с различными версиями C++ Builder. Рассмотрены системы визуального объектно-ориентированного программирования C++ Builder, начиная с версии C++Builder 5 и кончая C++Builder 2009. Материал не стоит считать устаревшим и по отношению к более новым версиям. В книге описывается работа с базами данных, построение прикладных программ, методика создания отчетов, клиентов, серверов, распределенных приложений и так далее. Подробно рассмотрены технологии, обеспечивающие доступ к данным BDE, InterBase, ADO (dbGo), dbExpress, методика диспетчеризации действий, технология распределенных приложений COM, DDE, DLL, ActiveX. В справочной части книги можно найти информацию по языку С++, классам и типам C++ Builder, их свойствам, событиям и методам, функциям C++ Builder и API Windows (около 570 функций). Книгу будет полезным справочником как для начинающих программистов, так для квалифицированных разработчиков.

ОС Windows 98 и 2000 перевели на абсолютно новый качественный уровень методологию создания прикладных приложений, выполняемых под управлением вышеуказанных ОС. Несмотря на огромное количество достаточно мощных инструментальных средств создания программ, именно знание интерфейса программирования различных прикладных приложений (АРI) является своеобразным ключом к написанию программ, которые могут занять действительно достойное положение на рынке. Книга «Microsoft Windows 2000 API. Энциклопедия программиста» — это поистине великолепное справочно-учебное пособие по всем свойства АРI, которое может стать настольной книгой для каждого программиста. Исключительная полнота изложения материала, множество удачно подобранных примеров, а также эффективная организация книги делают ее истинной энциклопедией программиста. Отметим, что в книге в деталях рассматриваются вопросы использования ресурсов различных категорий, низкоуровневой обработки сообщений, управления памятью, использования интерфейса графических устройств, ввода/вывода, работы с файлами, системного реестра и т.д. Прилагаемый диск окажет значительную помощь в последующем использовании материала книги. Книга рекомендована для начинающих, профессиональных и опытных программистов.

Книга «C#. Советы программистам» — это своеобразный сборник алгоритмов, советов, примеров программ на C# в MS Visual Studio 2005/2008 из таких сфер, как: работа с формами и компонентами управления, файлами и папками, клавиатурой и мышью, графикой и мультимедиа, применение технологий WSH и WMI, взаимодействие с MS Office и прочими приложениями. В описываемой книге также рассматриваются характерные особенности применения функций Windows API и т.д. На диске, прилыгаемом к книге, Вы найдете примеры из этой книги и демо-версию справочника по сообщениям Windows для C# и Visual Basic .NET, а также основным функциям API для .NET Framework.

Книга «Visual C++ на примерах» полностью посвящена приемам создания приложений в Microsoft Visual Studio 2005. В ней уделено значительное внимание азам языка C++ и основным приемам объектно-ориентированного программирования, характерным особенностям построения различных приложений API Windows и MFC, а также организации ввода-вывода. В описываемой книге рассмотрены:
— Объекты и классы, а также работа с ними.
— Техника работы в области программирования MVC++.
— Композиция, множественное и одиночное наследование. Перегрузка операций и основные шаблоны классов.
— Обработка сообщений в API Windows и MFC.
Следует отметить, что материал сопровождается примерами отлаженных программ и характеризуется систематичностью, строгостью и последовательностью. Данная книга предназначена для новичков в области программирования и может использоваться в качестве справочника для опытных пользователей. Диск, который продается вместе с книжкой, содержит тексты листингов примеров программ, которые приводятся в книге.

Книга посвящена интерфейсам прикладного программирования Windows (Win32 API) при разработке прикладных программных программ с использованием Borland Delphi. Изложены основные принципы работы с API. Рассмотрен ряд интерфейсов API: для работы со средствами коммуникаций (TAPI), с электронной почтой (MAPI), мультимедиа (MMCI), графическим интерфейсом и другие. Наглядные графические примеры помогают в освоении материала. К пособию прилагается компакт-диск, содержащий исходные тексты примеров, программы, нужные библиотеки.

Написанная большой группой американских программистов под руководством Чарли Калверта и Кента Рейсдорфа «Borland C++ Builder 5. Энциклопедия программиста» продолжает серию книг, посвящённых C++ Builder. Основателем серии был Чарли Калвертом, описавший первую версию замечательной системы. Все авторы имели огромный опыт разработки программных продуктов с помощью систем программирования C++ Builder и Delphi, все написали не по одной книге на эту тему, и как говорят сами создатели нетленного произведения «Книга написана опытными программистами для опытных программистов». Поэтому здесь отсутствует описание интегрированной среды разработки (IDE), программных компонентов и других инструментов системы. Но зато обсуждаются самые сложные проблемы программирования с применением Borland C++ Builder 5, чего вы никогда ни встретите у других авторов. На компактном диске представлены примеры программ, здесь вместе с использованием библиотеки VCL встречаются и функции Windows API.

Из книги Р. М. Ганеева «Проектирование интерфейса пользователя средствами Win32 API» пользователь узнает о методических основах проектирования пользовательского интерфейса средствами Win32 API. Главным образом в данном издании рассматривается динамическое проектирование и управление базовыми элементами информационных систем, в частности, окнами, органами управления, меню и диалоговыми панелями. Изложение книги написано просто и понятно с большим количеством примеров программной реализации. К каждому разделу добавлены вопросы и упражнения для самоконтроля. С помощью данной публикации пользователь сможет обучиться методике проектирования продуктивных приложений для Windows. Книга предназначена пользователям, знакомым с основами языка Си и желающим научиться создавать маленькие и скоростные приложения.

В этой книге приведены основные принципы программирования с учетом использования интерфейса Win32 API. В каждой главе помимо теоретических данных приводятся и конкретные примеры с работающими листингами, показывающие практическое применение функций Win32 API. Отдельная глава в книге рассказывает об управлении безопасностью объектов в ОС Windows. Таким образом, эта книга может служить, как источник справочной информации, так и в качестве путеводителя по системному программированию. Благодаря диску, идущему в комплекте с книгой, читатель сможет наглядно увидеть проекты программ и листинги, приведенные в книге. Благодаря этому изданию, вы ознакомитесь с возможностями использования именованных и анонимных каналов, почтовых ящиков, с описаниями управления процессорами и потоками. Затронуты в книге и такие вопросы, как передача данных между процессами, управление виртуальной памятью, синхронизация потоков, управление каталогами и файлами, разработка сервисов, создание библиотек, асинхронная обработка данных.

Навигация по записям

Резюме C++ разработчик / C++ developer

ЗАО Сервотехника

Москва, www.servotechnica.ru/

Промышленное оборудование, техника, станки и комплектующие… Показать еще

С++ разработчик

Разработка программных систем управления промышленным оборудованием, станков (асу тп), автоматизированных технологических и имитационных стендов, систем промышленной автоматизации, систем мониторинга — станкостроение, дефектоскопия, металлообработка, метеорология, испытания на прочность и тд. Управление устройствами по сети CAN, Ethernet, Ethercat, rs232/485, протоколы TCP/IP, UDP, Modbus, Fatek, KEB, Deltatau, АЦП, ЦАП (L-Card). Разработка ведется в основном на C++.
Вот некоторые из выполненных мной проектов:

-система управления наплавочной установкой (Linux Ubuntu, gcc/g++, Qt, сервоприводы СПШ(6 шт, сеть CAN (плата CAN-PCI Marathon)), лазерный дальномер DIMETIX DLS по rs232)

-система управления комплексом ультразвуковой дефектоскопии(Win, C++Builder, Visual C++, DLL, DCOM, сервоприводы KEB по rs232/485, Olympus NDT, TomoView)
ссылка:( http://www.servotechnica.ru/project/index.pl?id=26 )

-система управления сверлильной установкой(Win, BC++, сеть CAN)

— управление системой осевого вращения антенн(Win, BC++, DLL, tcp/ip, modbus)

-система управления стендом испытаний на прочность(Win, C++Builder, Visual C++, dll, tcp/ip, DAC(L-Card))
ссылка:( http://www.servotechnica.ru/project/index.pl?id=56 )

— управление 2-х координатной системой пробосборника(Win, C++Builder, Fatek, фотометр по rs232)

— система управления положением луча (Win, C++, двигатели Unidrive, протокол Modbus, Ethernet-rs485, графический компонент для шкалы угла поворота)

— участие в разработке ряда испытательных имитационных стендов (DeltaTau, Pmac server(COM), интерфейс с PLC, управление в реальном времени(2мс, 500Гц), tcp/ip, dll, Visual C++, C++ Builder для HMI).

— станок трубогиб для стальных труб (DeltaTau, Pmac server(COM), интерфейс с PLC, tcp/ip, лазерный пирометр, C++, Win7)

— система сигнализации срыва потока (непрерывный мониторинг механических параметров) (Linux Debian7, gcc/g++ , tcp/ip, vortex (pc104+), gpio, DAC, клиент Qt5.3)

Инструменты и ОС: Microsoft Visual C++ (6-2013), Embarcadero(Borland) C++ Builder (6-XE7), mingw, gcc/g++, stl, boost, c++11, среда Qt 4-5, sql, Windows (xp-8), Linux (Debian, Ubuntu), Corba(Ace+Tao), COM, Python, PyQt, PyOpenGl.

Введение в Windows API

Доброе время суток!
Введение в Windows API

Меня всегда интересовала такая тема, как использование API-функций и функций DirectX. Но подходящей литературы, желательно на русском языке, да еще применительно к языку программирования VisualBasic как-то не встречалось, может плохо искал? Кто знает.

Однажды, путешествуя по уголкам Всемирной Паутины, мне попался интересный архивчик, покопавшись в котором я обнаружил именно то, что мне нужно, это была книга Даниэля Аппельмана (Daniel Appleman). С нее все и началось…

Я расскажу Вам все, что я сам узнал, читая эту книгу, которая должна, именно должна стать повседневным спутником, если Вы решили стать программистом или уже им стали, независимо от того, какой язык Вы решили использовать.

С чего начать? С начала.

Переход от DOS к Windows

Visual Basic — всесторонний язык программрования. Это конечно адекватно для большого количества приложения. Имеется хорошая возможность, однако, рано или поздно Вы будете сталкиваться с требованиями, которые Visual Basic не поддержал непосредственно. Например, «нормальная» звуковая поддержка, доступ к каналу ввода-вывода, и много растровых действий — это не область языка Visual Basic.

Но это не является действительно недостатком Visual Basic. Никакой язык не может содержать все команды и функции, которые могли бы быть необходимы каждыму программисту. В мире DOS, эта проблема решалась, создавая и используя библиотеки функций, которые расширяют возможности языка. Эти функции могли быть включены в ваши программы при необходимости.

В мире Windows, предметы — часть большого комплекса. Во-первых, операционная среда значительно больше усложнена чем DOS — простое действие показа линии на экране возводит в степень количество объектов, известных как дескрипторы, контексты устройств, и перья. Процесс соединения во внешних функциях — различный — приложения Windows часто используют методику, известную как динамическая связь вместо статической компановки, общей в DOS.

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

Вы можете писать программы на Visual Basic, даже не зная как работает Windows. Но, если Вы будете использовать функции системы, Вам будет необходимо узнать это.

Для начала, Windows — многозадачная система — способная управлять больше чем одна программа в одно и то же время. Многозадачный режим располагает интересным набором проблем. Какая программа получает доступ к экрану? Как разделена память? Если больше чем одна программа используют экран, какая программа получает ввод с клавиатуры? Кто получает вход «мыши»? Что, если две программы испытывают необходимость использовать один последовательный порт? И так далее и тому подобное…

Многие из выпусков программирования с использованием API-функций, которые будут обсуждены здесь, помогут решить эти разногласия.

Рассмотрим динамический вид связи.

Динамические Библиотеки Связей (DLLs)

Соединение обращается к процессу во внешнем модуле, который описан (declare) в программе. Имеются два типа соединения: статический и динамический. Статическая компановка происходит в течение создания программы. Динамическая связь происходит во время работы программы.

Статическая компоновка

Языки программрования обычно расширены двумя способами. Первый: большинство языков обеспечивает доступ к основной операционной системе. В DOS, это выполнено с запросами прерывания к DOS. Второй: большинство языков допускает, чтобы Вы создали библиотеки функций, которые могут быть подключены к вашей программе. Эти функции затем появляются используются, как будто они были построены в язык.

Программные модули, содержащие функции — компилированы в объектый (.OBJ) архив. Эти объектные файлы часто группируются в библиотеку (.LIB) архив, используя программу названную библиотекарем (типа LIB.EXE).

Когда пришло время создавать заключительную выполняемую версию приложения, программа, известная как компоновщик просматривает объектные файлы вашего приложения для ссылок на функции, которые не определены. Затем ищет любой указанный библиотечный архив функции, содержащий требуемые функции и копирует их в новый исполняемый файл, “привязывая” их к вашей программе. Этот процесс, известен как статическая компановка, потому что вся информация, необходимая в соответствии с вашей программой, установлена когда исполняемый файл создан, и остается неизменяемой (статической) при работе программы.

Статическая компановка имеет один незначительный недостаток. Рассмотрим пример: вообразите, что Вы имеете функцию по имени ShowMessage, которая показывает сообщение на экране и запрашивает пользователя. Допустим, что эта функция — 20КБ в размере, и Вы используете ее в пяти различных программах.

Значит, 80КБ дискового пространства по существу потрачены впустую в копиях той же самой функции. Гораздо разумнее использовать динамическую компоновку.

Динамическая связь

При использовании динамической связи, программные модули, содержащие функции — также компилированы в объектный (.OBJ) архив. Вместо того, чтобы группировать их в библиотечный архив, они связаны в специальную форму исполняемого файла Windows, известного как динамическая библиотека связей (DLL). Когда DLL создан, программист определяет, какая из включенных функций должна быть доступна из других выполняющихся прикладных программ. Это называется экспорт функции. Когда Вы создаете исполняемый файл Windows, компоновщик просматривает объектные файлы вашей программы и делает список из тех функций, которые не представлены и DLL, в котором они могут быть найдены. Процесс определения, где каждая функция может быть найдена, известен как импортирование функции.

Динамические библиотеки связей обычно имеют расширение .DLL, но это — не требование. Они могут использовать расширение .VBX или .OCX. Драйвера Windows обычно имеют расширение .DRV.

Ну, на первый раз хватит, в следующий раз мы рассмотрим: DLL и VisualBasic, API в VisualBasic, системные библиотеки функций и что-нибудь еще.

До скорого,

искренне Ваш, SilencerID

20/01/2001

Пошаговое руководство

: вызов API-интерфейсов Windows — Visual Basic

  • На чтение 9 минут

В этой статье

Windows API — это библиотеки с динамической компоновкой (DLL), которые являются частью операционной системы Windows. Вы используете их для выполнения задач, когда сложно написать собственные эквивалентные процедуры. Например, Windows предоставляет функцию с именем FlashWindowEx , которая позволяет настраивать отображение строки заголовка приложения между светлыми и темными оттенками.

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

API

Windows представляют собой особую категорию совместимости. API-интерфейсы Windows не используют управляемый код, не имеют встроенных библиотек типов и используют типы данных, отличные от тех, которые используются в Visual Studio.Из-за этих различий, а также из-за того, что API-интерфейсы Windows не являются COM-объектами, взаимодействие с API-интерфейсами Windows и .NET Framework осуществляется с помощью вызова платформы или PInvoke. Вызов платформы — это служба, которая позволяет управляемому коду вызывать неуправляемые функции, реализованные в библиотеках DLL. Дополнительные сведения см. В разделе Использование неуправляемых функций DLL. Вы можете использовать PInvoke в Visual Basic с помощью инструкции Declare или применения атрибута DllImport к пустой процедуре.

Вызовы Windows API были важной частью программирования на Visual Basic в прошлом, но в Visual Basic .NET они возникают редко. По возможности для выполнения задач следует использовать управляемый код из .NET Framework вместо вызовов Windows API. В этом пошаговом руководстве представлена ​​информация для тех ситуаций, в которых необходимо использование Windows API.

Примечание

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

Вызовы API

с использованием объявления

Наиболее распространенный способ вызова API-интерфейсов Windows — использование оператора Declare .

Объявить процедуру DLL

  1. Определите имя функции, которую вы хотите вызвать, а также ее аргументы, типы аргументов и возвращаемое значение, а также имя и расположение библиотеки DLL, которая ее содержит.

    Примечание

    Для получения полной информации о Windows API см. Документацию Win32 SDK в Platform SDK Windows API. Для получения дополнительной информации о константах, которые используют Windows API, изучите файлы заголовков, такие как Windows.h, включенные в Platform SDK.

  2. Откройте новый проект приложения Windows, щелкнув Новый в меню Файл , а затем щелкнув Проект . Появится диалоговое окно New Project .

  3. Выберите Приложение Windows из списка шаблонов проектов Visual Basic. Отображается новый проект.

  4. Добавьте следующую функцию Declare в класс или модуль, в котором вы хотите использовать DLL:

      Объявить автоматическую функцию MBox Lib "user32.dll" Псевдоним "MessageBox" (
        ByVal hWnd как целое число,
        ByVal txt как строка,
        ByVal caption As String,
        ByVal тип как целое число) как целое число
      

Части декларации

Заявление Declare включает следующие элементы.

Авто модификатор

Модификатор Auto инструктирует среду выполнения преобразовать строку на основе имени метода в соответствии с правилами среды выполнения общего языка (или псевдонимом, если он указан).

Ключевые слова Lib и Alias ​​

Имя после ключевого слова Function — это имя, которое ваша программа использует для доступа к импортированной функции. Это может быть то же самое, что и настоящее имя функции, которую вы вызываете, или вы можете использовать любое допустимое имя процедуры, а затем использовать ключевое слово Alias ​​, чтобы указать настоящее имя функции, которую вы вызываете.

Укажите ключевое слово Lib , за которым следует имя и расположение библиотеки DLL, содержащей вызываемую функцию. Вам не нужно указывать путь к файлам, расположенным в системных каталогах Windows.

Используйте ключевое слово Alias ​​, если имя вызываемой функции не является допустимым именем процедуры Visual Basic или конфликтует с именами других элементов в вашем приложении. Псевдоним указывает истинное имя вызываемой функции.

Объявления аргументов и типов данных

Объявите аргументы и их типы данных. Эта часть может быть сложной, потому что типы данных, которые использует Windows, не соответствуют типам данных Visual Studio. Visual Basic выполняет большую часть работы за вас, преобразовывая аргументы в совместимые типы данных, и этот процесс называется маршалингом . Вы можете явно управлять маршалингом аргументов с помощью атрибута MarshalAsAttribute, определенного в пространстве имен System.Runtime.InteropServices.

Примечание

Предыдущие версии Visual Basic позволяли объявлять параметры As Any , что означает, что можно использовать данные любого типа. Visual Basic требует, чтобы вы использовали определенный тип данных для всех операторов Declare .

Константы Windows API

Некоторые аргументы представляют собой комбинации констант. Например, API MessageBox , показанный в этом пошаговом руководстве, принимает целочисленный аргумент с именем Typ , который управляет отображением окна сообщения.Вы можете определить числовое значение этих констант, изучив инструкции #define в файле WinUser.h. Числовые значения обычно отображаются в шестнадцатеричном формате, поэтому вы можете использовать калькулятор, чтобы добавить их и преобразовать в десятичные. Например, если вы хотите объединить константы для стиля восклицания MB_ICONEXCLAMATION 0x00000030 и стиля «Да / Нет» MB_YESNO 0x00000004, вы можете сложить числа и получить результат 0x00000034 или 52 в десятичном формате.Хотя вы можете использовать десятичный результат напрямую, лучше объявить эти значения как константы в вашем приложении и объединить их с помощью оператора или .

Для объявления констант для Windows API вызывает
  1. Обратитесь к документации по вызываемой функции Windows. Определите имя используемых констант и имя файла .h, содержащего числовые значения для этих констант.

  2. Используйте текстовый редактор, например Блокнот, для просмотра содержимого заголовка (.h) и найдите значения, связанные с используемыми константами. Например, MessageBox API использует константу MB_ICONQUESTION для отображения вопросительного знака в окне сообщения. Определение MB_ICONQUESTION находится в WinUser.h и выглядит следующим образом:

    #define MB_ICONQUESTION 0x00000020L

  3. Добавьте эквивалентные операторы Const в свой класс или модуль, чтобы сделать эти константы доступными для вашего приложения.Например:

      Константа MB_ICONQUESTION как целое число = & h30
    Константа MB_YESNO как целое число = & h5
    Const IDYES как целое число = 6
    Константа IDNO как целое число = 7
      
Для вызова процедуры DLL
  1. Добавьте кнопку с именем Button1 в форму запуска проекта, а затем дважды щелкните ее, чтобы просмотреть ее код. Отображается обработчик события для кнопки.

  2. Добавьте код в обработчик события Click для добавленной кнопки, чтобы вызвать процедуру и предоставить соответствующие аргументы:

      Частная подписка Button1_Click (ByVal sender As System.Объект,
        ByVal e As System.EventArgs) Обрабатывает Button1.Click
    
        'Сохраняет возвращаемое значение.
        Dim RetVal As Integer
        RetVal = MBox (0, «Объявить тест DLL», «Окно сообщений Windows API»,
            MB_ICONQUESTION или MB_YESNO)
    
        'Проверить возвращаемое значение.
        Если RetVal = IDYES, то
            MsgBox («Вы выбрали Да»)
        Еще
            MsgBox («Вы выбрали Нет»)
        Конец, если
    Конец подписки
      
  3. Запустите проект, нажав F5. В окне сообщения отображаются кнопки ответа Да, и Нет, .Щелкните любой из них.

Маршалинг данных

Visual Basic автоматически преобразует типы данных параметров и возвращаемые значения для вызовов Windows API, но вы можете использовать атрибут MarshalAs , чтобы явно указать неуправляемые типы данных, ожидаемые API. Дополнительные сведения о маршалинге взаимодействия см. В разделе Маршалинг взаимодействия.

Чтобы использовать Declare и MarshalAs в вызове API
  1. Определите имя функции, которую вы хотите вызвать, а также ее аргументы, типы данных и возвращаемое значение.

  2. Чтобы упростить доступ к атрибуту MarshalAs , добавьте оператор Imports в верхнюю часть кода для класса или модуля, как в следующем примере:

      Импорт System.Runtime.InteropServices
      
  3. Добавьте прототип функции для импортированной функции в класс или модуль, который вы используете, и примените атрибут MarshalAs к параметрам или возвращаемому значению. В следующем примере вызов API, ожидающий типа void * , маршалируется как AsAny :

      Объявить Sub SetData Lib ".. \ LIB \ UnmgdLib.dll "(
        ByVal x As Short,
        
            ByVal o как объект)
      

Вызовы API с использованием DllImport

Атрибут DllImport предоставляет второй способ вызова функций в библиотеках DLL без библиотек типов. DllImport примерно эквивалентен использованию оператора Declare , но обеспечивает больший контроль над вызовом функций.

Вы можете использовать DllImport с большинством вызовов Windows API, если вызов относится к общему методу (иногда называемому static ).Вы не можете использовать методы, требующие экземпляра класса. В отличие от операторов Declare , вызовы DllImport не могут использовать атрибут MarshalAs .

Для вызова Windows API с помощью атрибута DllImport

  1. Откройте новый проект приложения Windows, щелкнув Новый в меню Файл , а затем щелкнув Проект . Появится диалоговое окно New Project .

  2. Выберите Приложение Windows из списка шаблонов проектов Visual Basic.Отображается новый проект.

  3. Добавьте кнопку с именем Button2 в форму запуска.

  4. Дважды щелкните Button2 , чтобы открыть представление кода для формы.

  5. Чтобы упростить доступ к DllImport , добавьте оператор Imports в верхнюю часть кода для класса формы запуска:

      Импорт System.Runtime.InteropServices
      
  6. Объявите пустую функцию перед оператором End Class для формы и назовите функцию MoveFile .

  7. Примените модификаторы Public и Shared к объявлению функции и установите параметры для MoveFile на основе аргументов, используемых функцией Windows API:

      Публичная общая функция MoveFile (
        ByVal src как строка,
        ByVal dst As String) As Boolean
        'Оставьте тело функции пустым.
    Конечная функция
      

    Ваша функция может иметь любое допустимое имя процедуры; Атрибут DllImport указывает имя в DLL.Он также обрабатывает маршалинг взаимодействия для параметров и возвращаемых значений, поэтому вы можете выбирать типы данных Visual Studio, аналогичные типам данных, которые использует API.

  8. Примените атрибут DllImport к пустой функции. Первый параметр — это имя и расположение библиотеки DLL, содержащей вызываемую функцию. Вам не нужно указывать путь к файлам, расположенным в системных каталогах Windows. Второй параметр — это именованный аргумент, указывающий имя функции в Windows API.В этом примере атрибут DllImport принудительно перенаправляет вызовы MoveFile на MoveFileW в KERNEL32.DLL. Метод MoveFileW копирует файл с пути src на путь dst .

      
    Публичная общая функция MoveFile (
        ByVal src как строка,
        ByVal dst As String) As Boolean
        'Оставьте тело функции пустым.Конечная функция
      
  9. Добавьте код в обработчик события Button2_Click для вызова функции:

      Private Sub Button2_Click (ByVal отправитель как System.Object,
        ByVal e As System.EventArgs) Обрабатывает Button2.Click
    
        Dim RetVal As Boolean = MoveFile ("c: \ tmp \ Test.txt", "c: \ Test.txt")
        Если RetVal = True, то
            MsgBox («Файл был успешно перемещен.»)
        Еще
            MsgBox («Не удалось переместить файл.»)
        Конец, если
    Конец подписки
      
  10. Создайте файл с именем Test.txt и поместите его в каталог C: \ Tmp на жестком диске. При необходимости создайте каталог Tmp.

  11. Нажмите F5, чтобы запустить приложение. Появится основная форма.

  12. Нажмите Button2 . Сообщение «Файл был успешно перемещен» отображается, если файл можно переместить.

См. Также

Доступ к Windows API с помощью Visual Basic

Доступ к Windows API с помощью Visual Basic

Введение

«Интерфейс прикладного программирования», или коротко API,
— очень важная часть операционной системы, такой как, например, Microsoft Windows.Эти функции предоставляют программисту доступ к основным функциям, возможностям
и особенности операционной системы.

Программисты, пишущие свои приложения для Windows на C,
естественно использовать функции API в своем коде.
Поскольку среда Visual Basic 6 несколько ограничена, некоторые Visual Basic
программисты склонны использовать функции API для решения этих проблем.
Это также ставит перед программистами Visual Basic некоторые новые аспекты.
программирования известны только программистам на C / C ++.

Функции API хранятся в файлах DLL, например gdi32.dll ,
kernel32.dll , user32.dll .
Библиотек намного больше, но перечисленные выше являются наиболее важными.
Все функции API задокументированы в
Библиотека MSDN
(библиотека Microsoft Developer Network).

Использование функций API позволяет расширить возможности вашего программного обеспечения,
но с его силой нужно обращаться осторожно.Излишне говорить, что среда Microsoft .Net может когда-нибудь сделать эти страницы устаревшими.

Просто чтобы вы знали …
Когда вы вызываете любые библиотеки DLL непосредственно из Visual Basic,
вы теряете встроенные функции безопасности среды Visual Basic.
Это означает, что вы увеличиваете риск отказа системы при тестировании или отладке кода.
Чтобы минимизировать риск, вам нужно обратить пристальное внимание на то, как вы объявляете процедуры DLL,
передать аргументы и указать типы.В любом случае чаще сохраняйте свою работу.
Вызов DLL предлагает вам исключительную мощность,
но это может быть менее снисходительно, чем другие виды задач программирования.

Пожалуйста, включите JavaScript, чтобы просматривать комментарии от Disqus.

Электронная книга «Введение в программирование Windows API»

Электронная книга насчитывает 244 страниц. Он содержит 114 примеров кода. Электронная книга
вводный материал по программированию в Windows API с программированием на C
язык.Это идеальный материал для тех, кто хочет начать обучение.
о программировании с помощью Windows API. Мы предполагаем, что читатель знает основы
языка C. Электронная книга — самая последняя книга, написанная о Windows API.
имеется в наличии.

Тщательно подобранные примеры всегда фокусируются на одном важном аспекте. Покупка этого
электронную книгу вы сэкономите уйму часов поиска в Интернете, расспросов на форумах
и придумывать вещи самостоятельно. На что у автора ушли месяцы и недели
выйдете через дни и часы.Электронная книга написана на простом английском языке.

Примеры кода были протестированы с помощью компилятора Pelles C. После покупки
электронную книгу, вы будете перенаправлены на страницу, где можно скачать ZIP-файл. С
PDF-файл, вы также получите все примеры кода.

Если что-то пойдет не так с процессом оплаты, напишите мне
письмо на адрес vronkij (at) gmail.com.

Цена

Электронная книга стоит 16 евро.

Другие способы оплаты

Граждане ЕС могут приобрести электронную книгу банковским переводом без дополнительных комиссий.Если вы хотите использовать этот способ оплаты, свяжитесь со мной по адресу
vronskij (at) gmail.com, и я пришлю вам подробности.

Об этой электронной книге

Это электронная книга «Введение в программирование Windows API». Эта электронная книга является вводной
материал по программированию в Windows API на языке программирования C.
Он основан на учебнике ZetCode по Windows API с дополнительными материалами.

Электронная книга состоит из 14 глав. Полное оглавление
указан в конце страницы.

Охватывается следующее:

  • Введение
  • Основы
  • Основные функции
  • Системные функции
  • Струны
  • Язык
  • Дата и время
  • Файлы и каталоги
  • Окно
  • Первые шаги в UI
  • Меню
  • Элементы управления
  • Список
  • Графика

Глава Introduction знакомит с Windows API и Pelles C IDE.В главе Essentials функции рассматриваются в общих чертах,
типы данных Windows, дескрипторы и макросы. В главе Основные функции говорится о
доступные основные функции. Мы упоминаем как основные функции консоли, так и пользовательского интерфейса.
Глава Системные функции описывает несколько связанных с системой
функции. Например, мы показываем, как заблокировать рабочую станцию, получить
имя компьютера или определить скорость процессора. Глава Strings
посвящен важнейшей теме строк в Windows API.Мы упоминаем
классические строковые функции ANSI C, строковые функции повышенной безопасности и
Строковые функции Windows API.

В главе Locale мы говорим о функциях, связанных с
к родной языковой среде. В этой главе мы покажем, как
получить информацию о языковом стандарте, форматировать валюту, числа или даты в
текущий языковой стандарт и сравнить строки. В главе Дата и время мы
работать с датой и временем. Определяем местное и всемирное время, делаем арифметические операции
операции с датами или форматирование даты и времени.В Файлы и каталоги
главу мы работаем с файлами и каталогами. Создаем и удаляем каталоги,
копировать и удалять файлы или читать и записывать в файл. В окне Глава
мы подробно опишем, как создать наше первое окно.

В главе Первые шаги в пользовательском интерфейсе мы создаем простые программы пользовательского интерфейса. Например,
мы создаем центрированное окно, регистрируем горячую клавишу или мигаем окно.
Глава Меню посвящена меню. Мы создаем как классические меню, так и
всплывающие меню.В главе Элементы управления мы описываем четырнадцать элементов управления,
включая кнопку, флажок, трекбар, строку состояния и поле со списком. Список
глава box описывает элемент управления List box; у него есть шесть примеров, описывающих это.
В главе Графика мы выполняем рисование. Рисуем базовые примитивы,
фигуры, текст или работа с областями и обрезкой.

Скриншоты

Вот несколько скриншотов из электронной книги.

Рисунок: Пункт меню Radio Рисунок: Список, пример множественного выбора Рисунок: Пример отсечения Рисунок: Объединение регионов

Содержание

  1. Предисловие
  2. Об авторе
  3. Введение
    1. Windows API
    2. Пеллес С
    3. MSDN
  4. : главное
    1. Функции
    2. Типы данных Windows
    3. Ручки
    4. Макросы
  5. Основные функции
    1. Основные прототипы
    2. Прототипы wmain
    3. Прототипы _tmain
    4. Прототипы WinMain
  6. Системные функции
    1. Размер экрана
    2. Запирающееся рабочее место
    3. Имя компьютера
    4. Имя пользователя
    5. Текущий каталог
    6. Версия Windows
    7. Использование памяти
    8. Известные папки
    9. Имена дисков
    10. Свободное место на диске
    11. Частота процессора
  7. Струны
    1. Строковые функции ANSI C
    2. Функции ЭЛТ повышенной безопасности
    3. Ядро Windows API и строковые функции пользователя
    4. Функции облегченной служебной программы Windows API Shell
    5. Функции Windows API StrSafe
  8. Локаль
    1. Локаль по умолчанию
    2. Получение информации о локали
    3. Валютный формат
    4. Формат чисел
    5. Формат даты
    6. Сравнение строк
  9. Дата и время
    1. Местное время
    2. всемирное время
    3. Арифметика
    4. Дата
    5. Дата форматирования
    6. Определение високосного года
    7. Время работы
    8. День недели
    9. Эпоха
    10. дней до Рождества
    11. Время сравнения
    12. Часовые пояса
  10. Файлы и каталоги
    1. Создание каталога
    2. Удаление каталога
    3. Копирование файла
    4. Удаление файла
    5. Перемещение файла
    6. Размер файла
    7. Время последней записи
    8. Атрибуты файла
    9. Чтение файла
    10. Запись в файл
  11. Окно
    1. Функция wWinMain ()
    2. Регистрация класса окна
    3. Создание окна
    4. сообщений
    5. Оконная процедура
    6. Простое окно
  12. Первые шаги в UI
    1. Окно сообщений
    2. Центрирование окна
    3. Горячая клавиша
    4. Другие окна
    5. Клавиша выхода
    6. Перемещение окна
    7. Перепрошивка окна
  13. Меню
    1. Простое меню
    2. Всплывающее меню
    3. Проверить пункт меню
    4. Пункт меню радио
    5. Подменю
  14. Органы управления
    1. Статическое управление
    2. Кнопка
    3. Флажок
    4. Элемент управления редактированием
    5. Радиокнопки и групповое поле
    6. Поле со списком
    7. Строка состояния
    8. Прогрессбар
    9. Трекбар
    10. Контроль обновления
    11. Месячный календарный контроль
    12. Управление IP-адресом
    13. Управление горячими клавишами
    14. Вкладка
  15. Список
    1. Простой пример
    2. Дважды щелкните
    3. Добавление и удаление элементов
    4. Выборки
    5. Множественный выбор
    6. Поиск предметов
  16. Графика
    1. Пиксель
    2. Строка
    3. Прямоугольник
    4. Кривая Безье
    5. Ручка
    6. Щетка
    7. Звезда
    8. Формы
    9. Текст
    10. Нарисуйте растровое изображение
    11. Исходная точка видового экрана
    12. Регион
    13. Клипса
  17. Библиография

1.Введение | Программирование Win32 API с помощью Visual Basic

ByVal dwShareMode As Long, _
ByVal lpSecurityAttributes As Long, _
ByVal lpSecurityAttributes As Long, _
ByValis dposition ByVal hTemplateFile As Long _
) As Long
Функция CreateFile возвращает дескриптор низкого уровня для файла.Конечно, использование CreateFile имеет смысл только тогда, когда оно предлагает некоторые преимущества по сравнению с другими более высокоуровневыми и гораздо более простыми вариантами. Мы увидим пример этого в главе 10 «Объекты и их дескрипторы», , где мы будем использовать дескриптор файла для отображения части файла непосредственно в пространство виртуальной памяти приложения.
Для создания простого текстового файла имеет смысл использовать один из более простых методов более высокого уровня.Фактически, объект FileSystemObject использует функцию CreateFile API для достижения своей цели, так почему бы не воспользоваться этим? Действительно, на рис. 1.1 показаны функции API, которые импортируются (т. Е. Используются) файлом SCRRUN.DLL, , в котором находится объект FileSystemObject. Обратите внимание, что список включает CreateFileA и CreateFileW, , которые являются версиями ANSI и Unicode для CreateFile. (Кстати, программа rpiPEInfo , показанная на рисунке 1-1, является одним из приложений, которые мы создадим в этой книге.)
Конечно, Win32 API — это самый низкий уровень, доступный программисту (VB или VC ++). Это позволяет программисту на языке C ++ получить доступ ко всем возможностям операционной системы Windows и позволяет программисту на языке VB гораздо ближе приблизиться к этой цели, чем при использовании только VB.
Однако при возникновении проблемы программирования, как правило, разумно найти решение самого высокого уровня, за исключением, возможно, случаев, когда производительность является серьезной проблемой .Как вы увидите, читая эту книгу, существует очень много ситуаций, в которых Win32 API находится на самом высоком уровне!
Работа с Win32 API не похожа на работу с Visual Basic. С Win32 API мы намного «ближе» к операционной системе, и здесь гораздо меньше средств защиты, чем в Visual Basic. Действительно, VB — это очень защищенная среда , за которую мы платим штраф в виде ограниченного доступа к самой операционной системе и очень ограниченного прямого доступа к памяти.
В частности, когда мы читаем или записываем в память, мы берем на себя определенные риски (но ничего, что не исправит перезагрузка). Если мы попытаемся (намеренно или случайно) записать или прочитать из защищенной памяти, операционная система, как мы надеемся, вызовет ошибку общей защиты , или GPF. На рис. 1-2 показан пример диалога GPF (в Windows NT 4.0).

Вызов подпрограмм и функций Windows API

Вызов подпрограмм и функций Windows API

Хотя VB очень мощный
язык, иногда вы можете захотеть включить функциональность в свой
приложение, недоступное с «прямым» VB.Введите
Windows API (интерфейс прикладного программирования). Windows API — это набор
библиотеки кода (файлы DLL), содержащие множество функций для работы со всеми
аспекты Windows (графика, файловая система, шрифты, низкоуровневый доступ к памяти,
так далее.). Эти библиотеки функций доступны программистам, пишущим с любыми
Система разработки Windows (VB, C ++, Delphi и др.).

При использовании API часто
рассматривается как «продвинутая» тема программирования (и, разумеется, с использованием
API позволяет вам погрузиться в глубины программирования Windows так же глубоко, как и вы.
желание), кодирование, фактически настраиваемое и использующее функцию API, относительно
простой.Основные шаги:

  • Объявить подпрограмму API или
    функцию с оператором Declare. Заявление Declare должно быть закодировано
    в разделе общих объявлений формы или модуля и может быть объявлен
    с публичной или приватной областью действия (приватная только в формах) Если объявлено
    как общедоступная, любая форма или модуль в вашем приложении VB может использовать эту функцию;
    если Private, только форма или модуль, в котором он объявлен, могут использовать
    функция.
  • Объявить любые переменные и
    константы, необходимые для использования в качестве параметров с подгруппой или функцией.
  • Вызов подпрограммы или функции
    как и любой другой подзаголовок или функцию. (Имейте в виду, что есть некоторые
    различия между вызовами функций API и обычными подпрограммами VB и
    функции. В частности, при работе со строками ключевое слово
    «ByVal» необходимо использовать, когда вы действительно хотите пройти мимо
    ссылка, чтобы вернуть возвращаемое значение.)

Найти объявления и
документация, необходимая для использования любой из более чем 1000 доступных функций Windows API,
вы можете обратиться к любому из многочисленных веб-сайтов справки VB или получить книгу, например, Dan
«Руководство программиста VB по Win32 API» Appleman.

VB сам поставляется с
надстройка под названием API Viewer, с помощью которой вы можете найти функцию API
по имени и скопируйте декларацию для него, но эта утилита не документирует
как пользоваться функцией; вам придется узнать это от кого-то другого
ресурс.

Использование средства просмотра API
Утилита

Чтобы использовать средство просмотра API, перейдите на
меню надстроек в строке главного меню VB и выберите Диспетчер надстроек :

В получившейся надстройке
На экране диспетчера найдите запись VB 6 API Viewer и дважды щелкните ее.
Слово «загружено» должно появиться в столбце «Поведение при загрузке», а значок
флажок «Загружено / Выгружено» в правом нижнем углу должен
быть проверенным.Установите флажок «Загружать при запуске», если вы этого хотите.
утилита доступна каждый раз, когда вы используете VB. По завершении нажмите ОК.

Примечание. Если вы НЕ видите
пункт «VB 6 API Viewer» в этом списке, перейдите к разделу «Устранение неполадок надстройки API Viewer»
ниже.

Шагов:

Теперь, если вы перейдете к
В меню надстроек должен присутствовать пункт для API Viewer :

После выбора средства просмотра API
появится утилита:

Перейти в меню Файл
В первый раз, когда вы используете это, вы должны выбрать Преобразовать текст в базу данных
(это ускорит использование утилиты). Затем выберите Загрузить.
Файл базы данных
:

Из открывшегося диалогового окна
поле выберите WIN32API.MDB :

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

Устранение неисправностей
надстройка API Viewer

Если вы смогли
без проблем выполните указанные выше действия, перейдите к разделу «Образец программы» ниже.

Если кто-то кроме
вы установили Visual Basic или Visual Studio на свой компьютер (например,
сетевой администратор на вашем рабочем месте), вы можете не видеть различные VB
надстройки при входе на рабочую станцию.Эта проблема описана в статье 1

базы знаний Майкрософт («ОШИБКА: надстройки.
Видно только пользователю, установившему VB »). В статье нет
обратитесь к программе просмотра API конкретно, однако проблема, описанная в
статья действительно применима здесь. Чтобы исправить ситуацию, сначала убедитесь, что API
Утилита Viewer под названием APILOAD.EXE существует в вашей системе. С
стандартная установка Visual Studio / Visual Basic, этот файл вместе с
остальные должны находиться в папке C: \ Program Files \ Microsoft Visual
Студия \ Common \ Tools \ Winapi
.

Если вы не можете найти это
файл в вашей системе, то это означает, что возможность включить средство просмотра API
утилита не была выбрана, когда Visual
Studio / Visual Basic был установлен. Это, конечно, не мешает вам
используя API, это просто означает, что у вас нет этой справочной утилиты
легко доступны. Сделать образец программы
ниже просто введите объявление функции для FlashWindow как
против копирования и вставки.

Предполагая, что вы нашли
APILOAD.EXE, вы можете сделать его надстройкой к VB IDE, выполнив эту команду
из окна «Выполнить» меню «Пуск» Windows (если
необходимо, замените правильный диск и / или информацию о пути для вашего
система):

«C: \ Program»
Файлы \ Microsoft Visual Studio \ Common \ Tools \ Winapi \ apiload.exe «/ regserver

Если регистрация была
успешно, вы должны увидеть «VB 6 API Viewer» в качестве надстройки.
в следующий раз, когда вы откроете VB и сможете вернуться, следуйте инструкциям
описано выше.Если по какой-либо причине регистрация не удалась,
но у вас все еще есть APILOAD.EXE в вашей системе, вы можете запустить его как
автономная программа, а не как надстройка из IDE.

Пример программы

Теперь построим простой
Программа «Попробуй», демонстрирующая использование функций API. Мы будем
вызвать функцию «Flash Window», чтобы сделать строку заголовка нашего
форма мигает и выключается.

  • Настройте новый «Попробуйте
    It »программа
  • Перейти к надстройкам
    меню, выберите API Viewer и загрузите файл базы данных API
  • Найдите FlashWindow
    в списке Доступные элементы .
  • Нажмите Добавить
    кнопка. Объявление должно появиться в области Selected Items .
  • Под «Объявить»
    Область », выберите Частный .
  • Нажмите Копия
    кнопка.
  • Закройте утилиту.
  • Откройте окно кода и
    вставьте объявление в строку Option Explicit:

  • При желании «исправить»
    up «объявление, чтобы разбить его на несколько строк для удобства чтения.
    Также объявите частную переменную с именем mlngOnOrOff (long). Ваш генерал
    раздел объявлений должен выглядеть так:

Вариант
Явный

Частный
Объявить функцию FlashWindow _

Lib «user32» _

(ByVal hwnd As Long, _

ByVal bИнвертировать до длины) _

As
Длинный

Частный
млн выкл.

  • Разместите следующий код
    в событии cmdTryIt_Click:

Частный
Подложка cmdTryIt_Click ()

Dim intX как целое число

Dim lngRetVal As Long

Для intX = 1 до 1000

mlngOnOrOff = IIf (mlngOnOrOff = 0, 1, 0)

lngRetVal = FlashWindow (Me.hwnd, млнngOnOrOff)

Следующий

Конец
Sub

  • Запустить программу. Когда ты
    нажмите кнопку «Попробовать», строка заголовка формы должна
    мигают и гаснут.

Мы можем проанализировать код как
следует. Во-первых, объяснение заявления Declare. Заявление Declare
как он используется в этом примере, имеет следующий общий синтаксис:

[Общедоступный |
Private] Объявить функцию FunctionName Lib LibraryName
([список параметров]) Как , тип данных

Имя функции
указывает, какую функцию Windows мы хотим вызвать, а LibraryName
указывает, в какой DLL функция может быть найдена.В этом примере мы
ищем функцию FlashWindow, расположенную в системе Windows user32.dll
файл. Аргументами этой конкретной функции являются hwnd , что будет
сообщить функции, какое окно мы хотим мигать («hwnd» — это
«дескриптор» или уникальный идентификатор, связанный с окном), и bInvert
это число, которое будет действовать как флаг, чтобы указать, хотим ли мы
мигает окно «включено» или «выключено» (значение 0 означает выключение,
все остальное означает «включено»).Спецификация As Long на
конец нашего объявления указывает, что функция будет возвращать
Длинное значение. В случае многих функций API будет возвращено значение типа Long.
для обозначения успеха или неудачи вызова.

В цикле, в котором мы вызываем
функция, мы сначала переключаем переменную, которую мы передадим как вторую
параметр: если включен, выключить; если он выключен, включи:

mlngOnOrOff = IIf (mlngOnOrOff = 0, 1, 0)

В заявлении, где мы
совершая вызов, мы передаем свойство hwnd нашей формы («Я» относится к
форма, в которой код в настоящее время выполняется, и «.hwnd «это
встроенное свойство формы), а также числовое значение флага, которое мы установили в
наша переменная mlngOnOrOff. Поскольку функция возвращает значение типа Long, мы
присвоение этого возвращаемого значения переменной lngRetVal:

lngRetVal = FlashWindow (Me.hwnd, mlngOnOrOff)

Скачать код проекта VB
для примера выше здесь.

Работа с Windows API

Глава 13 демонстрирует, как можно обновить Visual Basic 6.0 Windows API для .NET двумя разными методами. Первый метод предполагает постоянное использование Windows API из кода Visual Basic .NET. Выбирая этот подход, вы должны позаботиться о надлежащем обновлении типов данных VB6 и строк фиксированной длины VB6 до .NET, чтобы гарантировать правильную работу вызовов API. Вы также можете обновить тип переменной VB6 As Any до .NET, объявив одну и ту же функцию API несколько раз. Второй метод — заменить вызовы Windows API эквивалентным Visual Basic.Вызовы функций .NET. Этот подход требует больше усилий в процессе обновления, но он снижает зависимость приложения от старого, неуправляемого API.

В чем разница между Windows API в Visual Basic 6.0 и Visual Basic .NET?

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

Visual Basic .NET развивает эту возможность, позволяя объявлять и вызывать функции Windows API таким же образом, как и раньше. Более того, доступ ко многим из этих API предоставляется через более полную библиотеку классов .NET Framework.

Как вызовы функций API VB 6.0 обновлены до .NET?

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

Каковы основные изменения типов данных между Visual Basic 6.0 и VB .NET и как это обрабатывается мастером обновления?

Размеры хранилища для типов данных Integer и Long изменились между VB 6.0 и Visual Basic .NET для обеспечения согласованности с .NET Framework.

Эти изменения затрагивают почти все объявления функций Windows API, в которых используются числовые типы Integer и Long.В Visual Basic 6.0 целое число составляет 16 бит, а длинное — 32 бита. В Visual Basic .NET целое число составляет 32 бита, а длинное — 64 бита. Visual Basic .NET добавляет новый тип с именем Short, который по размеру является заменой целочисленного типа Visual Basic 6.0. В Visual Basic .NET при создании нового оператора Declare для функции Windows API необходимо учитывать это различие. Любой тип параметра или член определяемого пользователем типа, который ранее был Long, должен быть объявлен как Integer; любой член, ранее объявленный как Integer, должен быть объявлен как Short.

Мастер обновления Visual Basic автоматически изменит все объявления переменных в вашем коде, чтобы использовать правильный размер. Вам необходимо учитывать размер типа только тогда, когда вы создаете новые операторы Declare или изменяете существующие операторы.

Как строки фиксированной длины Visual Basic 6.0 обновляются до VB .NET?

Visual Basic 6.0 имеет строковый тип данных фиксированной длины, который не поддерживается в Visual

.

Базовый .NET. Любые объявления строк фиксированной длины в коде должны быть обновлены до класса-оболочки строки фиксированной длины, который предоставляется в Visual Basic.СЕТЬ.

Мастер обновления создает код, зависящий от среды выполнения совместимости Visual Basic 6.0. Чтобы избежать этого, вы должны подготовить свой код до обновления или изменить полученный код Visual Basic .NET.

Поддерживается ли по-прежнему тип переменной «As Any» в Visual Basic .NET?

Visual Basic 6.0 позволяет объявлять типы параметров с помощью типа переменной As Any. Это объявление позволяет передавать аргумент любого типа; Visual Basic 6.0 передает правильную информацию при выполнении вызова.Это дает вам большую гибкость, но при вызове функции API для аргумента не выполняется проверка типа. Таким образом, если вы передадите несовместимый тип аргумента, приложение может сгенерировать исключение времени выполнения.

Visual Basic .NET не поддерживает объявление параметров Windows API с типом переменной As Any. Однако аналогичного эффекта можно достичь, объявив одну и ту же функцию API несколько раз, используя разные типы для одного и того же параметра в каждом объявлении.

Функция Windows API SendMessage является примером экземпляра, в котором вы могли бы использовать тип As Any в объявлении функции API в Visual Basic 6.0 код. В зависимости от отправляемого сообщения Windows типы параметров, необходимых для сообщения, будут различаться. Например, сообщение WM_SETTEXT требует, чтобы вы передали строку в качестве последнего параметра. Напротив, сообщение WM_GETTEXTLENGTH требует, чтобы вы передали 0, числовое значение, для последнего параметра. Чтобы обработать оба этих сообщения, вы создаете оператор Declare Visual Basic 6.0 для SendMessage. Чтобы реализовать эквивалентную функциональность в Visual Basic .NET, вы создаете несколько операторов Declare для функции SendMessage.

Чем отличается передача определяемых пользователем типов функциям API в .NET?

Когда вы передаете определяемый пользователем тип Visual Basic 6.0 в функцию API, Visual Basic передает указатель на память, содержащую определяемый пользователем тип. Функция API видит члены определяемого пользователем типа в том же порядке, в котором они были объявлены в Visual Basic. Однако это не относится к Visual Basic .NET. Если вы объявляете определяемый пользователем тип, не гарантируется, что порядок членов останется неизменным в коде.Среда CLR может реорганизовать члены определяемого пользователем типа способом, который наиболее эффективен для передачи определяемого пользователем типа функции. Чтобы гарантировать, что члены передаются точно так, как указано в коде, вам необходимо использовать атрибуты маршалинга.

Например, если ваш код вызывает функцию API с именем MyFunction (написанную на

C или C ++), который принимает параметр 2-байтового логического типа (VARIANT_BOOL), вы можете использовать атрибут MarshalAs, чтобы указать тип параметра, который ожидает функция API.Обычно логический параметр передается с использованием 4 байтов, но если вы включаете UnmanagedType.VariantBool в качестве параметра в атрибут MarshalAs, параметр маршалируется — или передается — как 2-байтовый аргумент VARIANT_BOOL.

Обратите внимание, что атрибут MarshalAs содержится в пространстве имен System.Run-time.InteropServices. Чтобы вызвать MarshalAs без квалификации, вам нужно добавить оператор Imports в верхнюю часть модуля для System.Runtime.InteropServices.

Для любой структуры, передаваемой функциям API, структура должна быть объявлена ​​с использованием атрибута StructLayout для обеспечения совместимости с Windows API.Атрибут StructLayout принимает ряд параметров, но двумя наиболее важными атрибутами для обеспечения совместимости являются LayoutKind и CharSet. Например, чтобы указать, что элементы структуры должны передаваться в том же порядке, в котором они были объявлены, установите для атрибута LayoutKind значение LayoutKind.Sequential. Чтобы гарантировать, что строковые параметры маршалируются как строки ANSI, установите для атрибута CharSet значение CharSet.Ansi.

Важно знать, что .NET Framework использует строки Unicode при взаимодействии с внешними API.Может потребоваться использовать другие параметры маршалинга строк, такие как кодировка ANSI или кодировка, которая определяется базовой операционной системой.

Как правило, по возможности используйте Unicode-версии функций API и используйте вместо для строковых аргументов. Примените те же рассуждения к полям структуры, которые необходимы для взаимодействия с API. По возможности используйте версии структур Unicode и используйте вместо в качестве атрибутов маршалинга для структур и строковых полей.

Каковы основные изменения в функциональности AddressOf между Visual Basic 6.0 и VB .NET?

Некоторым функциям Windows API, таким как EnumFontsFamilies, требуется указатель на функцию обратного вызова. Когда вы вызываете функцию API, Windows вызывает предоставленную вами функцию обратного вызова. В случае EnumFontsFamilies Windows вызовет функцию для каждого доступного шрифта.

Visual Basic 6.0 позволяет объявлять функции Windows API, которые принимают указатели функций обратного вызова, путем объявления параметра указателя функции как Long, представляющего 32-разрядный указатель. Ваш код вызывает функцию API и, уточняя имя подпрограммы ключевым словом AddressOf, он передает подпрограмму, которая будет служить функцией обратного вызова.

Visual Basic .NET по-прежнему поддерживает ключевое слово AddressOf, но вместо возврата 32-разрядного целого числа возвращает делегат. Делегат — это новый тип в Visual Basic.NET, которая позволяет объявлять указатели на функции или члены класса. Это означает, что вы по-прежнему можете создавать операторы Declare для функций Windows API, которые принимают указатель на функцию обратного вызова в качестве параметра. Разница в том, что вместо объявления типа параметра как 32-разрядного целого числа необходимо объявить параметр функции как тип делегата.

Поддерживаются ли функции ObjPtr, StrPtr и VarPtr в Visual Basic .NET?

В Visual Basic 6.0 можно получить 32-разрядный адрес объекта, строки, переменной или определенного пользователем значения с помощью недокументированных вспомогательных функций ObjPtr, StrPtr и VarPtr соответственно.Visual Basic .NET не поддерживает эти функции и не позволяет получить адрес памяти для любого типа. Преимущества этого ограничения значительны. Предоставление управления памятью CLR избавляет вас от необходимости беспокоиться о выделении и освобождении ресурсов памяти; это позволяет вам сосредоточиться на приложении и бизнес-логике. Кроме того, это увеличивает надежность и безопасность приложения. Пространства памяти управляемых приложений изолированы друг от друга. Приложение больше не может случайно (или злонамеренно) использовать указатели для доступа к пространству памяти другого приложения.

В случаях, когда вы должны иметь контроль над базовой памятью, .NET Framework предоставляет тип указателя с именем System.IntPtr. System.IntPtr — это специфичный для платформы тип, который используется для представления указателя или дескриптора. Этот тип можно использовать вместе с классом System.Runtime.InteropServices.Marshal, который содержит методы для неуправляемых операций с памятью, чтобы получить указатель для данного типа. Например, все функции AllocHGlobal, GetComInterfaceForObject и OffSetOf возвращают указатели в память.Вы также можете использовать структуру GCHandle для получения дескриптора элемента, который содержится в памяти, управляемой сборщиком мусора. Кроме того, вы можете получить указатель на память, заставив сборщик мусора закрепить объект в одной ячейке памяти, чтобы предотвратить его перемещение.

Какие есть другие альтернативы для переноса вызовов API в Visual Basic .NET?

Другой вариант при обновлении вызовов API с Visual Basic 6.0 до Visual Basic .NET — использовать альтернативы Visual Basic .NET вместо оператора Declare.Преимущество этого подхода состоит в том, что все альтернативы Visual Basic .NET приводят к полностью управляемому коду, даже если API-интерфейсы неуправляемы. Многие из API имеют эквиваленты в Visual Basic .NET или .NET Framework.

Замена функций API альтернативами Visual Basic .NET должна выполняться в индивидуальном порядке.

Наконец, после преобразования кода Visual Basic 6.0 мастером обновления необходимо выполнить несколько шагов, чтобы устранить зависимости от вызовов API и заменить их на Visual Basic.NET эквиваленты.

Microsoft открывает старые Win32 API для C # и Rust, в будущем появятся новые языки — Visual Studio Magazine

Новости

Microsoft открывает старые Win32 API для C # и Rust, в будущем появятся новые языки

Microsoft открывает старые API-интерфейсы Win32, которые давно используются для 32-битного программирования Windows, позволяя кодерам использовать языки по своему выбору вместо варианта C / C ++ по умолчанию или отдельных обходных путей.

Как видно из названия, Win32 — это 32-битный API для версий Windows от 95 и более поздних.

Хотя API Win32 ранее можно было использовать на других языках, помимо C / C ++, для этого требовались обходные пути — оболочки или привязки — например, знакомая схема P / Invoke для C #. Однако использование P / Invoke и его аналога в Rust, winapi-rs, обременительно, поскольку отдельные предложения необходимо поддерживать вручную, что затрудняет поддержание устойчивого покрытия. Более того, такая схема не переводится на другие языки.

Чтобы упростить и автоматизировать этот процесс, Microsoft сегодня (21 января) представила свой проект win32metadata вместе с парой начальных проекций языка Win32. Проекция языка программирования — это подсистема, по-разному описываемая как набор оболочек или адаптера, которая способствует разработке с использованием API-интерфейсов платформы (в данном случае Win32) естественным и знакомым для целевого языка способом.

Проект метаданных упрощает создание языковых проекций, предоставляя полное описание поверхности Win32 API, чтобы ее можно было автоматически проецировать на любой язык, что, по заявлению Microsoft, улучшает точность и сводит к минимуму обслуживание.Таким образом, эти описания метаданных не предназначены для непосредственного использования разработчиками, которые вместо этого будут использовать языковые проекции, которые, в свою очередь, потребляют метаданные и проецируют API-интерфейсы в естественные шаблоны конкретных языков.

[Щелкните изображение, чтобы увидеть увеличенное изображение в формате GIF.] Вызов CreateFile через статический класс PInvoke с C # / Win32 в анимированном действии (источник: Microsoft).

«API-интерфейсы Win32 существуют уже давно, поэтому точное их описание потребует некоторой итерации», — говорится в сообщении Microsoft.«Мы будем разрабатывать этот инструментарий открыто и приветствуем вклад сообщества, чтобы обеспечить точное представление поверхности Win32 API, которая будет полезна для всех языков».

Тем временем Microsoft представила в предварительной версии две первоначальные языковые проекции:

  • C # / Win32: «Созданный в сотрудничестве с Эндрю Арноттом, владельцем проекта PInvoke для .NET, C # / Win32 анализирует метаданные и генерирует оболочки P / Invoke, необходимые для вызова нужных вам API.«
  • Rust: «Проекция языка Rust следует традиции C ++ / WinRT построения языковых проекций для Windows с использованием стандартных языков и компиляторов, предоставляя разработчикам Rust естественный и идиоматический способ вызова API-интерфейсов Windows. Windows API использует код, сгенерированный на лету непосредственно из метаданных, что позволяет вам вызывать API, как если бы они были просто еще одним модулем Rust ».

Забегая вперед, Microsoft заявила, что уже работает над проекцией современного C ++.Компания заявила: «Да, Windows SDK уже выпускает заголовки, которые можно использовать из C ++, но эти заголовки имеют некоторые серьезные исторические ограничения и ограничения совместимости, которые мешают разработчикам C ++, которые хотят пользоваться функциями современного языка».

Компания заявила, что при создании дополнительных языковых проекций будет следовать следующим принципам:

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

Помимо предоставления предварительных прогнозов на C #, C ++ и Rust, в дорожной карте проекта указано, что пакет метаданных Win32 будет опубликован в NuGet.

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

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