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

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

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

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

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

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

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

21
Автор FAQ
 Аватар для -=ЮрА=-
6612 / 4254 / 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
Модератор
Эксперт по электронике
8961 / 6727 / 921
Регистрация: 14.02.2011
Сообщений: 23,748
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
Модератор
Эксперт по электронике
8961 / 6727 / 921
Регистрация: 14.02.2011
Сообщений: 23,748
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
 Аватар для -=ЮрА=-
6612 / 4254 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
20.09.2012, 20:36
Van111, любое окно имеет HWND и спокойно определяется либо через тайт окна (формы, диалогового окна, не важно), либо через класснэйм. В MFC скажем в dialog based конфигурации хендл главного окна находится совсем просто CDialog::m_hWnd либо вобще просто m_hWnd (конечно если эту переменную не переобределили в коде то можно и без CDialog:: ). Уверен в КЛИ есть аналог этого, но в кли я не пишу и помочь для него не в состоянии
1
Модератор
Эксперт по электронике
8961 / 6727 / 921
Регистрация: 14.02.2011
Сообщений: 23,748
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
 Аватар для -=ЮрА=-
6612 / 4254 / 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
 Аватар для -=ЮрА=-
6612 / 4254 / 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
 Аватар для -=ЮрА=-
6612 / 4254 / 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
Ответ Создать тему
Новые блоги и статьи
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели. Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
На любовном киберфронте
Alexander-7 01.04.2025
Недавно на одном малоизвестном сайте знакомств мною заинтересовалась девушка: «Текст немного странный. Но, судя по адресу почты, иностранка», – подумал я. Поколебавшись пару суток, я ответил ей:. . .
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
Мультитенантная архитектура со SpringBoot и PostgreSQL
ArchitectMsa 29.03.2025
SaaS-приложения редко обслуживают одного клиента и обычно они должны поддерживать множество организаций, каждая из которых работает в своём изолированном пространстве. Мультитенантная архитектура. . .
std::span в C++: Производительность и лучшие практики
NullReferenced 28.03.2025
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление. . .
Многопоточность в C#: Threadpool
UnmanagedCoder 28.03.2025
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой. . .
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер