Убрать возможность активации формы

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

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

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Убрать возможность активации формы

Сообщение Res5 » 10.04.2014 (Чт) 6:03

Есть окно 1 с фокусом, поверх этого окна моя программа 2(свойство Me.TopMost = True), которая выводит нужные данные, необходимо сделать так чтобы при переходе/клике в окно 2, фокус с 1 программы не терялся. Возможна ли реализация средствами .net без api ?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.04.2014 (Чт) 9:12

Две программы или две формы?

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Убрать возможность активации формы

Сообщение Res5 » 10.04.2014 (Чт) 16:23

2 программы

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.04.2014 (Чт) 16:27

Что именно ты хочешь сделать? User-transparent форму или нет?

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Убрать возможность активации формы

Сообщение Res5 » 10.04.2014 (Чт) 23:58

Форму, которая не берется в фокус.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Убрать возможность активации формы

Сообщение FireFenix » 11.04.2014 (Пт) 11:04

Res5 писал(а):Форму, которая не берется в фокус.

Зачем?

Неактивные фоновые/топмост окна - прерогатива вирусов
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.04.2014 (Пт) 11:53

Скорее всего, надо копать в сторону
Код: Выделить всё
Protected Overrides ReadOnly Property CreateParams As CreateParams

FireFenix писал(а):Зачем?

Ну, я кучу применений могу найти :)

FireFenix писал(а):Неактивные фоновые/топмост окна - прерогатива вирусов

OSD-окна у вирусов? А вот тутдействительно зачем???

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.04.2014 (Пт) 12:59

Res5 писал(а):Форму, которая не берется в фокус.

Вот так работает:
Код: Выделить всё
Imports Test.WindowStyles
Imports Test.ExtendedWindowStyles

<Flags>
Public Enum WindowStyles
  WS_BORDER = &H800000
  WS_CAPTION = &HC00000
  WS_CHILD = &H40000000
  WS_CHILDWINDOW = &H40000000
  WS_CLIPCHILDREN = &H2000000
  WS_CLIPSIBLINGS = &H4000000
  WS_DISABLED = &H8000000
  WS_DLGFRAME = &H400000
  WS_GROUP = &H20000
  WS_HSCROLL = &H100000
  WS_ICONIC = &H20000000
  WS_MAXIMIZE = &H1000000
  WS_MAXIMIZEBOX = &H10000
  WS_MINIMIZE = &H20000000
  WS_MINIMIZEBOX = &H20000
  WS_OVERLAPPED = &H0
  WS_OVERLAPPEDWINDOW = WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
  WS_POPUP = &H80000000
  WS_POPUPWINDOW = WS_POPUP Or WS_BORDER Or WS_SYSMENU
  WS_SIZEBOX = &H40000
  WS_SYSMENU = &H80000
  WS_TABSTOP = &H10000
  WS_THICKFRAME = &H40000
  WS_TILED = &H0
  WS_TILEDWINDOW = WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
  WS_VISIBLE = &H10000000
  WS_VSCROLL = &H200000
End Enum

<Flags>
Public Enum ExtendedWindowStyles
  WS_EX_ACCEPTFILES = &H10
  WS_EX_APPWINDOW = &H40000
  WS_EX_CLIENTEDGE = &H200
  WS_EX_COMPOSITED = &H2000000
  WS_EX_CONTEXTHELP = &H400
  WS_EX_CONTROLPARENT = &H10000
  WS_EX_DLGMODALFRAME = &H1
  WS_EX_LAYERED = &H80000
  WS_EX_LAYOUTRTL = &H400000
  WS_EX_LEFT = &H0
  WS_EX_LEFTSCROLLBAR = &H4000
  WS_EX_LTRREADING = &H0
  WS_EX_MDICHILD = &H40
  WS_EX_NOACTIVATE = &H8000000
  WS_EX_NOINHERITLAYOUT = &H100000
  WS_EX_NOPARENTNOTIFY = &H4
  WS_EX_OVERLAPPEDWINDOW = WS_EX_WINDOWEDGE Or WS_EX_CLIENTEDGE
  WS_EX_PALETTEWINDOW = WS_EX_WINDOWEDGE Or WS_EX_TOOLWINDOW Or WS_EX_TOPMOST
  WS_EX_RIGHT = &H1000
  WS_EX_RIGHTSCROLLBAR = &H0
  WS_EX_RTLREADING = &H2000
  WS_EX_STATICEDGE = &H20000
  WS_EX_TOOLWINDOW = &H80
  WS_EX_TOPMOST = &H8
  WS_EX_TRANSPARENT = &H20
  WS_EX_WINDOWEDGE = &H100
End Enum

Public Class Form1

Protected Overrides ReadOnly Property CreateParams As CreateParams
  Get
    Dim CP As CreateParams = MyBase.CreateParams

    ' VB.NET Defaults
    '? CType(CP.Style, WindowStyles)
    'WS_MAXIMIZEBOX Or WS_GROUP Or WS_SIZEBOX Or WS_SYSMENU Or WS_DLGFRAME Or WS_BORDER Or WS_CLIPCHILDREN Or WS_CLIPSIBLINGS Or WS_VISIBLE Or WS_CHILD {1456406528}
    '? CType(CP.ExStyle, ExtendedWindowStyles)
    'WS_EX_DLGMODALFRAME Or WS_EX_CONTROLPARENT Or WS_EX_APPWINDOW {327681}

    ' http://www.codeproject.com/Articles/3212/On-Screen-Displays-OSDs
    'CP.Style = WS_VISIBLE Or WS_POPUP
    'CP.ExStyle = WS_EX_LAYERED Or WS_EX_TOOLWINDOW Or WS_EX_TOPMOST Or WS_EX_TRANSPARENT

    CP.ExStyle = CP.ExStyle Or WS_EX_TRANSPARENT Or WS_EX_TOPMOST
    Return CP
  End Get
End Property

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  Me.ShowInTaskbar = False
  Me.Opacity = 0.8
End Sub

End Class
Или, если записать коротко:
Код: Выделить всё
Public Class Form1

Protected Overrides ReadOnly Property CreateParams As CreateParams
  Get
    Dim CP As CreateParams = MyBase.CreateParams
    Const WS_EX_TRANSPARENT As Integer = &H20, WS_EX_TOPMOST As Integer = &H8
    CP.ExStyle = CP.ExStyle Or WS_EX_TRANSPARENT Or WS_EX_TOPMOST
    Return CP
  End Get
End Property

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  Me.ShowInTaskbar = False
  Me.Opacity = 0.8
End Sub

End Class

Ты это хотел?

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Убрать возможность активации формы

Сообщение Res5 » 11.04.2014 (Пт) 19:44

Да то что надо. И еще меня интересует можно ли блочить клик в границах формы?

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Убрать возможность активации формы

Сообщение Res5 » 11.04.2014 (Пт) 19:47

Я планирую отслеживать клик глобально, таким образом фокус в программе под формой сохранится.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.04.2014 (Пт) 20:22

Не понял вопросы.

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Убрать возможность активации формы

Сообщение Res5 » 11.04.2014 (Пт) 21:17

Чтобы клик отслеживался глобально. А вот чтобы по окну под формой ничего не проходило, если клик попадает в граници формы.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.04.2014 (Пт) 22:55

Res5 писал(а):Чтобы клик отслеживался глобально.

Без winapi хук не повесить.

Res5 писал(а):А вот чтобы по окну под формой ничего не проходило, если клик попадает в граници формы.

Ну и чем обычная форма не угодила тогда?

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Убрать возможность активации формы

Сообщение Res5 » 12.04.2014 (Сб) 7:24

Окно без фокуса фризится(.

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Убрать возможность активации формы

Сообщение Res5 » 13.04.2014 (Вс) 4:52

Вобщем я решил свою проблему. Спасибо за помощь.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 14.04.2014 (Пн) 10:05

Как? А то я до сих пор не понял, что ты сделать хотел...

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Убрать возможность активации формы

Сообщение Res5 » 15.04.2014 (Вт) 6:48

Нужна была форма игнорирующая мышь без изменений фокуса. Ну а цель программы - аналог похожий на DX инъекцию c кнопками и нужной инфой.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 39

    TopList