Hiển thị MessageBox & tự đóng sau khoảng thời gian ấn định

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Dai Minh Kim

Thành viên mới
Tham gia
22/1/20
Bài viết
5
Được thích
11
Do nhu cầu công việc, mình cần 1 MessageBox hiện thì nội dung tin theo mong muốn & sẽ tự đóng lại sau 1 khoảng thời gian ấn định ( tự ấn định luôn :p ).

Mình đã tìm hiểu nhiều trên mạng về Sleep, Wait, TimeSerial, DateAdd, Sendkey ... nhưng không đáp ứng được mong muốn ( có cái chạy được nhưng hoạt động không ổn định )

Với sự trợ giúp từ ChatGPT, mình đã tìm ra được 1 Module toàn vẹn, hoạt động ổn định. Chia sẻ đến các bạn

Code :

Private Declare PtrSafe Function MessageBoxTimeout Lib "user32" Alias "MessageBoxTimeoutA" _
(ByVal hWnd As LongPtr, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long, _
ByVal wLanguageId As Long, ByVal dwMilliseconds As Long) As Long

Private Const MB_SETFOREGROUND = &H100
Private Const MB_TOPMOST = &H40000
Private Const MB_OK = &H0

Public Sub ShowCustomMessageBoxWithTimeout(ContentMessage As String, TimerOut As Integer)

Dim Result As Long

' Hien thi cua so thông báo tùy chinh và tu dóng sau TimerOut giây (miligiây)
Result = MessageBoxTimeout(0, ContentMessage, "Thông Báo", MB_OK + MB_SETFOREGROUND + MB_TOPMOST, 0, 2000)

End Sub

Ps : Lần đầu đăng bài, nếu có sai sót gì mong nhận được sự chỉ giáo của Ad. Thanks
 
Bạn cho file ví dụ đi bạn
 
Upvote 0
Khi bạn làm xong một nhiệm vụ gì đó, và muốn hiện 1 msgbox có nội dung "Hoàn Thành Công Việc", trong vòng 5 giây sau msgbox tự độnng đóng lại. Đây là lúc dùng :

ShowCustomMessageBoxWithTimeout "Hoàn Thành Công Việc", 5000
Xem code thấy phát mệt. Chat GPT gì mà tệ quá
Chỉ cần dùng dòng lệnh vầy là được. Thông báo sẽ tắt sau 10s

With CreateObject("Wscript.shell")
.PopUp("ABC" , 10)
End With
 
Upvote 0
Xem code thấy phát mệt. Chat GPT gì mà tệ quá
Chỉ cần dùng dòng lệnh vầy là được. Thông báo sẽ tắt sau 10s

With CreateObject("Wscript.shell")
.PopUp("ABC" , 10)
End With
Bác có đảm bảo mọi máy tính đều cho quyền chạy Wincript shell không hay nó báo Error 70: Permission denied.
 
Upvote 0
Đúng là ChatGPT, thông tin toàn đi cạo nạo và quét lại trên Internet nên quá hạn chế.

Thử bản xịn hơn dưới đây xem có gì hay hơn không!


 
Lần chỉnh sửa cuối:
Upvote 0
Bác có đảm bảo mọi máy tính đều cho quyền chạy Wincript shell không hay nó báo Error 70: Permission denied.
Chưa lần nào bị lỗi nên cũng không biết sao. Toàn công ty mình sử dụng thấy bình thường. Khi nào gặp lỗi thì mò tiếp.
 
Upvote 0
Trong window nó có một dạng thông báo mà xuất hiện ở góc trái dưới của màn hình. Loại thông báo ý có khi hợp lý hơn trong trường hợp này
 
Upvote 0
VBA nhờ Powershell sẽ làm được. Với mã dưới đây, với Windows 10, 11, hãy gọi thử tục NotifyToast_test.

Hoặc sử dụng thư viện BurnToast và Powershell, sẽ tạo được nhiều thứ hơn.
Hoặc sử dụng Microsoft intune để load Powershell

JavaScript:
Private Sub NotifyToast_test()
  Dim s$
  NotifyToast "C" & ChrW(7843) & "nh b" & ChrW(225) & "o!", "AI " & ChrW(273) & "ang l" & ChrW(224) & "m th" & ChrW(7871) & " gi" & ChrW(7899) & "i tr" & ChrW(7903) & " n" & ChrW(234) & "n nguy hi" & ChrW(7875) & "m h" & ChrW(417) & "n!"
End Sub
Public Function NotifyToast(Optional ByVal title As String = "Excel Application", Optional ByVal msg As String, _
                    Optional ByVal notification_icon As String = "Info", _
                    Optional ByVal app As String = "excel", _
                    Optional ByVal duration As Integer = 10)
Dim s  As String
If notification_icon <> "Info" And notification_icon <> "Error" And notification_icon <> "Warning" Then
    notification_icon = "Info"
End If
s = """powershell.exe"" -Command ""& { "
s = s & "Add-Type -AssemblyName 'System.Windows.Forms'; "
s = s & "$notification = New-Object System.Windows.Forms.NotifyIcon; "
s = s & "$path = (Get-Process -id (get-process " & app & ").id).Path; "
s = s & "$notification.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path); "
s = s & "$notification.BalloonTipIcon  = [System.Windows.Forms.ToolTipIcon]::" & notification_icon & "; "
s = s & "$notification.BalloonTipTitle = " & Text2CodePS(title) & "; "
s = s & "$notification.BalloonTipText = " & Text2CodePS(msg) & "; "
s = s & "$notification.Visible = $true; "
s = s & "$notification.ShowBalloonTip(" & duration & ")"
s = s & " }"""
CreateObject("WScript.Shell").Run s, 0, False
End Function
Private Function Text2CodePS(ByVal text As String)
  Dim L&: text = Replace(text, vbCr, ""): L = Len(text)
  If L < 1 Then Text2CodePS = "''": Exit Function
  Dim i&, s3$, m$, m2$, Lt$, v&, c%
  For i = 1 To L
    v = 0: m = Mid(text, i, 1)
    If i + 1 <= L Then m2 = Mid(text, i + 1, 1) Else m2 = ""
    Select Case m
    Case vbLf: s3 = s3 & IIf(c = 0, "'", IIf(c = 1, "", " + '")) & "`n"
    Case Else
      v = AscW(m): v = IIf(v < 0, v + 65536, v)
      Select Case True
      Case v > 127, m = "`", m = "'", m = """"
        s3 = s3 & IIf(c = 0, "", IIf(c = 1, "'", "") & " + ") & "[char]0x" & Hex(v): c = 2
      Case Else
        s3 = s3 & IIf(c = 0, "'", IIf(c = 1, "", " + '")) & m: c = 1
      End Select
    End Select
    Lt = m:
  Next i
  Text2CodePS = s3 & IIf(c = 0, "''", IIf(c = 1, "'", ""))
End Function
 
Upvote 0
Tên nó là gì vậy bạn có thể chia sẻ để mình tìm hiểu thử.
Dễ mà bạn.
- Lôi cái NotifyIcon vào form.
- Code cho nó:
Mã:
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        NotifyIcon1.ShowBalloonTip(5000, "Thông báo", "Tui là bảng thông báo tự động tắt", ToolTipIcon.Info)
    End Sub
End Class

1685782581007.png
 
Upvote 0
Có thể hướng dẫn tui viết tạo ra DLL không có sử dụng WinForm, tạo một cái calss để hiển thị thôi.
 
Upvote 0
thấy cũng không có gì hay ho cả ... lỡ chơi rồi thì thêm nó vào Bộ Siêu tập MsgBox cho vui

1685796470943.png
 
Lần chỉnh sửa cuối:
Upvote 0
Rảnh tôi phá các kiểu xem nó ra cái gì nó ra cái này ... xong .. xếp vào xó khi cần lôi ra đùng làm thông báo thực hiện xong cũng tạm chút

không có gì hay ho và đáng nghiên cứu cả

1685803131457.png
 
Upvote 0
xóa bài vì không cần thiết
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom