Полностью парозрачное окно, но при этом кликабельное...

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Полностью парозрачное окно, но при этом кликабельное...

Сообщение CodeName33 » 30.04.2010 (Пт) 14:00

Добрый день всем.
Интересует сабж, возможно ли? Мне казалось, что видел подобное когда-то, но сейчас не найти. Для чего надо, сейчас объясню. Решил сделать "браузер" который не будет отображаться в программах удалённого слежения, типа Radmin. Основная идея в том, что окно само по себе не видимое, а его содержимое рисуется в оверлей первичного адаптера через DrawToBitmap. Всё в принципе работает, но вот для взаймодейсвтвия с польователем хотелось бы, чтобы он кликал по настоящим контролам в этом самом невидимом окне, пробовал сделать другое окно с транзитом сообщений в нужное, но там свои грабли. Пытался сделать путём установки Opacity в 0.1, но окно, хоть и визуально не видно, но контролы постоянно обновляются под низом и скидывают overlay - получается мерцание очень некрависвое. Поэтому хочется, чтобы окно было полностью прозрачным и не пыталось обновляться, в то время как его контролы получали бы клики. Есть идеи?
Программисты не глючат - глючат компиляторы...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Полностью парозрачное окно, но при этом кликабельное...

Сообщение Денис » 30.04.2010 (Пт) 14:12

CodeName33 писал(а):Есть идеи?

Есть.
Ну и сделайте полностью в оверлее весь браузер.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Re: Полностью парозрачное окно, но при этом кликабельное...

Сообщение CodeName33 » 30.04.2010 (Пт) 14:26

Денис писал(а):Ну и сделайте полностью в оверлее весь браузер.

Всмысле? Сечас так: Есть окно (обычное). В нём браузер. Оно невидимое (Opacity=0.1). Просто рисовать его в оверлей - не проблема. Проблема начинается при попытке сделать взаймодействие пользователя с ним. Под картинкой оверлея находится настоящее окно - когда начинаешь там чтото скроллить/вводить текст, окно пытается обновиться и то, что было нарисовано в оверлее поверх - скидывается, по таймеру перерисовывается и получается мерцание.

Всё,кажется нашёл: Банальная LockWindowUpdate помогает в большинстве случаев избежать мерщания.
Программисты не глючат - глючат компиляторы...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16475
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Полностью парозрачное окно, но при этом кликабельное...

Сообщение Хакер » 30.04.2010 (Пт) 14:54

Что такое «оверлэй первичного адаптера»?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Полностью парозрачное окно, но при этом кликабельное...

Сообщение MIT » 30.04.2010 (Пт) 14:58

Хакер писал(а):Что такое «оверлэй первичного адаптера»?
Ставлю пирожок на GetDC(0)
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Re: Полностью парозрачное окно, но при этом кликабельное...

Сообщение CodeName33 » 30.04.2010 (Пт) 15:10

MIT писал(а):
Хакер писал(а):Что такое «оверлэй первичного адаптера»?
Ставлю пирожок на GetDC(0)


Неа :) Так будет видно всеми прогами. Вот как не будет:

Код: Выделить всё
DirectDraw = New Device()
DirectDraw.SetCooperativeLevel(Me, CooperativeLevelFlags.Normal)
Dim caps As SurfaceCaps = New SurfaceCaps()
caps.PrimarySurface = True
Dim desc As SurfaceDescription = New SurfaceDescription(caps)
Primary = New Surface(desc, DirectDraw)

DC = Primary.GetDc()
Программисты не глючат - глючат компиляторы...


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 10

    TopList