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

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

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

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

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

Перевести хэндл окна в строковую переменную
Привет. Не злитесь только. Перелопатил довольно много текста из интернета..но может возраст...

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

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

21
Заблокирован
Автор FAQ
20.09.2012, 00:31 2
Van111, через FindWindow
HWND hwnd- получение...
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
20.09.2012, 15:05  [ТС] 3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
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_Click(class System::Object ^,class System::EventArgs ^)" (?launch_listen_Click@Form1@mail_spam_admin@@$$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_Click(class System::Object ^,class System::EventArgs ^)" (?launch_listen_Click@Form1@mail_spam_admin@@$$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 4
Тебя забанили в MSDN ??? Используй свойство формы Handle.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
20.09.2012, 20:14  [ТС] 5
Цитата Сообщение от 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
Модератор
Эксперт по электронике
8951 / 6717 / 921
Регистрация: 14.02.2011
Сообщений: 23,712
20.09.2012, 20:20 6
Цитата Сообщение от 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  [ТС] 7
Цитата Сообщение от ValeryS Посмотреть сообщение
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.ru/fxref_system.windows.forms/html/86f8ba57-db54-0a05-ffcb-96ce6e1cf474.htm
а нормальную ссылку можно?
0
Модератор
Эксперт по электронике
8951 / 6717 / 921
Регистрация: 14.02.2011
Сообщений: 23,712
20.09.2012, 20:30 8
Цитата Сообщение от 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  [ТС] 9
вроде всё ок , ну почему это работает,
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
20.09.2012, 20:36 10
Van111, любое окно имеет HWND и спокойно определяется либо через тайт окна (формы, диалогового окна, не важно), либо через класснэйм. В MFC скажем в dialog based конфигурации хендл главного окна находится совсем просто CDialog::m_hWnd либо вобще просто m_hWnd (конечно если эту переменную не переобределили в коде то можно и без CDialog:: ). Уверен в КЛИ есть аналог этого, но в кли я не пишу и помочь для него не в состоянии
1
Модератор
Эксперт по электронике
8951 / 6717 / 921
Регистрация: 14.02.2011
Сообщений: 23,712
20.09.2012, 20:47 11
Цитата Сообщение от Van111 Посмотреть сообщение
роде всё ок , ну почему это работает,
Цитата Сообщение от Van111 Посмотреть сообщение
а это нет?
вот из за этого
Цитата Сообщение от Van111 Посмотреть сообщение
Form1
вот тебе пространство имен Form
http://msdn.microsoft.com/ru-r... ex0x9.aspx
как видишь ни одного метода ты должен от формы что то взять
Что не знаю, ибо в КЛИ не силен побаловался месяц и понял это для красявостей, для серьезной работы с системой непригодна (к тому же фрейм ворк за собой тянет)
кстати по слухам Микрософт прекратил поддержку CLI

Добавлено через 4 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
CDialog::m_hWnd
Юра это публичный член класса CWnd, так что в любом окне есть
0
Заблокирован
Автор FAQ
20.09.2012, 21:02 12
Цитата Сообщение от 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 13
Van111, без конкретного кода можно только гадать, где у тебя ошибка. Приведи пример кода.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
20.09.2012, 21:20  [ТС] 14
Цитата Сообщение от 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 15
Вот только в CLI лучше, если твой HWNDWindowMain будет иметь тип не HWND, а UINT_PTR.
0
Заблокирован
Автор FAQ
21.09.2012, 10:57 16
CheshireCat, а явное преобразование к
Цитата Сообщение от Van111 Посмотреть сообщение
(HWND)
просто так написано? HWND не более чем номер окна в системе - при желании можно написать
C++
1
HWND hWnd = (HWND)125
и возможно даже это окно присутсвует в системе
1
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
21.09.2012, 11:19 17
Кстати, я ошибся. HWNDWindowMain должен иметь тип IntPtr.

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

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

Не по теме:

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

0
CheshireCat
21.09.2012, 11:41
  #19

Не по теме:

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

0
Заблокирован
Автор FAQ
21.09.2012, 12:00 20
CheshireCat, ещё раз HWND как и HANDLE тот же (void *) т.е содержит адрес на ячейку с номером окна либо номером открытого процесса и т.д. Меня немного шкалит твоя дурацкая уверенность, что мол ты знаешь всё, а мои слова так сошка. Я не хочу спорить и холиворить, повторюсь просто ещё раз HWND - это номер окна не более, и разрядность совершенно никак не сказывается на этом номере

Не по теме:

PS:

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru