Вот захотелось поэкспериментировать с Bluebottle
Решил сделать следующее:
1. Получить список окон
2. Активировать какое либо окно
и т.д. и т.п.

Написал следующий код (проверял все только под WinAos) который вызывается при нажатии кнопки на моем окне:
## Код:
```
PROCEDURE TestWin(sender, data : ANY);
      VAR
       ss:Utilities.String;
       ww,w:WM.Window;
       i:LONGINT;
      BEGIN
         manager := WM.GetDefaultManager ();
         w:=manager.GetFirst();
         i:=0;
        WHILE w#NIL DO 
         ss:=w.GetTitle();
                  AosOut.String("WinCount =");    AosOut.Int(i,5);IF ss#NIL THEN AosOut.String(ss^); END;            AosOut.Ln;               
INC(i);
         IF i=2 THEN ww:=w; END; (*Выбираем произвольное окно*)
         w:=manager.GetNext(w);
       END;
       IF ww#NIL THEN 
         manager.SetFocus(w);manager.ToFront(w); (*Активируем и "Выпихиваем" на верх*)
      END;
   END TestWin;
```

Кодестественно не работает, срабатывает при вызове manager.GetFirst();
ASSERT ( lock.HasWriteLock() );
в модуле Win32.WindowManager.Mod. Если  ASSERT закоментить то начинает все работать до вызова manager.SetFocus(w); после чего начинаются разные глюки...

ВОПРОС:
Как правильно разлачивать и когда это можно делать (не могу найти где лочится) WriteLock?
Ну и вообще хотелось бы услышать совет как это правильно делать или хотя бы где именно читануть.