Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12

Хэндл окна формы

19.09.2012, 19:56. Показов 5139. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как получить HWND формы?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.09.2012, 19:56
Ответы с готовыми решениями:

Как получить хэндл окна?
Хочу написать чит для какой-нибудь игрушки. Проблемы:1) Как получить хэндл окна. Нашёл пример на delphi ,в паскале не сработало, и модулей...

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

Узнать хэндл окна и отправить нажатие клавиш
Мне нужно отправить текст программе не активирую саму программу у меня есть хэндл программы но нет хэндла текстового поля нужно узнать...

21
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
20.09.2012, 00:31
Van111, через FindWindow
HWND hwnd- получение...
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
20.09.2012, 15:05  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Van111, через FindWindow
думаете я так не пробовал)),студия 10 блокирует

C++
1
 HWND MainHwnd = FindWindowA(0,"Form1");
журнал компиляции
------ Построение начато: проект: mail_spam_admin, Конфигурация: Debug Win32 ------
1> mail_spam_admin.cpp
1>c:\projects\mail_spam_admin\mail_spam_ admin\Form1.h(484): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files\Microsoft Visual Studio 10.0\VC\include\string.h(105): см. объявление "strcpy"
1>mail_spam_admin.obj : error LNK2028: ссылка на неразрешенную лексему (0A00009D) "extern "C" struct HWND__ * __stdcall FindWindowA(char const *,char const *)" (?FindWindowA@@$$J18YGPAUHWND__@@PBD0@Z) в функции "private: void __clrcall mail_spam_admin::Form1::launch_listen_Cl ick(class System::Object ^,class System::EventArgs ^)" (?launch_listen_Click@Form1@mail_spam_ad min@@$$FA$AAMXP$AAVObject@System@@P$AAVE ventArgs@4@@Z)
1>mail_spam_admin.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" struct HWND__ * __stdcall FindWindowA(char const *,char const *)" (?FindWindowA@@$$J18YGPAUHWND__@@PBD0@Z) в функции "private: void __clrcall mail_spam_admin::Form1::launch_listen_Cl ick(class System::Object ^,class System::EventArgs ^)" (?launch_listen_Click@Form1@mail_spam_ad min@@$$FA$AAMXP$AAVObject@System@@P$AAVE ventArgs@4@@Z)
1>C:\Projects\mail_spam_admin\Debug\mail _spam_admin.exe : fatal error LNK1120: 2 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


Добавлено через 25 секунд
с win приложением или с консолью это проходит
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
20.09.2012, 15:44
Тебя забанили в MSDN ??? Используй свойство формы Handle.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
20.09.2012, 20:14  [ТС]
Цитата Сообщение от CheshireCat Посмотреть сообщение
Тебя забанили в MSDN ??? Используй свойство формы Handle.
думаеш я до этого не дадумался?
C++
1
 HWND MainHwnd = Form1->Handle;
журнал
1>------ Построение начато: проект: mail_spam_admin, Конфигурация: Debug Win32 ------
1> mail_spam_admin.cpp
1>c:\projects\mail_spam_admin\mail_spam_ admin\Form1.h(335): error C2275: mail_spam_admin::Form1: недопустимое использование этого типа в качестве выражения
1>c:\projects\mail_spam_admin\mail_spam_ admin\Form1.h(335): error C2227: выражение слева от "->Handle" должно указывать на тип класса, структуры или объединения либо на универсальный тип
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========



Цитата Сообщение от CheshireCat Посмотреть сообщение
в MSDN
у меня вроде как CLI
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
20.09.2012, 20:20
Цитата Сообщение от Van111 Посмотреть сообщение
у меня вроде как CLI
и что в МСДНе кли отменили?

Добавлено через 3 минуты
например вот нашел за 5 минут в MSDN
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.ru/fxref_system.windows.forms/html/86f8ba57-db54-0a05-ffcb-96ce6e1cf474.htm

Добавлено через 1 минуту
та же статья в интернете
http://msdn.microsoft.com/ru-r... andle.aspx
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
20.09.2012, 20:27  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.ru/fxref_system.windows.forms/html/86f8ba57-db54-0a05-ffcb-96ce6e1cf474.htm
а нормальную ссылку можно?
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
20.09.2012, 20:30
Цитата Сообщение от Van111 Посмотреть сообщение
а нормальную ссылку можно?
это ссылка на локальный MSDN
чтобы показать cli в MSDN присутсвует
ниже Он лайн
еще раз
http://msdn.microsoft.com/ru-r... andle.aspx
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
20.09.2012, 20:35  [ТС]
вроде всё ок , ну почему это работает,
C++
1
windowHandle = (int) this->Handle;
а это нет?
C++
1
windowHandle = (int) Form1->Handle;
Добавлено через 32 секунды
min\Form1.h(335): error C2275: mail_spam_admin::Form1: недопустимое использование этого типа в качестве выражения
1>c:\projects\mail_spam_admin\mail_spam_ admin\Form1.h(335): error C2228: выражение слева от ".Handle" должно представлять класс, структуру или объединение
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
20.09.2012, 20:36
Van111, любое окно имеет HWND и спокойно определяется либо через тайт окна (формы, диалогового окна, не важно), либо через класснэйм. В MFC скажем в dialog based конфигурации хендл главного окна находится совсем просто CDialog::m_hWnd либо вобще просто m_hWnd (конечно если эту переменную не переобределили в коде то можно и без CDialog:: ). Уверен в КЛИ есть аналог этого, но в кли я не пишу и помочь для него не в состоянии
1
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
20.09.2012, 20:47
Цитата Сообщение от Van111 Посмотреть сообщение
роде всё ок , ну почему это работает,
Цитата Сообщение от Van111 Посмотреть сообщение
а это нет?
вот из за этого
Цитата Сообщение от Van111 Посмотреть сообщение
Form1
вот тебе пространство имен Form
http://msdn.microsoft.com/ru-r... ex0x9.aspx
как видишь ни одного метода ты должен от формы что то взять
Что не знаю, ибо в КЛИ не силен побаловался месяц и понял это для красявостей, для серьезной работы с системой непригодна (к тому же фрейм ворк за собой тянет)
кстати по слухам Микрософт прекратил поддержку CLI

Добавлено через 4 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
CDialog::m_hWnd
Юра это публичный член класса CWnd, так что в любом окне есть
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
20.09.2012, 21:02
Цитата Сообщение от ValeryS Посмотреть сообщение
Юра это публичный член класса CWnd, так что в любом окне есть
- ну я и писал что можно вызвать как член CDialog если скажем в коде не начудили и не прписали скажем HWND m_hWnd = FindWindow(NULL,"Search"), то далее в коде m_hWnd в общем случае не будет соответвовать CDialog::m_hWnd (либо если хотим родителя CWnd::m_hWnd) то тогда надо раскрытие видимости, можно даже и так ::m_hWnd.
За m_hWnd чтобы Ван поискал аналогичную переменную в проекте кли, вот и всё

Добавлено через 40 секунд
Van111, какой тайтл у твоей формы?
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
20.09.2012, 21:11
Van111, без конкретного кода можно только гадать, где у тебя ошибка. Приведи пример кода.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
20.09.2012, 21:20  [ТС]
Цитата Сообщение от CheshireCat Посмотреть сообщение
Van111, без конкретного кода можно только гадать, где у тебя ошибка. Приведи пример кода.
C++
1
HWND x=Form1->Handle;
1>------ Построение начато: проект: mail_spam_admin, Конфигурация: Debug Win32 ------
1> mail_spam_admin.cpp
1>c:\projects\mail_spam_admin\mail_spam_ admin\Form1.h(337): error C2275: mail_spam_admin::Form1: недопустимое использование этого типа в качестве выражения
1>c:\projects\mail_spam_admin\mail_spam_ admin\Form1.h(337): error C2227: выражение слева от "->Handle" должно указывать на тип класса, структуры или объединения либо на универсальный тип
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

всё работает , всем спасибо
вот решение


C++
1
2
3
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
                HWNDWindowMain =(HWND)(int)this->Handle;
             }
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
21.09.2012, 09:51
Вот только в CLI лучше, если твой HWNDWindowMain будет иметь тип не HWND, а UINT_PTR.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
21.09.2012, 10:57
CheshireCat, а явное преобразование к
Цитата Сообщение от Van111 Посмотреть сообщение
(HWND)
просто так написано? HWND не более чем номер окна в системе - при желании можно написать
C++
1
HWND hWnd = (HWND)125
и возможно даже это окно присутсвует в системе
1
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
21.09.2012, 11:19
Кстати, я ошибся. HWNDWindowMain должен иметь тип IntPtr.

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
CheshireCat, а явное преобразование ... просто так написано? HWND не более чем номер окна в системе...
Тут существует тонкий момент, связанный с разрядностью IntPtr и HWND на различных платформах. При насильственном преобразовании запросто можно получить потерю данных.

Насчет "не более чем номер окна в системе" - это неверно. Верно так: HWND - это уникальный идентификатор окна в системе. Смысл же этого идентификатора - будет ли это номер, либо индекс в какой-нибудь внутренней таблице ядра, или еще что-нибудь, - нам неведом и никто никаких гарантий не дает, этим идентификатором заведует ядро.
1
21.09.2012, 11:27

Не по теме:

CheshireCat, HWND это просто номер и никаких граблей с тем хранить его как int либо как HWND не существует (за 10 лет своей практики по крайней мере я не встретил)

0
21.09.2012, 11:41

Не по теме:

Значит, все еще впереди :-) Полагаю, упомянутые 10 лет практики были на 32-разрядных системах? Тогда да, все хорошо - разрядность совпадает.
Во всяком случае, код TC из сообщения #14 будет по-разному работать на 32- и на 64-разрядных системах. Допускаю, что это различие может проявиться не с первого раза, и может, даже не с десятого или сотого... но - оно есть! И "рвануть" может по закону подлости в самый неподходящий момент.

0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
21.09.2012, 12:00
CheshireCat, ещё раз HWND как и HANDLE тот же (void *) т.е содержит адрес на ячейку с номером окна либо номером открытого процесса и т.д. Меня немного шкалит твоя дурацкая уверенность, что мол ты знаешь всё, а мои слова так сошка. Я не хочу спорить и холиворить, повторюсь просто ещё раз HWND - это номер окна не более, и разрядность совершенно никак не сказывается на этом номере

Не по теме:

PS:

Цитата Сообщение от CheshireCat Посмотреть сообщение
И "рвануть" может по закону подлости в самый неподходящий момент.
- рвёт оно обычно у тех кто пишет дурацкие раздутые коды с перестраховками от хз знает чего ввиду этого обвешивая код ненужным, зачастую используя юникод где без него было бы в 100 раз легче и т.д.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.09.2012, 12:00
Помогаю со студенческими работами здесь

Как получить хэндл меню окна Excel'a?
Подскажите,как получить хэндл меню окна Excel'a? Пробую такой код: hWindow = FindWindow(vbNullString, 'Microsoft Excel - 123.xls') ...

Как зная ProcessID получить хэндл окна?
Как зная ProcessID получить хэндл окна?

Как правильно получить хэндл окна по его заголовку?
Вроде бы все просто, FindWindow(nil,'Wind1'); Но, наверное, я что-то не так понял, потому что: h:=FindWindow(nil,'prog'); ...

Как узнать имя окна (обьекта), зная его хэндл?
Допустим, хэндл окна я узнаю так: HANDLE h=WindowFromPoint(Mouse->CursorPos); Класс так: GetClassName(h,p,100); А как узнать имя...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru