1. Пишу программу, которая висит в Tray и что то делает. Для удобства вызова главного окна хочу использовать двойное нажатие Ctrl (НЕ Left Ctrl + Right Ctrl , а именно нажал - отпустил - нажал - отпустил любой Ctrl).
API функцией вряд ли получится зарегистрировать такую комбинацию, а глобальный хук ставить не охото, дабы различные антивирусники не косились на мою прогу.
Единственный вариант (извращенный), который удалось более мение реализовать, это создать что вроде маски ввода:
Есть массив KeyDown(0..3), 0-номер текущей операции. Ячейки 1..3 - по таймеру, в каждом такте таймера записываю состояние клавиши Ctrl (приведенное к виду 1 или 0, где 1-нажата или зажата, 0 - не нажата), и плюсуется действие KeyDown(0)=KeyDown(0)+1.
Когда KeyDown(0)=3, проверяется маска, если KeyDown(1) = 1 и KeyDown(2) = 0 и KeyDown(3) = 1 тогда Мы отловили двойное нажатие Ctrl.
Не правда ли, извращенно?!

Может у кого получше идеи будут?! Прикладываю пример того что я тут описал.
2. Когда форма была свернута (ну или скрыта "в трее"), и мы ее разворачиваем, не всегда она получает фокус. Как бы с этим разобраться. Видил что этот вопрос поднимался неоднократно, но конкретного решения не нашел.
Особенно если открыты какиенибудь Totalcmd или Skype или браузер какойнибудь, то программа вроде разворачивается, но сделать ее активной, (передать ей фокус) так и не получается. Чтобы например нажал два раза Ctrl, открылась форма и без лишнего щелчка по форме (чтобы дать ей фокус) можно было клавишами курсора перемещаться (например) по ListBox'u.
Что уже пытался сделать: всячески комбинировал SetFocus, ZOrder, SetWindowPos, SetForegroundWindow, SetActiveWindow
Максимум что получается, форма разворачивается, и начинает мигать в панели задач, а фокус остается на окне другой программы в которой работал в данный момент.
Если кто то уже имел такую задачу, поделитесь опытом.