1 (изменено: Pokerist, 2012-09-29 13:20:35)

Тема: AHK: Изменить ... очерёдность окна.

Даже не знаю как это правильно называется. z?

Опишу саму проблему.

Есть  программа, которая находит окна по началам их имён. Сейчас возникла ситуация, когда имена всех окон начинаются одинаково. Поэтому она находит только то окно, которое было первым открыто. 

   Хочу сделать так, чтобы подсовывать ему нужное окно в нужный момент. Можно как-то менять свойства окон, чтобы нужное, в данный момент окно, становилось "первым открытым"?

Менять имена окон нельзя.

2

Re: AHK: Изменить ... очерёдность окна.

Pokerist пишет:

Есть  программа, которая находит окна по началам их имён.
...
Менять имена окон нельзя.

Гениально!

3 (изменено: Pokerist, 2012-09-29 14:42:54)

Re: AHK: Изменить ... очерёдность окна.

Да, бывают такие программы по 200$.

Посоветуете что-то для решения проблемы?

4 (изменено: creature.ws, 2012-09-29 15:25:37)

Re: AHK: Изменить ... очерёдность окна.

Если исходить из формулировки задачи используемой вами — решения нет. Если же задаться поиском решения, то нужно быть вами, чтоб знать все нюансы ситуации.

Поставьте под сомнение собственные выводы, пересмотрите каждый пункт условий, возможно на самом деле всё не так печально, как может показаться.

5

Re: AHK: Изменить ... очерёдность окна.

Pokerist пишет:

Да, бывают такие программы по 200$.

Я не это имею ввиду, а формулировку задачи.

6

Re: AHK: Изменить ... очерёдность окна.

В условиях ошибки нет. Как вообще называется "очерёдность" окон?  "z-порядок" какой-нибудь?

7

Re: AHK: Изменить ... очерёдность окна.

Pokerist пишет:

В условиях ошибки нет.

Это вы зря

Как вообще называется "очерёдность" окон?

Как её вы назовёте, так она и поплывёт.

EnumWindows function. Пример:

DllCall("EnumWindows", "Ptr", RegisterCallback("EnumWindowsProc", "Fast"), "Ptr", 0)
MsgBox %output%

EnumWindowsProc(hwnd, lParam)
{
    global output
    WinExist("ahk_id" hwnd)
    WinGetTitle, title
    WinGetClass, class
    if title
        Output .= "HWND: " . hwnd . "`tTitle: " . title . "`tClass: " . class . "`n"
    return true
}

8

Re: AHK: Изменить ... очерёдность окна.

Pokerist пишет:

В условиях ошибки нет.

Тогда, очевидно, что решения нет.

Pokerist пишет:

Как вообще называется "очерёдность" окон?  "z-порядок" какой-нибудь?

Такого понятия нет, windows не запоминает порядок открытия окон. А вот z-order есть и изменять его можно через SetWindowPos.

9

Re: AHK: Изменить ... очерёдность окна.

Александр_ пишет:

Такого понятия нет, windows не запоминает порядок открытия окон. А вот z-order есть и изменять его можно через SetWindowPos.

Но это, похоже, совсем другое. Это то же что меняется  с помощью Winset Bottom или Top.  Не знаю повлияет ли это на очерёдность нахождения окна. Проверю.

10

Re: AHK: Изменить ... очерёдность окна.

creature.ws пишет:

Пример:

DllCall("EnumWindows", "Ptr", RegisterCallback("EnumWindowsProc", "Fast"), "Ptr", 0)
MsgBox %output%

EnumWindowsProc(hwnd, lParam)
{
    global output
    WinExist("ahk_id" hwnd)
    WinGetTitle, title
    WinGetClass, class
    if title
        Output .= "HWND: " . hwnd . "`tTitle: " . title . "`tClass: " . class . "`n"
    return true
}

Не смог понять, что в этом огромном списке я могу почерпнуть, и чем это может помочь.

11 (изменено: creature.ws, 2012-09-29 19:23:20)

Re: AHK: Изменить ... очерёдность окна.

Пример демонстрирует работу функции EnumWindows. Если неназываемое приложение использует стандартные функции, то список hwnd-ов оно, вероятно, получает именно использованием этой функции.

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

12

Re: AHK: Изменить ... очерёдность окна.

С помощью "WinSet, Top,..." действительно удаётся менять  "первое в очереди" окно.

Спасибо за помощь.