TOPMOST-окна

Обсуждение программ nnCron и nnCron LITE

TOPMOST-окна

Postby LeXXeR » Fri, 21 Oct 2005, 11:53

Хочу по хоткею делать активное окошко "поверх всех", а при повторном нажатии - убирать этот признак. Делаю так:
Code: Select all
#( hotkey_topmost
WatchHotKey: "{LAUNCH_APP2}"
Action:
        WIN-HWND TOPMOST?
        IF
            WIN-NOTOPMOST: %GetForegroundWindow%
        ELSE
            WIN-TOPMOST: %GetForegroundWindow%
        THEN

)#

Это работает почему-то только в одном направлении - topmost-окном становится, а отключаться не хочет. Что не так?
User avatar
LeXXeR
 
Posts: 32
Joined: Mon, 12 Jul 2004, 11:15
Location: Novosibirsk, Russia

Postby VaSiLy » Sun, 23 Oct 2005, 01:17

Аналогичные проблемы

Code: Select all
( CLASSIC-TASK-#-WINDOW_ONTOP
\ текущее активное окно помещается поверх остальных окон.
WatchHotKey: "$t"
Action:
\    ЗАПОЛНЕНИЕ WIN-HWND
     WIN-EXIST: "%GetForegroundWindow%"
     IF
   WIN-HWND TOPMOST?
        IF
            WIN-NOTOPMOST WIN-HWND
        ELSE
            WIN-TOPMOST WIN-HWND
        THEN
     THEN
)#

По моему не заполняется WIN-HWND.

Самое смешное, что простейшая конструкция
WIN-TOPMOST: "%GetForegroundWindow%" рабоает на ура.
VaSiLy
 
Posts: 18
Joined: Tue, 26 Apr 2005, 12:23
Location: Kaluga, Russia

Postby Tez » Sun, 23 Oct 2005, 19:20

> \ ЗАПОЛНЕНИЕ WIN-HWND
- Почитай про GetForegroundWindow в хелпе.

> WIN-NOTOPMOST WIN-HWND
- Это работать точно не будет. По любому.

- А у тебя LeXXeR? Откуда берётся WIN-HWND и где потом хранится?

Вот моя аналогичная задача.
Code: Select all
#( CLASSIC-TASK-#-Put_window_on_top
WatchHotKey: "$t"
Action:
      GetForegroundWindow DUP Pwot-list 2DUP InList?
    IF
     GLOBAL DelNode LOCAL
     WIN-NOTOPMOST
    ELSE
     GLOBAL AppendNode LOCAL
     WIN-TOPMOST
    THEN
)#
Pwot-list определяется, например, в nncron.ini: VARIABLE Pwot-list
Tez
 
Posts: 205
Joined: Mon, 23 Aug 2004, 09:17
Location: Moscow

Postby LeXXeR » Mon, 24 Oct 2005, 09:34

А у тебя LeXXeR? Откуда берётся WIN-HWND и где потом хранится?


Немного не понял вопроса. А как же это (из хэлпа) - "...WIN-HWND - содержит window handle окна. Заполняется после большинства "оконных" команд..."? Я к тому, что зачем еще где-то сохранять хэндл, почему его напрямую из активного окошка взять нельзя?
User avatar
LeXXeR
 
Posts: 32
Joined: Mon, 12 Jul 2004, 11:15
Location: Novosibirsk, Russia

Postby LeXXeR » Mon, 24 Oct 2005, 09:43

2 Tez

Вариант действительно работает. Большое спасибо! :lol:
User avatar
LeXXeR
 
Posts: 32
Joined: Mon, 12 Jul 2004, 11:15
Location: Novosibirsk, Russia

Postby Tez » Mon, 24 Oct 2005, 11:02

А как же это (из хэлпа) - "...WIN-HWND - содержит window handle окна. Заполняется после большинства "оконных" команд..."?
Там специально указано, что WIN-HWND "Заполняется после большинства "оконных" команд". В твоей задаче перед WIN-HWND нет оконных команд.
Для эксперимента, можно попробовать в самом начале задачи по WatchHotKey: WIN-HWND N>S WIN-ACTIVATE.
Я к тому, что зачем еще где-то сохранять хэндл,
Это мои домыслы. Просто я реализовал без TOPMOST?. Не помню уже почему.
почему его напрямую из активного окошка взять нельзя?
Можно с помощью GetForegroundWindow
Tez
 
Posts: 205
Joined: Mon, 23 Aug 2004, 09:17
Location: Moscow

Postby LeXXeR » Mon, 24 Oct 2005, 12:19

Там специально указано, что WIN-HWND "Заполняется после большинства "оконных" команд". В твоей задаче перед WIN-HWND нет оконных команд.
Для эксперимента, можно попробовать в самом начале задачи по WatchHotKey: WIN-HWND N>S WIN-ACTIVATE.


Вот теперь окончательно разобрался!
Решил оставить такой вариант:
Code: Select all
#( hotkey_topmost
WatchHotKey: "{LAUNCH_APP2}"
Action:
        WIN-ACTIVATE: %GetForegroundWindow%   
        WIN-HWND TOPMOST?
        IF
            WIN-NOTOPMOST: %GetForegroundWindow%
        ELSE
            WIN-TOPMOST: %GetForegroundWindow%
        THEN

)#


Tez - моё почтенье и еще раз спасибо!
User avatar
LeXXeR
 
Posts: 32
Joined: Mon, 12 Jul 2004, 11:15
Location: Novosibirsk, Russia

Postby VaSiLy » Mon, 24 Oct 2005, 13:30

:)
Code: Select all
#( CLASSIC-TASK-#-WINDOW_ONTOP
\ текущее активное окно помещается поверх остальных окон.
WatchHotKey: "$t"
Action:
   GetForegroundWindow DUP
   TOPMOST?
   IF
      WIN-NOTOPMOST
   ELSE
      WIN-TOPMOST
   THEN
)#

(буковок меньше :)))))))
VaSiLy
 
Posts: 18
Joined: Tue, 26 Apr 2005, 12:23
Location: Kaluga, Russia

Postby bigcrush » Fri, 28 Oct 2005, 12:36

У меня сделано так, по-моему, немного удобнее. Добавляет к загаловку окна статус topmost-а
Code: Select all
#( r-toggle-topmost
WatchHotKey: "^+a"

: GetWindowText ( hwnd -- a u ) 256 PAD ROT GetWindowTextA DROP PAD ASCIIZ> ;
: SetWindowText ( hwnd a u -- ) DROP SWAP SetWindowTextA DROP ;

Action:
GetForegroundWindow DUP 2DUP \ 3 times of hWnd
GetWindowText S" /(.*?)(\((NO\s)?TOPMOST\))?$/i" RE-MATCH DROP
TOPMOST? \ is foreground window topmost?
IF
  WIN-NOTOPMOST S" %$1%(NO TOPMOST)" EVAL-SUBST SetWindowText
ELSE
  WIN-TOPMOST S" %$1%(TOPMOST)" EVAL-SUBST SetWindowText
THEN

)#
bigcrush
 
Posts: 24
Joined: Wed, 02 Mar 2005, 11:19

Re: TOPMOST-окна

Postby ascerdfg1 » Sun, 03 Feb 2013, 14:00

Короче как всегда читаем хелп, плюёмся, лезем на форум и делаем через жопу с заплатками.
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: TOPMOST-окна

Postby VoidVolker » Sun, 03 Feb 2013, 16:00

В хелпе все нормально. Просто винда внутри так устроена, что вроде вот оно все нужное лежит на поверхности и по отдельности все великолепно работает, а стоит чуть отойти в сторону — как проваливаешься в бездонную пропасть лабиринтов заплаток, костылей и хаков.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 1 guest

cron