На Висте х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