Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Как определить, активно моё окно или нет Добавлено: 28.09.04 13:42  

Автор вопроса:  Millenium | Web-сайт: www.aliyev.us | ICQ: 629966 
Здрасти! Проблема вто в чём: наверняка многие из авс писали свои шкурки для программ. ВОт я тоже один из таких интузиастов (Проавда старичок этого дела). Только вот недавно я обратил внимание что все другие программы (простинкий пример WinAMP) меняют окраску, тип, цвет или др. своего окна или только его заголовка в зависимости от того, активно-ли данное окно, или оно всё-таки пассивно.
Вот мне нужно узнать как и каким путём сделать это возможно!? Если есть пример кинте на мыло!

Заранее спасибо!

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 crackoff



ICQ: 156165990 

Вопросов: 12
Ответов: 229
 Профиль | | #1 Добавлено: 28.09.04 13:45
Делай GetForegroundWindow и сравнивай его с hWnd своего окна. Если надо, могу кусок кода дать.

Ответить

Номер ответа: 2
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #2 Добавлено: 28.09.04 13:46
Сравнивай GetForegroundWindow с хэндлом своего окна.

PS:
Declare Function GetForegroundWindow Lib "user32.dll" () As Long

Ответить

Номер ответа: 3
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #3 Добавлено: 28.09.04 13:46
Это называется - "дуплетом" :-))

Ответить

Номер ответа: 4
Автор ответа:
 crackoff



ICQ: 156165990 

Вопросов: 12
Ответов: 229
 Профиль | | #4 Добавлено: 28.09.04 13:51
>Это называется - "дуплетом" :-))
Одного зайца :))

Ответить

Номер ответа: 5
Автор ответа:
 crackoff



ICQ: 156165990 

Вопросов: 12
Ответов: 229
 Профиль | | #5 Добавлено: 28.09.04 13:51
Кинь на форму таймер и shape и впиши это:

[CODE]

Private Declare Function GetForegroundWindow Lib "user32" () As Long


Private Sub Timer1_Timer()
If GetForegroundWindow() = Me.hWnd Then
    Shape1.BackColor = &H80000001
Else
    Shape1.BackColor = &H80000002
End If
End Sub

[/CODE]

Ответить

Номер ответа: 6
Автор ответа:
 Millenium



ICQ: 629966 

Вопросов: 118
Ответов: 903
 Web-сайт: www.aliyev.us
 Профиль | | #6
Добавлено: 28.09.04 13:53
Кряк дай плиз!!! Вышли на rashid_aliyev@yahoo.com или на vb@pp.azerenerji.com ! Спасбибо обоим!!! Удачи вам ребята!

Ответить

Номер ответа: 7
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 28.09.04 19:07
Мона еще и GetActiveWindow ;)

Ответить

Номер ответа: 8
Автор ответа:
 Millenium



ICQ: 629966 

Вопросов: 118
Ответов: 903
 Web-сайт: www.aliyev.us
 Профиль | | #8
Добавлено: 29.09.04 11:05
А как без таймера обйотись?
Вот например якобы можно с Private Sub Form_Activate() но и тот не срабатывает :(

Ответить

Номер ответа: 9
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #9
Добавлено: 29.09.04 16:12
Хочешь без таймера ;) А не страшно ;) Тогда подменяй оконную процедуру и отлавливай сообщения окошка ;)

Это конечно же более корректный вариант но я бы не сказал что он проще...

Ответить

Номер ответа: 10
Автор ответа:
 Millenium



ICQ: 629966 

Вопросов: 118
Ответов: 903
 Web-сайт: www.aliyev.us
 Профиль | | #10
Добавлено: 29.09.04 16:26
А не саблогаварит ли достопачтимый sne покозать пример!?

Ответить

Номер ответа: 11
Автор ответа:
 User Unknown



Вечный Юзер!

ICQ: uu@jabber.cz 

Вопросов: 120
Ответов: 3302
 Профиль | | #11 Добавлено: 29.09.04 16:30
Слышь, саблО, гавари или покожи пример! :)))

Ответить

Номер ответа: 12
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #12
Добавлено: 29.09.04 21:13
Люди, а вот подумайте мне оно надо? Что трудно взять любой пример сабклассинга и посмотреть что как и где приходит, и куда дальше в путь уходит? Это же проще не бывает, отследить сообщение WM_ACTIVATE приходящее окошку, а потом посмотреть на wParam и выяснить следующее:

WA_ACTIVE
WA_CLICKACTIVE
WA_INACTIVE

Так что, неужели из-за этой мелочи мне нужно саблоговолить накатать пример?

Ответить

Номер ответа: 13
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #13
Добавлено: 29.09.04 21:15
ой, неверно последнюю строчку написал, надо было так:

Так что, неужели из-за этой мелочи мне нужно саблогаварит накатать пример?

ЗЫ
Если, дорогой RA, ты настаиваешь, я попытаюсь что-нить накатать...

Ответить

Номер ответа: 14
Автор ответа:
 Мулатка



Вопросов: 0
Ответов: 2
 Профиль | | #14 Добавлено: 06.10.04 15:45
sne Ты обещал РА написать пример! А где ОН?

Ответить

Номер ответа: 15
Автор ответа:
 User Unknown



Вечный Юзер!

ICQ: uu@jabber.cz 

Вопросов: 120
Ответов: 3302
 Профиль | | #15 Добавлено: 06.10.04 15:57
Форма

[code]
 Sub Form_Load()
         'Store handle to this form's window
         gHW = Me.hwnd

         'Call procedure to begin capturing messages for this window
         Hook
      End Sub

      Private Sub Form_Unload(Cancel As Integer)
         'Call procedure to stop intercepting the messages for this window
         Unhook
      End Sub


[/code]

Модуль.

[code]
    Option Explicit

      Declare Function CallWindowProc Lib "user32" Alias _
        "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
        ByVal hwnd As Long, ByVal Msg As Long, _
        ByVal wParam As Long, ByVal lParam As Long) As Long

      Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
        (ByVal hwnd As Long, ByVal nIndex As Long, _
        ByVal dwNewLong As Long) As Long

      Public Const WM_ACTIVATEAPP = &H1C
      Public Const GWL_WNDPROC = -4

      Global lpPrevWndProc As Long
      Global gHW As Long

      Public Sub Hook()
         'Establish a hook to capture messages to this window
         lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, _
           AddressOf WindowProc)
      End Sub

      Public Sub Unhook()
         Dim temp As Long

         'Reset the message handler for this window
         temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
      End Sub

      Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, _
        ByVal wParam As Long, ByVal lParam As Long) As Long
         'Check for the ActivateApp message

         If uMsg = WM_ACTIVATEAPP Then
             'Check to see if Activating the application
             If wParam <> 0 Then
                 'Application Received Focus
                 Form1.Caption = "Focus Restored"
             Else
                 'Application Lost Focus
                 Form1.Caption = "Focus Lost"
             End If
         End If

         'Pass message on to the original window message handler
         WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, _
           lParam)
      End Function



[/code]

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам