Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
37 / 37 / 1
Регистрация: 07.09.2010
Сообщений: 752

Получение hWnd окна

17.11.2011, 19:28. Показов 3838. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос в названии темы
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.11.2011, 19:28
Ответы с готовыми решениями:

Получение HWND окна по дескриптору процесса
Помогите пожалуйста, мне надо узнать хэндл окна по дескриптору процесса, возможно ли вообще это сделать?

Найти HWND окна, зная HWND окна, породившего его
Здравствуйте! Имеется основное окно "А". Это окно создаёт новое недочернее окно "Б". Необходимо найти HWND окна "Б",...

HWND hwnd- получение...
Кто - нибудь знеет функцию получения указателя на окно HWND?

15
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
17.11.2011, 19:33
Если явно задан идентификатор окна (не использована константа #PB_Any) то хэндл возвращается как результат работы функции OpenWindow().
Code
1
hWnd = OpenWindow(0, 10, 20...)
Его так же можно получить в любой момент функцией WindowID() из идентификатора окна.
1
37 / 37 / 1
Регистрация: 07.09.2010
Сообщений: 752
17.11.2011, 19:36  [ТС]
Да я это уже понял. Просто пытаюсь инициализировать библиотеку DirectInput вот так
PureBasic
1
2
3
4
5
6
7
8
9
Direct_Input = OpenLibrary(#PB_Any, "dinput8d.dll")
 
Procedure Input_Init(hWnd.l)
  *Function = GetFunction(0, "Init")
  If *Function
    sd = CallFunctionFast(*Function, hWnd)
    ProcedureReturn sd
  EndIf
EndProcedure
В функцию Input_Init пишу Window(0). Но возвращается 0.
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
17.11.2011, 19:38
Le Thaw, нормальная тема, пригодится.
1
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
17.11.2011, 19:58
Цитата Сообщение от Le Thaw Посмотреть сообщение
Просто пытаюсь инициализировать библиотеку DirectInput вот так
В dinput8d.dll точно есть функция с именем Init?
Этот код ее находит?
PureBasic
1
2
3
4
5
6
7
8
If OpenLibrary(0, "dinput8d.dll") 
  ExamineLibraryFunctions(0) 
  While NextLibraryFunction() 
    Debug LibraryFunctionName() 
  Wend 
Else
  Debug "Нет доступа к dll."
EndIf
На моем компе похоже вообще нет такого файла.
1
37 / 37 / 1
Регистрация: 07.09.2010
Сообщений: 752
17.11.2011, 20:11  [ТС]
Нет, не так называется, а так DirectInputCreate. Щас пытаюсь параметры найти для нее. А библиотека эта из сдк DX9.
Вот так щас.
PureBasic
1
2
3
4
5
6
7
8
9
10
Direct_Input = OpenLibrary(0, "dinput8d.dll")
 
Procedure Input_Init(hWnd.l)
  *Function = GetFunction(0, "DirectInputCreate")
  If *Function
    HINSTANCE = GetModuleHandle_(0)
    sd = CallFunctionFast(*Function, HINSTANCE, $0800, *D_Input, 0)
    ProcedureReturn sd
  EndIf
EndProcedure
Но вот что-то он ее не находит. И 0x0800 на pb правильно как $0800?
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
17.11.2011, 20:29
Функция http://msdn.microsoft.com/en-u... 86964.aspx

Цитата Сообщение от Le Thaw Посмотреть сообщение
Но вот что-то он ее не находит.
Потому что она в DINPUT_A.DLL.
PureBasic
1
2
3
4
5
6
7
8
#DIRECTINPUT_VERSION = $0700
 
DirectInput.IDirectInput8A
Unknown.IUnknown
 
hinst = GetModuleHandle_(0)
 
Result = DirectInputCreate_(hinst, #DIRECTINPUT_VERSION, @DirectInput, @Unknown)

Цитата Сообщение от Le Thaw Посмотреть сообщение
И 0x0800 на pb правильно как $0800?
Второй вариант.
1
37 / 37 / 1
Регистрация: 07.09.2010
Сообщений: 752
17.11.2011, 20:31  [ТС]
А у меня такой библиотеки нет. Откуда она?
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
17.11.2011, 20:39
Цитата Сообщение от Le Thaw Посмотреть сообщение
А у меня такой библиотеки нет.
Судя по всему, именно в ней находится эта функция?
Точно нужна DirectInputCreate()?

Добавлено через 1 минуту
Может нужна Direct3DCreate9()?
1
37 / 37 / 1
Регистрация: 07.09.2010
Сообщений: 752
17.11.2011, 20:43  [ТС]
Я уже и не знаю. На разных сайтах написано по разному. Вообщем это муторно. Легче написать эту библиотеку самому(
0
1 / 1 / 0
Регистрация: 28.07.2018
Сообщений: 124
19.07.2022, 12:41
Добрый день ! У меня такой вопрос: Как отобразить HWND под курсором ?
Есть WINAPI функция WindowFromPoint , аргументом которой служит WINAPI структура "POINT". Она работает, но по умолчанию мы получим HWND окна под точкой с координатами 0,0. Вот пример:

PureBasic
1
2
3
4
5
6
7
8
9
OpenWindow(0, 0, 0, 220, 100, "HWND", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget  (1, 80, 40, 200, 30, "")
 
Repeat
  Event = WindowEvent()
  HWND = WindowFromPoint_(POINT)
  SetGadgetText(1, Str(HWND))
  Delay(40)
Until Event = #PB_Event_CloseWindow
Однако, задача - получать хендл окна, находящегося под курсором. В найденных мной примерах приводится вариант на С++. Там достаточно просто указать координаты для структуры POINT. Т.е. примерно так: WindowFromPoint_(POINT(100, 120)). В пурике такой вариант не прокатывает, потому что есть нативная функция Point(x, y), возвращающая цвет пикселя в координате x, y. Пробовал сделать вот так:

PureBasic
1
2
3
4
5
6
7
8
9
10
11
OpenWindow(0, 0, 0, 220, 100, "HWND", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget  (1, 80, 40, 200, 30, "")
test.POINT
Repeat
  Event = WindowEvent()
  test\x = DesktopMouseX()
  test\y = DesktopMouseY()
  HWND = WindowFromPoint_(test)
  SetGadgetText(1, Str(HWND))
  Delay(40)
Until Event = #PB_Event_CloseWindow
тоже не выходит. Возвращает 0 постоянно. Как же структуре POINT придать значения координат курсора мыши ???
0
Эксперт по электронике
6795 / 3222 / 335
Регистрация: 28.10.2011
Сообщений: 12,582
Записей в блоге: 7
19.07.2022, 14:13
Как отследить события чужого окна?

В PB функция WindowFromPoint принимает 8-ми байтную переменную. Передать ее можно по разному
PureBasic
1
HWND = WindowFromPoint_(test\x | test\y << 32)
PureBasic
1
HWND = WindowFromPoint_(DesktopMouseX() | DesktopMouseY() << 32)
PureBasic
1
HWND = WindowFromPoint_(PeekQ(test))
1
1 / 1 / 0
Регистрация: 28.07.2018
Сообщений: 124
19.07.2022, 14:24
Благодарю !!! Теперь действительно всё верно отображается !!! Попытаюсь ещё разобраться в сути происходящего. У меня пока недостаточно знаний. Если я правильно понимаю, это какой-то битовый сдвиг... Но, вот, что к чему и почему это работает именно так, я пока не в силах понять. Буду разбираться что это такое. Если не трудно, не могли бы объяснить теорию этого сдвига ? Если, конечно, это можно объяснить как-то просто. Если нет, то буду рыть сам. А, вообще, за подсказку премного благодарен !!!
0
Эксперт по электронике
6795 / 3222 / 335
Регистрация: 28.10.2011
Сообщений: 12,582
Записей в блоге: 7
19.07.2022, 15:04
Может станет понятнее
PureBasic
1
2
3
4
5
6
7
8
9
10
11
x.l = $10
y.l = $20
z.q = x | y << 32
 
Debug "x = "+Hex(x, #PB_Long)
Debug "y = "+Hex(y, #PB_Long)
Debug "z = "+Hex(z, #PB_Quad)
Debug "Bin"
Debug "x = "+RSet(Bin(x, #PB_Long), 64, "0")
Debug "y = "+RSet(Bin(y, #PB_Long), 64, "0")
Debug "z = "+RSet(Bin(z, #PB_Quad), 64, "0")
PureBasic
1
2
3
4
5
x=1
For i=0 To 7
  Debug RSet(Bin(x), 8, "0")
  x<<1
Next
0
1 / 1 / 0
Регистрация: 28.07.2018
Сообщений: 124
19.07.2022, 16:10
Получается следующее: если число представлено 4-х байтовым типом Long, то <<32 превращает его из четырёхбайтового в восьмибайтовый тип Quad, просто добавляя при этом в начало ещё 32 нуля ? Я правильно понял смысл ? Видимо, при этом, выделяя ему другую ячейку памяти размером 8 байт...
0
Эксперт по электронике
6795 / 3222 / 335
Регистрация: 28.10.2011
Сообщений: 12,582
Записей в блоге: 7
19.07.2022, 17:39
Цитата Сообщение от antro735 Посмотреть сообщение
если число представлено 4-х байтовым типом Long, то <<32 превращает его из четырёхбайтового в восьмибайтовый тип Quad
Это <<32 сдвиг влево на 32 бита (4 байта).
Сдвиг только перемещает биты, а не расширяет размер переменной.
Для восьмибайтной переменной сдвиг влево на 32 переместит биты с позиции 0 - 31 на 32 - 63.
PureBasic
1
2
3
4
5
6
7
x = 1
y = 32
zl.l = x << y
zq.q = x << y
 
Debug zl
Debug zq
Цитата Сообщение от antro735 Посмотреть сообщение
добавляя при этом в начало ещё 32 нуля
Да.

Цитата Сообщение от antro735 Посмотреть сообщение
Видимо, при этом, выделяя ему другую ячейку памяти размером 8 байт...
Нет. Тип переменной не меняется.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.07.2022, 17:39
Помогаю со студенческими работами здесь

Подскажите функцию для получения HWND текущего окна, или по названию окна (для экспорта в VFP6)
пусто

Дескриптор окна HWND
Нужно сделать так, чтобы первый раз, при нажатии пункта меню, внешняя программа запускалась, а второй раз ей посылалось бы сообщение. ...

Получить HWND окна
Задача такова - загрузить динамическую dll в чужое приложение и получить HWND окна в которое загрузится dll. dll я загрузил, проверил...

Получить hwnd окна
Допустим я нахожу hwnd главного окна по названию его класса HWND window=FindWindowEx(NULL,NULL,&quot;my_class&quot;,NULL); У етого...

Получение hWnd из textbox и делаем активное окно
Собственно нужно получить из textbox hWnd и по нему сделать окно активным. Вот что у меня пока что получилось, завис на последнем клике...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru