Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Win API


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / WinAPI

Выпуск № 123
от 08.09.2005, 00:51

Администратор:Калашников О.А.
В рассылке:Подписчиков: 257, Экспертов: 26
В номере:Вопросов: 2, Ответов: 7


Вопрос № 25690: Как создавать драйвера для Windows с помощью WinAPI? Как их запускать и использовать?...
Вопрос № 25691: 1. Чем отличается структура WNDCLASSEX от WNDCLASSА? Помню что где-то читал коротенькое и до ужаса простое объяснение приставок ЕХ и А у функций - но найти никак не могу.... :( 2. Т.е. если посмотреть саму структуру то отличаются полями cbSiz...

Вопрос № 25.690
Как создавать драйвера для Windows с помощью WinAPI?
Как их запускать и использовать?
Отправлен: 02.09.2005, 04:44
Вопрос задал: Ahab (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Алексей Смуриков
Здравствуйте, Ahab!
Во-первых надо выбрать среду разработки, а во-вторых скачать Windows DDK библиотеку!
p.s. www.microsoft.com
---------
Speccy Rulezz!!!
Ответ отправил: Алексей Смуриков (статус: Практикант)
Отправлен: 02.09.2005, 07:23
Оценка за ответ: 5
Комментарий оценки:
Ну да... задавая общие (неконкретные) вопросы, получаешь такие же ответы :) просто здесь некоторые этого не понимают

Отвечает: Sager
Здравствуйте, Ahab!
На винапи драйверы не создают, т.к. драйвер работает в нулевом кольце и ничего о них не знает и любое обращение к ним вызовет ошибку. Для этого надо юзать NativeAPI. Ты не указал на каком языке ты хочешь их писать, драйвера-то ведь пишутся в основном на C(++) с большим количеством ассемблерных вставок, либо вообще на чистом асме. Поэтому хорошее знание обоих языков(либо только асма) весьма желательно (если не сказать - обязательно), поэтому вот тебе ссылка - wasm.ru, там лежат хорошие туториалы по написанию драйверов на асме.
Ответ отправил: Sager (статус: 6-ой класс)
Отправлен: 02.09.2005, 08:38
Оценка за ответ: 5
Комментарий оценки:
Имеются ввиду "базовые API"? Ну да, я по неопытности их все одним словом обзываю, наконец-то появилось время заняться ассемблером, книжица давно пылилась "Справочник по базовым функциям API Win NT, 2K" - неделю возился, никак понять не мог почему там нет описаний WNDCLASSEX и т.п. :))))

Отвечает: BOIL
Здравствуйте, Ahab!

При написании драйверов под Windows действительно используются API. Отличие состоит в том, что есть API Win32 а есть API для использования в драйверах.

Они разные и по названиям и по использованию

API для использования в драйверах можно изучить в MSDN , а вот использовать их возможно только лишь в DDK - средства для разработки драйверов, наподобие SDK что для разработки приложений Win32.

Там же можно узнать о том, как сие таинство выполняется

Удачи!..
Ответ отправил: BOIL (статус: 4-ый класс)
Отправлен: 02.09.2005, 11:22
Оценка за ответ: 5


Вопрос № 25.691
1. Чем отличается структура WNDCLASSEX от WNDCLASSА?
Помню что где-то читал коротенькое и до ужаса простое объяснение приставок ЕХ и А у функций - но найти никак не могу.... :(
2. Т.е. если посмотреть саму структуру то отличаются полями cbSize и hIconSm - что это?
3. Для чего параметры cbClsExtra (дополнительные байты для структуры) и cbWndExtra (дополнительные байты для окна) что они из себя представляют и для чего, собственно нужны?
Отправлен: 02.09.2005, 07:44
Вопрос задал: Ahab (статус: 1-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Вiктор
Здравствуйте, Ahab!
вот что было в win32sdk. (и вы это наверно уже знаете)
WNDCLASSEX includes the cbSize member, which specifies the size of the structure, and the hIconSm member, which contains a handle to a small icon associated with the window class.
------
cbWndExtra:
Specifies the number of extra bytes to allocate following the window instance. The operating system initializes the bytes to zero. If an application uses the WNDCLASS structure to register a dialog box created by using the CLASS directive in the resource file, it must set this member to DLGWINDOWEXTRA.
----
я не знаю точно, но могу предположить что использование cbWndExtra как-то связано с диалоговыми окнами.
попробуйте поискать подробнее в MSDN
http://search.microsoft.com/search/results.aspx?qu=cbWndExtra&View=msdn&st=b&c=0&s=1&swc=0
удачи!
---------
BUGи ловить, ловить и ловить. А потом дописать код - и всё с начала...
Ответ отправил: Вiктор (статус: 5-ый класс)
Отправлен: 02.09.2005, 09:25
Оценка за ответ: 4
Комментарий оценки:
Да. В примерах эти значения обнуляются, интересно как и для чего их можно использовать...

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Ahab!
На 1. и 2. вопрос ответ дан
Отвечу на 3.

Данными полями резервируется память в байтах (кратная 4) при создании,
соответственно, класса и окна.
Для записи туда чего-либо надо использовать SetClassLong и SetWindowLong
Для чтения - GetClassLong и GetWindowLong. При этом индексом необходимо
указывать 0 для первого двойного слова, 4 для второго и т.д.

Как это использовать? Ну, например, для того, чтобы хранить там чего-то,
связанного с использованием именно этого окна (чтобы не резервировать
глобальной памяти). Особенно удобно, когда подобных окон много.

Попутно замечу, что при создании окна в структуре окна создается еще одно
двойное слово, доступ к которому осуществляется через индекс GWL_USERDATA,
при этом дополнительного резервирования не требуется.

---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: 2-ой класс)
Отправлен: 02.09.2005, 10:53
Оценка за ответ: 5
Комментарий оценки:
В справочнике нашёл только SetClassWord - но это тоже самое, я так понял, только для слова....
Не понял только где ответ на 1,2... счас на минифоруме гляну...

Отвечает: Bob Johnson
Здравствуйте, Ahab!
cbWndExtra предоставляет возможность каждому окну твоего класса хранить какие-либо дополнительные данные. допустим, ты пишешь свой собственный контрол, пусть это будет прогресс бар. каждый такой контрол должен знать как минимум минимальную, максмимальную и текущую позицию прогресса. для этого нужно три переменных типа int, т.е. 12 байт. а где их разместить? удобнее всего именно в этих дополнительных байтах. кстати, обычно там размещается всего 4 байта (потому что есть ограничение) - указатель на область памяти, которую ты сам себе выделяешь и где уже хранишь все остальное.
cbClsExtra - то же самое, но для класса окна (применяется редко, т.к. разные классы обычно имеют разные оконные процедуры).
Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 02.09.2005, 10:53
Оценка за ответ: 5
Комментарий оценки:
Самое понятное объяснение то которое прочитаешь и не можешь понять как это сам не сообразил таких простых вещей :)
Т.е. конкретно для класса окна они и не используются - выставляются в 0, точно...

Отвечает: Raptor1
Здравствуйте, Ahab!
cbClsExtra
Specifies the number of extra bytes to allocate following the window-class structure. The system initializes the bytes to zero.
cbWndExtra
Specifies the number of extra bytes to allocate following the window instance. The system initializes the bytes to zero. If an application uses WNDCLASS to register a dialog box created by using the CLASS directive in the resource file, it must set this member to DLGWINDOWEXTRA.
//////////////////////////////////////////
cbSize
Specifies the size, in bytes, of this structure. Set this member to sizeof(WNDCLASSEX). Be sure to set this member before calling the GetClassInfoEx function.
hIconSm
Handle to a small icon that is associated with the window class. If this member is NULL, the system searches the icon resource specified by the hIcon member for an icon of the appropriate size to use as the small icon

Ответ отправил: Raptor1 (статус: 6-ой класс)
Отправлен: 03.09.2005, 09:51


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.winapifaq
Отписаться
Вспомнить пароль

В избранное