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

RFpro.ru: Консультации по функциям WinAPI


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

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

Лучшие эксперты по данной тематике

Орловский Дмитрий
Статус: Мастер-Эксперт
Рейтинг: 7249
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 3991
∙ повысить рейтинг »
CradleA
Статус: Бакалавр
Рейтинг: 2051
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / WinAPI

Номер выпуска:611
Дата выхода:06.08.2013, 19:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:62 / 27
Вопросов / ответов:3 / 7

Консультация # 46577: Доброе время суток, эсперты. Буду ссылаться на вопрос номер 45546 Скажу вам, братцы что я в конец запутался. Попробую объяснить поподробней.1) Не могу понять что такое hinstance - в документации написано, что это хэндле. Чёт я запутался. Как я понимаю хэндл это то с помощью чего мы можем управлять окном. Так вот, при создании окна CreateWindo...


Консультация # 46578: Привет эксперты. Буду ссылаться на следующий номер вопроса - 45548 Ниже приведена программа на APi. Помогите разобраться в деталях. Если исп. расширнный стиль окна то в нём есть доп. строка hIconSm. Так вот, если от неё отказаться то будет исп иконка из windowclass.hIcon:= LoadIcon(0,IDI_HAND); , а если заполнить hIconSm, то будет исп. имен...
Консультация # 79828: Здраствуйте уважаемые коллеги У меня следующий вопрос назрел: каким образом я могу отловить момент запуска какой либо программы в Windows (момент создания процесса) и получить над ним контроль (например если запускаемая программа не желательна для выполнения, что бы я мог тут же её придушить так что бы она не успела выполнить ни одного дей...

Консультация # 46577:

Доброе время суток, эсперты. Буду ссылаться на вопрос номер 45546
Скажу вам, братцы что я в конец запутался. Попробую объяснить поподробней.1) Не могу понять что такое hinstance - в документации написано, что это хэндле. Чёт я запутался. Как я понимаю хэндл это то с помощью чего мы можем управлять окном. Так вот, при создании окна CreateWindowsEx - создаёт тоже хэндл. А использую функцию FindWindow - мы находим хэндл. Хэндл чего? CreateWindow или этот самый hinstance. Не совснем понятно. Что этим хэндлом(hinstance) мы можем управлять?
2) Когда подставляем hinstance=0, это подразумевает каждый раз он будет уникальным или нет?
3) Как в дельфи получить это значение, ведь в си он передаётся через главную функцию.
4) Мож. его стоит вообще оставлять пустым или это очень важный параметр?
Плиз, ответьте попунктно, хочу разобраться.

Дата отправки: 18.06.2006, 16:30
Вопрос задал: Александр Михайлович
Всего ответов: 4
Страница онлайн-консультации »


Консультирует estiGi:

Здравствуйте, Александр Михайлович!
ты запутался немного в другом.
HINSTANCE - это уникальный дескриптор приложения. HWND - это дескриптор окна. Почуствуйте разницу smile Еще есть HANDLE - тоже дескриптор, но обычно открытого потока или еще чего то открытого, например, процесса, файла и еще до фига чего.
Само собой, что создавая окно CreateWindows, то получаешь дескриптор окна HWND. Когда тебе нужны ресурсы - ты передаешь HINSTANCE, чтобы система знала, из какого бинарника их тащить. Иногда HINSTANCE легко заменяется дескриптором загруженной библиотеки HMODULE.
2. Если ты передаешь куда то HINSTANCE как 0, то обычно это означает дескриптор текущего приложения
3. хз
4. эт зависит от того, где используешь :)

Консультировал: estiGi
Дата отправки: 18.06.2006, 16:49
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует mix_mix:

Здравствуйте, Александр Михайлович!
1) По сути дела hWnd - указатель на запись в таблице дескрипторов данного приложения, hWnd - дескриптор окна (ну это уже было), hInstance - указатель на начало PE в памяти, тоесть если вывести MessageBox с адресом строки равной hInstance, то мы увидим "MZ", если открыть PE (*.exe) в hex-редакторе, то можно увидеть в начале файла символы MZ (а далее 2 нулевых символа).
2) Не буду повторяться
3) var a: DWORD; ... a:=hInstance; ... Вот и все.
4) Не, не надо. Тогда класс будет привязан к конкретному приложению

Консультировал: mix_mix
Дата отправки: 18.06.2006, 17:42
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Melamed:

Здравствуйте, Александр Михайлович

Уточняя предыдушие ответы по 2 вопросу хочу заметить что если hInstance = 0, то грузится системный ресурс, например, чтобы загрузить стандартный курсос ввиде стрелки, достаточl 5;о написать
hCur = LoadCursor(0 /* = NULL в C++ */,IDC_ARROW);

Консультировал: Melamed
Дата отправки: 18.06.2006, 19:22
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Vest:

Здравствуйте, Александр Михайлович!
1) в помощи Win32 SDK написано:
В главе: Instance Handle
Every window class requires an instance handle to identify the application or DLL that registered the class. As a multitasking system, Windows lets several applications or DLLs run at the same time, so it requires instance handles to keep track of all of them. Windows assigns a handle to each copy of a running application or DLL.

Multiple instances of the same application or DLL all use the same code segment, but each has its own data segment. Windows uses an instance handle to identify the data segment that corresponds to a particular instance of an application or DLL.
Windows passes an instance handle to an application or DLL when the application starts. The application or DLL assigns this instance handle to the class by copying it to the hInstance member of the WNDCLASSEX structure.

В кратце - hInstance - это хендл приложения, а HWND - окна, приложение одно, а окон - много
2) Честно, я немного не понял этой фразы, обычно hInstance делается глобальной переменной (одной) и всё, далее присваивается после функции WinMain, и используется во всём теле программы
3) можно использовать функцию: GetModuleHandle()
4) Насчёт этого не уверен, что можно оставлять пустым, т.к. в помощи по WNDCLASSEX сказано что: hInstance - Identifies the instance that the window procedure of this class is within.
Т.е. раз ноль, то такой процедуры по этому адресу может и не быть

Приложение:

Консультировал: Vest
Дата отправки: 20.06.2006, 14:28
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 46578:

Привет эксперты. Буду ссылаться на следующий номер вопроса - 45548
Ниже приведена программа на APi. Помогите разобраться в деталях.
Если исп. расширнный стиль окна то в нём есть доп. строка hIconSm. Так вот, если от неё отказаться то будет исп иконка из windowclass.hIcon:= LoadIcon(0,IDI_HAND); , а если заполнить hIconSm, то будет исп. именно она , а не просто hIcon. Чёт я не вижу разницы что использовать, но ведь она для чего -то введена. Непонятно для чего нужна тогда hIconSm.
2) Приведите плиз пример загрузки другой иконки, не из стандартных.
Спасибо.

Дата отправки: 18.06.2006, 16:40
Вопрос задал: Александр Михайлович
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Vest:

Здравствуйте, Александр Михайлович!
Согласно помощи если hIconSm оставить NULL, то тогда Windows автоматически именяет размер иконки согласно hIcon. Не факт, что он изменит размер удовлетворительно...

Консультировал: Vest
Дата отправки: 20.06.2006, 15:27
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 79828:

Здраствуйте уважаемые коллеги

У меня следующий вопрос назрел: каким образом я могу отловить момент запуска какой либо программы в Windows (момент создания процесса) и получить над ним контроль (например если запускаемая программа не желательна для выполнения, что бы я мог тут же её придушить так что бы она не успела выполнить ни одного действия)

Дата отправки: 26.03.2007, 17:49
Вопрос задал: VainStatic
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Ross:

Здравствуйте, VainStatic!

Можно запустить цикл(в отдельном потоке например) и искать процесс с заданным именем. Что то типа того, что в приложении.

Приложение:

Консультировал: Ross
Дата отправки: 26.03.2007, 19:53
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует _Alex_:

Здравствуйте, VainStatic!
Что бы отследить запуск какого-либо процесса можно
1) Сделать как сказал предидущий эксперт или
2) Использывать перехват Api-функций.
На эту тему можете посмотреть статьи на сайте www.wasm.ru Раздел Статьи -> Секреты Win32
Прямые ссылки:
http://www.wasm.ru/article.php?article=hidingnt
http://www.wasm.ru/article.php?article=tracknapi
http://www.wasm.ru/article.php?article=apihook_1
http://www.wasm.ru/article.php?article=apihook_2
http://www.wasm.ru/article.php?article=apihook_3

Консультировал: _Alex_
Дата отправки: 27.03.2007, 09:27
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное