НОУ ІНТУІТ, Лекція, WinApi

Приклади роботи з функціями Win32 API

Розмова про особливості виклику Win32 API функцій ще не закінчена. Тим не менш, час перервати загальний виклад і звернутися до прикладів. Багато чого з того, що було сказано, доцільно проілюструвати прикладами роботи з конкретними функціями Win 32 API. Кожен із наших прикладів буде присвячений роботі з деякою групою функцій.

Робота з вікнами

Дамо коротку характеристику функцій, що використовуються:

Наведемо тепер процедуру, у якій послідовно запускаються описані тут функції (У прикладах використовуються документи: DocOne6, DocTwo6

Наведемо відразу ж і результати налагоджувального друку. Зауважимо, що це функції виконалися успішно, тому не з'являлися повідомлення у діалогових вікнах, передбачені у разі неуспіху.

  • Спочатку, при виклику функції API GetActiveWindow було отримано описувач активного вікна. Зауважимо, що це було вікно коду виконуваної процедури. Значення цього описника дорівнює 655 706 .
  • Потім, при виклику функції GetWindowRect був отриманий прямокутник, що визначає положення вікна на екрані. Функція успішно завершила роботу та повернула результат, рівний 1 (істина). Як і в інших випадках, після закінчення виконання функції ми перевірили результат на успішність завершення.
  • На наступному етапі було отримано заголовок активного вікна. Як видно з роздруківки заголовка, активним було вікно коду, що виконується. Результат 58 , який повернула функція GetWindowText , визначає кількість символів результуючого рядка. Зверніть увагу, перед викликом функції переданий їй рядок був ініціалізований нульовими символами. Після успішного завершення з рядка було виділено результат, який задає заголовок. Його друк показує, що активним у момент запуску функції було вікно, що виконуєтьсякоду. Для виділення заголовка з рядка використовувався нульовий символ як ознака закінчення заголовка. Для вирішення цього завдання можна було використовувати і число символів, що повертаються - значення, що повертається функцією.
  • Наступним кроком було одержання описувача вікна по заданому заголовку. Як таке було використано заголовок вікна з тестовим документом. Функція FindWindow знайшла таке вікно і повернула його описувач, рівний 6684884 . Зверніть увагу, що перший параметр був заданий константою vbNullString .
  • Вікно, описувач якого було отримано в останньому виклику, двічі перебудовувалося, спочатку мінімізувалося, потім нормалізувалося, при двох викликах функції ShowWindow з різними значеннями констант.
  • На останньому етапі знову викликалася функція FindWindow для знаходження описника новоствореного документа. Потім під час виклику функції SetWindowText було змінено заголовок цього вікна. Зверніть увагу, що нове значення заголовка передавалося функції у вигляді звичайної рядкової константи.
Характеристики оточення

Наш наступний приклад показує, як отримати, використовуючи виклик Win32 API функцій, такі характеристики оточення:

  • Версію операційної системи.
  • Тип процесора.
  • Загальний та використовуваний обсяг фізичної та віртуальної пам'яті.

Функції, які використовуються в цьому прикладі, належать бібліотеці Kernel32. Зауважте, що на відміну від більшості випадків у цьому прикладі будуть викликатися не тільки функції, але й процедури, що зберігаються в бібліотеці Kernel32. Почнемо з опису констант, типів та операторів Declare, що передують виклику API функцій:

Для збору інформації про оточення - використовуваного процесора, операційної системи, наявної пам'яті та інших характеристик комп'ютера використовуємотри наступні функції (процедури) Win32 API:

Наведемо процедуру, в якій викликаються зазначені функції API, обробляється отримана інформація, кінцеві результати виводяться у вікно налагодження: