ShellHook

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

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

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

ShellHook

Сообщение 1Steps » 23.08.2010 (Пн) 1:01

Запускаю на ХР х32 - работает как часы.
На Висте х64 не совсем корректно. Кто подскажет в чем проблема.

Последовательные действия(на Висте).
1. Запускаю проэкт невидимым.
Всё работает исключительно все процедуры выполняются, эвенты выкидываются и тд.
2. Через определенную комбинацию клавишь делаю проэкт видимым. (Тут начинаются проблемы)
В классе StatusChecker пременная _hwnd больше не меняет своего значения, т.е. хэндл равен всё время моему главному окну. Даже если моя главная форма на заднем плане или возвращена опять в невидимое состояние. Такое чувство, что происходит DeregisterShellHookWindow.
Почему так происходит?
Из кода выброшено всё, что не имеет к проблеме отношения.

Код: Выделить всё
Public Class Form1
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If m.Msg = _message Then
            Select Case m.WParam.ToInt32
                Case API.ShellEvents.HSHELL_REDRAW
                    _statusChecker.Check()
            End Select
        End If
        MyBase.WndProc(m)
    End Sub

    Public Sub New()
        Me.InitializeComponent()
        If My.Settings.UserStartInvisible Then
            Me.WindowState = FormWindowState.Minimized
            Me.ShowInTaskbar = False
        End If
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        _statusChecker = New StatusChecker()
        API.RegisterShellHookWindow(Me.Handle)
        _message = API.RegisterWindowMessage("SHELLHOOK")
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If Not _exit Then
            e.Cancel = True
            Me.Visible = False
            Me.ShowInTaskbar = False
            Exit Sub
        End If
        API.DeregisterShellHookWindow(Me.Handle)
    End Sub

    'Вызывается через комбинацию клавишь
    Private Sub MakeVisible()
        If Not Me.ShowInTaskbar Then
            Me.WindowState = FormWindowState.Normal
            Me.Visible = True
            Me.ShowInTaskbar = True
        End If
    End Sub
End Class


Public Class StatusChecker
    Public Sub New()
      ...
    End Sub

    Public Sub Check()
        ...
        _hwnd = API.GetForegroundWindow()
        txt = API.GetWindowText(_hwnd)
        ...
    End Sub

End Class
Удалена за ненадобностью.

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

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

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

    TopList