Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2013, 15:24   #1
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию HINSTANCE и HWND. В чем разница?

Решил освоить WinAPI. Проблема такая.
Есть, собственно две структуры HINSTANCE и HWND. В чем между ними разница, я вот чего понять не могу толком? Я лично понимаю так, что HINSTANCE - это хэндл процесса, а HWND - конкретного окна?

Если это так, то в коде
Код:
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, INT32 iCmdShow)
{
...
HWND hWnd = CreateWindowEx(
		0,
		CLASS_NAME,
		L"This is a string of Unicode.",
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,	CW_USEDEFAULT,	CW_USEDEFAULT,	CW_USEDEFAULT,
		NULL,
		NULL,
		hInstance,
		NULL
		);
...
}
переменная hInstance - это хэндл .exe-шника, который мы запускаем, а hWnd - это хэндл окна, которое создано процессом?
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.

Последний раз редактировалось MooNDeaR; 16.02.2013 в 16:09.
MooNDeaR вне форума Ответить с цитированием
Старый 16.02.2013, 15:37   #2
Alchemic
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 53
По умолчанию

Так точна!
hInstance - хэндл экземпляра приложения, в котором может быть создано множество окон. Каждая кнопочка - уже окно со своим хэндлом.
Alchemic вне форума Ответить с цитированием
Старый 16.02.2013, 16:11   #3
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
hInstance - хэндл экземпляра приложения, в котором может быть создано множество окон. Каждая кнопочка - уже окно со своим хэндлом.
Спасибо. Получается, если я хочу найти кнопочку из другого приложения, я должен найти сначала хендл, описывающий этот процесс, а затем по этому хэндлу искать нужную кнопочку в этом процессе?
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 16.02.2013, 17:48   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

По-моему надо найти хендл главного потока, а потом через EnumThreadWindows искать его окошки. Пример кстати тут выкладывался. Порули поиском по форуму по этому названию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.02.2013, 21:04   #5
Alchemic
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 53
По умолчанию

А вообще, hInstance только называется хэндлом экземпляра приложения. Это так, наследственное. Осталось с 16-ти разрядных винд. Оно обозначает лишь базовый адрес исполняемого файла. И практического толку от него нет. А чтобы найти кнопочку чужого окна можно использовать разные функции перечисления и поиска окон.
Alchemic вне форума Ответить с цитированием
Старый 16.02.2013, 23:06   #6
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Всем спасибо, всем плюсанул.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 17.02.2013, 00:22   #7
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Цитата:
Осталось с 16-ти разрядных винд.
С 16-ти разрядных остался второй инстанс и он не используется.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 17.02.2013, 10:44   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Alchemic Посмотреть сообщение
исполняемого файла. И практического толку от него нет.
Ну, не знаю...
Попытайтесь, например, без него извлечь ресурс из dll-ки.
s-andriano вне форума Ответить с цитированием
Старый 17.02.2013, 12:06   #9
Alchemic
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 53
По умолчанию

Цитата:
Ну, не знаю...
Попытайтесь, например, без него извлечь ресурс из dll-ки.
И зачем нужен hInstance, который
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, INT32 iCmdShow) здесь, для извлечения ресурса из дллки?
Вот пример установки иконки для окна, выдираемой из explorer.exe.
Код:
LoadLibrary("explorer.exe");
SendMessage(hTmpWnd, STM_SETICON, (DWORD)LoadIcon(GetModuleHandle("explorer.exe"),(char*)MAKEINTRESOURCE(252)),0);
Хотя, да, полностью согласен, hInstance использоваться в программе может, например, для извелечения тех же ресурсов из самого модуля исполняемого файла. Другое дело, что его значение в современных виндоуз, в отличие от 16-ти разрядных, совсем не уникально, и соответствует базовому адресу загрузки модуля исполняемого файла, которое по умолчанию, в ОС, для всех исполняемых файлов одинаково, поэтому называть его хэндлом экземпляра приложения не совсем сейчас корректно.

Последний раз редактировалось Alchemic; 17.02.2013 в 12:28.
Alchemic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чем разница? Стремящийся SQL, базы данных 27 02.05.2012 23:28
В чем разница в коде? DimonCry JavaScript, Ajax 0 04.01.2011 18:07
В чем разница? annaangel Общие вопросы Delphi 2 04.11.2009 10:55
в чем разница? Joslen_bomon C++ Builder 2 30.10.2009 11:58
в чем разница? Swool Общие вопросы C/C++ 8 18.07.2008 20:40