ALERTA ESTILO MSN
pessoal, é o seguinte, estou criando em meu aplicativo um correio interno, para troca de informações referente ao sistema, as mensagens ficam gravadas no banco de dados, e queria emitir um alerta de mensagens não lidas ou recebidas através de um form estilo msn, mas q o mesmo não tire o focu do q o usuário esta usando, tem como ?..ja procurei aqui no forum, mas alguns tópicos do assunto foram excluidos..tbem preciso saber como chamar esse form, seria um timer no form MDI ?
Amigo,
Passei por esse problema em uma empresa de serviços, onde precisava alertar a cada 30 minutos que tinha novas ordens de serviços em aberto.
Solução:
Colocar um timmer no frminicial (mdi):
Dim CARATA As clsmsg
Private Declare Function SendMessage Lib [Ô]user32[Ô] Alias [Ô]SendMessageA[Ô] (ByVal hWnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const WM_SYSCOMMAND = &H112&
Const SC_SCREENSAVE = &HF140&
Para verificar se tem mensagens e retornar no systrei do windows
Private Sub Timer1_Timer()
Dim tempoI As Date
[ô]controle de inatividade
On Error GoTo Errlocalizar
tempoI = Format(Now, [Ô]hh:mm:ss[Ô])
myConSystray.ConnectionString = [Ô]provider=microsoft.jet.oledb.4.0;[Ô] & [Ô] data source=[Ô] & App.Path & [Ô]\dbase\sos.mdb[Ô]
myConSystray.Open
With mycmd
Set .ActiveConnection = myConSystray
.CommandType = adCmdText
.CommandText = [Ô]Select *from oc001 where liquidado <> 1 and consolidado <> 1 [Ô]
Set rssystray = .Execute
End With
With rssystray
If .EOF And .BOF Then
myConSystray.Close
Exit Sub
Else
If tempoI = [Ô]00:00:00[Ô] Or tempoI = [Ô]00:30:00[Ô] _
Or tempoI = [Ô]01:00:00[Ô] Or tempoI = [Ô]01:30:00[Ô] _
Or tempoI = [Ô]02:00:00[Ô] Or tempoI = [Ô]02:30:00[Ô] _
Or tempoI = [Ô]03:00:00[Ô] Or tempoI = [Ô]03:30:00[Ô] _
Or tempoI = [Ô]04:00:00[Ô] Or tempoI = [Ô]04:30:00[Ô] _
Or tempoI = [Ô]05:00:00[Ô] Or tempoI = [Ô]05:30:00[Ô] _
Or tempoI = [Ô]06:00:00[Ô] Or tempoI = [Ô]06:30:00[Ô] _
Or tempoI = [Ô]07:00:00[Ô] Or tempoI = [Ô]07:30:00[Ô] _
Or tempoI = [Ô]08:00:00[Ô] Or tempoI = [Ô]08:00:00[Ô] _
Or tempoI = [Ô]09:00:00[Ô] Or tempoI = [Ô]09:30:00[Ô] _
Or tempoI = [Ô]10:00:00[Ô] Or tempoI = [Ô]10:30:00[Ô] _
Or tempoI = [Ô]11:00:00[Ô] Or tempoI = [Ô]11:30:00[Ô] _
Or tempoI = [Ô]12:00:00[Ô] Or tempoI = [Ô]12:30:00[Ô] _
Or tempoI = [Ô]13:00:00[Ô] Or tempoI = [Ô]13:30:00[Ô] _
Or tempoI = [Ô]14:00:00[Ô] Or tempoI = [Ô]14:30:00[Ô] _
Or tempoI = [Ô]15:00:00[Ô] Or tempoI = [Ô]15:30:00[Ô] _
Or tempoI = [Ô]16:00:00[Ô] Or tempoI = [Ô]16:30:00[Ô] _
Or tempoI = [Ô]17:00:00[Ô] Or tempoI = [Ô]17:30:00[Ô] _
Or tempoI = [Ô]18:00:00[Ô] Or tempoI = [Ô]18:30:00[Ô] _
Or tempoI = [Ô]19:00:00[Ô] Or tempoI = [Ô]19:30:00[Ô] _
Or tempoI = [Ô]20:00:00[Ô] Or tempoI = [Ô]20:30:00[Ô] _
Or tempoI = [Ô]21:00:00[Ô] Or tempoI = [Ô]21:30:00[Ô] _
Or tempoI = [Ô]22:00:00[Ô] Or tempoI = [Ô]22:30:00[Ô] _
Or tempoI = [Ô]23:00:00[Ô] Or tempoI = [Ô]23:30:00[Ô] Then
PlayHitMe
Set CARATA = New clsmsg
CARATA.ShowNews [Ô]Existe ordem de serviços pendente de aprovação, favor verificar[Ô], [Ô]Connect system[Ô], [Ô] & connect system & projeto ares[Ô], [Ô]connect system[Ô], 0, &HFF0000, &HFF00&, [Ô]E:\BRASCOBRA\EXEMPLOS\systray\FUNDO.BMP[Ô], 30, 8000, 20, WP_LowerRight, , , [Ô]Arial red[Ô], , 9
End If
End If
End With
saida:
Set rssystray = Nothing
Set mycmd = Nothing
myConSystray.Close
Errlocalizar:
With Err
If .number <> 0 Then
MsgBox [Ô]Erro ao gerar informação no SysTray[Ô], vbInformation, [Ô]Objetivo[Ô]
.number = 0
GoTo saida
End If
End With
End Sub
Para emiter aviso sonoro como o msn
Sub PlayHitMe()
[ô]emissão de alertas sonoros no visual basic
[ô]está opção faz com que quando o systray e acionado para mensagem de cheques vencidos
[ô]o sistema toque uma musica em formato wav
Dim i As Integer
Dim sFName As String
sFName = App.Path & [Ô] ype.wav[Ô]
i = sndPlaySound(ByVal CStr(sFName), SND_ASYNC)
End Sub
no modulo
Public Declare Function Shell_NotifyIcon Lib _
[Ô]shell32.dll[Ô] Alias [Ô]Shell_NotifyIconA[Ô] _
(ByVal dwMessage As Long, lpData As _
NOTIFYICONDATA) As Long
Public Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONDBLCLK = &H206
Public Const NIM_ADD = &H0
Public Const NIM_DELETE = &H2
Public Const NIM_MODIFY = &H1
Public Const NIF_ICON = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_TIP = &H4
Public Enum Actions
TrayAdd = &H0
TrayModify = &H1
TrayDelete = &H2
End Enum
Public Sub SysTray(Action As Actions, hWnd As _
Long, ToolTip As String, Icon As _
StdPicture)
Dim STray As NOTIFYICONDATA
STray.uID = vbNull
STray.uCallbackMessage = &H200
STray.hWnd = hWnd
STray.hIcon = Icon
STray.szTip = ToolTip & vbNullChar
STray.uFlags = NIF_MESSAGE Or NIF_ICON Or _
NIF_TIP
STray.cbSize = Len(STray)
Select Case Action
Case NIM_ADD
Call Shell_NotifyIcon(NIM_ADD, STray)
Case NIM_MODIFY
Call Shell_NotifyIcon(NIM_MODIFY, STray)
Case NIM_DELETE
Call Shell_NotifyIcon(NIM_DELETE, STray)
End Select
End Sub
em outro modulo para a música
Declare Function sndPlaySound Lib [Ô]winmm.dll[Ô] Alias [Ô]sndPlaySoundA[Ô] (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Segue a .dll e o som
Eu esbarrei em um problema no timer em rede, onde quando tem mais de 1 usuário ao mesmo tempo da conflito de conexão. Eu não analisei como resolver ainda, más é extremante facil
Passei por esse problema em uma empresa de serviços, onde precisava alertar a cada 30 minutos que tinha novas ordens de serviços em aberto.
Solução:
Colocar um timmer no frminicial (mdi):
Dim CARATA As clsmsg
Private Declare Function SendMessage Lib [Ô]user32[Ô] Alias [Ô]SendMessageA[Ô] (ByVal hWnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const WM_SYSCOMMAND = &H112&
Const SC_SCREENSAVE = &HF140&
Para verificar se tem mensagens e retornar no systrei do windows
Private Sub Timer1_Timer()
Dim tempoI As Date
[ô]controle de inatividade
On Error GoTo Errlocalizar
tempoI = Format(Now, [Ô]hh:mm:ss[Ô])
myConSystray.ConnectionString = [Ô]provider=microsoft.jet.oledb.4.0;[Ô] & [Ô] data source=[Ô] & App.Path & [Ô]\dbase\sos.mdb[Ô]
myConSystray.Open
With mycmd
Set .ActiveConnection = myConSystray
.CommandType = adCmdText
.CommandText = [Ô]Select *from oc001 where liquidado <> 1 and consolidado <> 1 [Ô]
Set rssystray = .Execute
End With
With rssystray
If .EOF And .BOF Then
myConSystray.Close
Exit Sub
Else
If tempoI = [Ô]00:00:00[Ô] Or tempoI = [Ô]00:30:00[Ô] _
Or tempoI = [Ô]01:00:00[Ô] Or tempoI = [Ô]01:30:00[Ô] _
Or tempoI = [Ô]02:00:00[Ô] Or tempoI = [Ô]02:30:00[Ô] _
Or tempoI = [Ô]03:00:00[Ô] Or tempoI = [Ô]03:30:00[Ô] _
Or tempoI = [Ô]04:00:00[Ô] Or tempoI = [Ô]04:30:00[Ô] _
Or tempoI = [Ô]05:00:00[Ô] Or tempoI = [Ô]05:30:00[Ô] _
Or tempoI = [Ô]06:00:00[Ô] Or tempoI = [Ô]06:30:00[Ô] _
Or tempoI = [Ô]07:00:00[Ô] Or tempoI = [Ô]07:30:00[Ô] _
Or tempoI = [Ô]08:00:00[Ô] Or tempoI = [Ô]08:00:00[Ô] _
Or tempoI = [Ô]09:00:00[Ô] Or tempoI = [Ô]09:30:00[Ô] _
Or tempoI = [Ô]10:00:00[Ô] Or tempoI = [Ô]10:30:00[Ô] _
Or tempoI = [Ô]11:00:00[Ô] Or tempoI = [Ô]11:30:00[Ô] _
Or tempoI = [Ô]12:00:00[Ô] Or tempoI = [Ô]12:30:00[Ô] _
Or tempoI = [Ô]13:00:00[Ô] Or tempoI = [Ô]13:30:00[Ô] _
Or tempoI = [Ô]14:00:00[Ô] Or tempoI = [Ô]14:30:00[Ô] _
Or tempoI = [Ô]15:00:00[Ô] Or tempoI = [Ô]15:30:00[Ô] _
Or tempoI = [Ô]16:00:00[Ô] Or tempoI = [Ô]16:30:00[Ô] _
Or tempoI = [Ô]17:00:00[Ô] Or tempoI = [Ô]17:30:00[Ô] _
Or tempoI = [Ô]18:00:00[Ô] Or tempoI = [Ô]18:30:00[Ô] _
Or tempoI = [Ô]19:00:00[Ô] Or tempoI = [Ô]19:30:00[Ô] _
Or tempoI = [Ô]20:00:00[Ô] Or tempoI = [Ô]20:30:00[Ô] _
Or tempoI = [Ô]21:00:00[Ô] Or tempoI = [Ô]21:30:00[Ô] _
Or tempoI = [Ô]22:00:00[Ô] Or tempoI = [Ô]22:30:00[Ô] _
Or tempoI = [Ô]23:00:00[Ô] Or tempoI = [Ô]23:30:00[Ô] Then
PlayHitMe
Set CARATA = New clsmsg
CARATA.ShowNews [Ô]Existe ordem de serviços pendente de aprovação, favor verificar[Ô], [Ô]Connect system[Ô], [Ô] & connect system & projeto ares[Ô], [Ô]connect system[Ô], 0, &HFF0000, &HFF00&, [Ô]E:\BRASCOBRA\EXEMPLOS\systray\FUNDO.BMP[Ô], 30, 8000, 20, WP_LowerRight, , , [Ô]Arial red[Ô], , 9
End If
End If
End With
saida:
Set rssystray = Nothing
Set mycmd = Nothing
myConSystray.Close
Errlocalizar:
With Err
If .number <> 0 Then
MsgBox [Ô]Erro ao gerar informação no SysTray[Ô], vbInformation, [Ô]Objetivo[Ô]
.number = 0
GoTo saida
End If
End With
End Sub
Para emiter aviso sonoro como o msn
Sub PlayHitMe()
[ô]emissão de alertas sonoros no visual basic
[ô]está opção faz com que quando o systray e acionado para mensagem de cheques vencidos
[ô]o sistema toque uma musica em formato wav
Dim i As Integer
Dim sFName As String
sFName = App.Path & [Ô] ype.wav[Ô]
i = sndPlaySound(ByVal CStr(sFName), SND_ASYNC)
End Sub
no modulo
Public Declare Function Shell_NotifyIcon Lib _
[Ô]shell32.dll[Ô] Alias [Ô]Shell_NotifyIconA[Ô] _
(ByVal dwMessage As Long, lpData As _
NOTIFYICONDATA) As Long
Public Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONDBLCLK = &H206
Public Const NIM_ADD = &H0
Public Const NIM_DELETE = &H2
Public Const NIM_MODIFY = &H1
Public Const NIF_ICON = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_TIP = &H4
Public Enum Actions
TrayAdd = &H0
TrayModify = &H1
TrayDelete = &H2
End Enum
Public Sub SysTray(Action As Actions, hWnd As _
Long, ToolTip As String, Icon As _
StdPicture)
Dim STray As NOTIFYICONDATA
STray.uID = vbNull
STray.uCallbackMessage = &H200
STray.hWnd = hWnd
STray.hIcon = Icon
STray.szTip = ToolTip & vbNullChar
STray.uFlags = NIF_MESSAGE Or NIF_ICON Or _
NIF_TIP
STray.cbSize = Len(STray)
Select Case Action
Case NIM_ADD
Call Shell_NotifyIcon(NIM_ADD, STray)
Case NIM_MODIFY
Call Shell_NotifyIcon(NIM_MODIFY, STray)
Case NIM_DELETE
Call Shell_NotifyIcon(NIM_DELETE, STray)
End Select
End Sub
em outro modulo para a música
Declare Function sndPlaySound Lib [Ô]winmm.dll[Ô] Alias [Ô]sndPlaySoundA[Ô] (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Segue a .dll e o som
Eu esbarrei em um problema no timer em rede, onde quando tem mais de 1 usuário ao mesmo tempo da conflito de conexão. Eu não analisei como resolver ainda, más é extremante facil
olha tem esse aqui
Tópico encerrado , respostas não são mais permitidas