1

Тема: AHK: Owned Windows

Как изменить окно владелец для окна стороннего приложения?

Owned Windows.

After creating an owned window, an application cannot transfer ownership of the window to another window.

Может я не правильно понял, вроде как написано что окно владелец уже нельзя изменить, но пример со своим окном меняет.

Gui, +HWNDhParentGui 
Gui, Show, w333 h333

Gui, New
Gui, +HWNDhGui +Owner%hParentGui%  
Gui, Show, w222 h222

Sleep 1000
Gui, %hParentGui%:Minimize

Sleep 1000
Gui, %hParentGui%:Show 

Sleep 1000
Gui, %hGui%:-Owner
Gui, %hParentGui%:Minimize
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

2

Re: AHK: Owned Windows

Возможно, имелось в виду, что если окно изначально создано функцией CreateWindowEx как принадлежащее другому, тогда сменить нельзя, не проверял. Попробуй SetWindowLongPtr с ключом GWLP_HWNDPARENT.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: serzh82saratov, 2019-04-07 19:11:56)

Re: AHK: Owned Windows

Неработает, видимо оно работает только с ключами перечисленными для SetWindowLongPtr.


Gui, +HWNDhParentGui 
Gui, Show, w333 h333

Gui, New
Gui, +HWNDhGui +Owner%hParentGui%  
Gui, Show, w222 h222

DllCall("SetWindowLongPtr", "Ptr", hGui, "Int", GWLP_HWNDPARENT := -8, "Ptr", A_ScriptHwnd)
Sleep 1000
Gui, %hParentGui%:Minimize
Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

4

Re: AHK: Owned Windows

Работает:

Gui, Parent:New, +hwndhParent, Owner
Gui, Show, w300 h300

Gui, Owned:New, +hwndhOwned, Child
Gui, Show, w200 h200

DllCall("SetWindowLongPtr", Ptr, hOwned, Int, GWLP_HWNDPARENT := -8, Ptr, hParent)

Sleep, 1000
Gui, Parent:Minimize
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Owned Windows

Что работает?

Gui, Parent:New, +hwndhParent, Owner
Gui, Show, w300 h300

Gui, Owned:New, +hwndhOwned, Child
Gui, Show, w200 h200 

Sleep, 1000
Gui, Parent:Minimize
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: Owned Windows

А у тебя мой и твой последний примеры работают одинаково?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Owned Windows

Да. А как должно, если нигде нет окна владельца.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: Owned Windows

У меня в моём примере сворачиваются оба окна. Ты уверен, что правильно скопировал?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Owned Windows

На х32 неработает, х64 работает.

Но мне надо наоборот открепить окно.

Причём  Gui, +Owner%OwnedId% работает со сторонними окнами, а вот в обратную сторону только со своими.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: Owned Windows

А, всё, на х64 работает со сторонними окнами!

Её можно ка то запустить под х32?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11

Re: AHK: Owned Windows

А, на 32 нужно получать адрес этой функции, напрямую вызывать нельзя.

serzh82saratov пишет:

а вот в обратную сторону только со своими

Ну может это как раз тот самый оговорённый выше случай.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Owned Windows

Note  This function has been superseded by the SetWindowLongPtr function. To write code that is compatible with both 32-bit and 64-bit versions of Windows, use the SetWindowLongPtr function.

Туплю, понял. Спасибо за помощь!

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13

Re: AHK: Owned Windows

teadrinker пишет:

А, на 32 нужно получать адрес этой функции, напрямую вызывать нельзя.

Не понял?

DllCall("SetWindowLong" . (A_PtrSize = 8 ? "Ptr" : ""), Ptr, hOwned, Int, GWLP_HWNDPARENT := -8, Ptr, hParent)
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: AHK: Owned Windows

Так у меня же она и используется?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: Owned Windows

?
У тебя SetWindowLongPtr. На х32 надо SetWindowLong.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16

Re: AHK: Owned Windows

А, ну да, правильно. Не адрес получить, а название заменить.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17

Re: AHK: Owned Windows

Я тебя немного запутал, ремарка отсюда https://docs.microsoft.com/en-us/window … indowlonga.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

18 (изменено: teadrinker, 2019-04-07 20:32:45)

Re: AHK: Owned Windows

Такая же есть и в SetWindowLongPtrA/W.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19

Re: AHK: Owned Windows

serzh82saratov пишет:

DllCall("SetWindowLong" . (A_PtrSize = 8 ? "Ptr" : ""), Ptr, hOwned, Int, GWLP_HWNDPARENT := -8, Ptr, hParent)

Странная вещь, на некоторых сторонних окнах в качестве hParent, Gui думает секунду прежде чем активироваться, теоретически почему так может быть?
Сравнил проблемное окно и окно блокнота с которым нет проблем, по стилям одинаково.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20

Re: AHK: Owned Windows

А чего странного - неофициальное апи.

Do not call SetWindowLongPtr with the GWLP_HWNDPARENT index to change the parent of a child window. Instead, use the SetParent function.

21

Re: AHK: Owned Windows

Только вот SetParent другое делает.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

Re: AHK: Owned Windows

Не вызывайте SetWindowLongPtr с индексом GWLP_HWNDPARENT , чтобы изменить родительский элемент дочернего окна. Вместо этого используйте функцию SetParent .

Это написано просто чтобы была ясность, и не путали с SetParent.
Gui +Owner делает тоже самое.

Malcev пишет:

неофициальное апи.

А как ты понял что неофициальное?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

23

Re: AHK: Owned Windows

serzh82saratov пишет:

А как ты понял что неофициальное?

Потому что оно недокументировано.
А в исходниках автохотки сноска имеется:

// Although MSDN doesn't explicitly document any way to change the owner of an existing
// window, the following method was mentioned in a PDC talk by Raymond Chen.  MSDN does
// say it shouldn't be used to change the parent of a child window, but maybe what it
// actually means is that "HWNDPARENT" is a misnomer; it should've been "HWNDOWNER".
// On the other hand, this method ACTUALLY DOES CHANGE THE PARENT WINDOW if mHwnd is a
// child window and the check above is disabled (at least it did during testing).

24

Re: AHK: Owned Windows

А, понял, его же нет в списке значений.

В общем если где то не работает, то ничего не поделаешь.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

25

Re: AHK: Owned Windows

Заметил с программой такую штуку, если у неё показано модальное окно, то GWLP_HWNDPARENT отлично работает, если программа не отображает своё модальное окно, то появляется задержка активации моего окна. Инжект эту ситуацию никак не меняет. Стили окна программы не меняются. Чтобы это могло быть...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui