• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[VB6]Làm form about autohide + hiệu ứng đẹp

Các ví dụ nho nhỏ và những thứ linh tinh không thuộc nhóm nào
User avatar
vietteiv
Quản trị
Quản trị
Posts: 1323
Joined: Sat 10/02/2007 12:17 am
Location: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 times
Been thanked: 71 times
Contact:

[VB6]Làm form about autohide + hiệu ứng đẹp

Postby vietteiv » Sat 21/03/2009 7:35 pm

Tên chương trình: Làm form about autohide + hiệu ứng đẹp
Ngôn ngữ lập trình: VB6
Tác giả: Sưu tầm
Chức năng: autohide form


hình minh họa đây :)
Screenshot - 21_03_2009 , 7_33_26 PM.jpg
Screenshot - 21_03_2009 , 7_33_26 PM.jpg (26.18 KiB) Viewed 5203 times
Attachments
Alert_Window.rar
source code
(17.68 KiB) Downloaded 1764 times



User avatar
NoBi
Quản trị
Quản trị
Posts: 961
Joined: Tue 18/03/2008 1:22 pm
Location: Sài Gòn
Has thanked: 53 times
Been thanked: 66 times
Contact:

Re: [VB6]Làm form about autohide + hiệu ứng đẹp

Postby NoBi » Mon 23/03/2009 4:40 pm

Tại bác truongphu không lấy được handle (do mấy form đó không có caption) nên không gửi message CLOSE để đóng nó lại được thôi. Tôi dùng spy++ để lấy handle rồi gửi message đóng lại cái một. Sẳn đây bàn luôn cách chống lại thông điệp CLOSE là subclass cái form của mình để chặn thông điệp đó, không cho nó gửi tới form của mình. Xem thêm tại đây: viewtopic.php?f=22&t=92
Module code:

Code: Select all

  1. ' API declerations
  2. Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  3. Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, _
  4.     ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  5.  
  6. ' Constants
  7. Public Const GWL_WNDPROC = (-4) ' This we recognize as the constant for accessing the callback address
  8. Private Const WM_CLOSE As Long = &H10
  9.  
  10. ' Variables
  11. Public lngOldProc As Long ' This is for preserving the old address of the callback
  12.  
  13. Public Function myWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  14.     If Msg = WM_CLOSE Then
  15.         MsgBox ("Xin dung Close em...^!^")
  16.     Else
  17.         ' The CallWindowProc API will execute a callback function when given its location.
  18.         myWindowProc = CallWindowProc(lngOldProc, hwnd, Msg, wParam, lParam)
  19.     End If
  20. End Function

Form code:

Code: Select all

  1. Private Sub Form_Load()
  2.         ' Subclass!
  3.         lngOldProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf myWindowProc)
  4. End Sub
  5.  
  6. Private Sub Form_Unload(Cancel As Integer)
  7.         ' Remove Subclass
  8.         SetWindowLong Me.hwnd, GWL_WNDPROC, lngOldProc
  9. End Sub
:>

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Re: [VB6]Làm form about autohide + hiệu ứng đẹp

Postby truongphu » Mon 23/03/2009 6:40 pm

NoBi wrote:Tại bác truongphu không lấy được handle

Tôi cố ý không dùng dụng cụ bên ngoài đấy chứ

NoBi wrote:Sẳn đây bàn luôn cách chống lại thông điệp CLOSE là subclass cái form của mình để chặn thông điệp đó, không cho nó gửi tới form của mình. Xem thêm tại đây: viewtopic.php?f=22&t=92


Cảm ơn NoBi hướng dẫn, thú thiệt trước có đọc qua, nhưng không mê bằng các việc khác. Giờ nhân tiện có hvt và vt nên đọc và ứng dụng luôn, kể ra học cũng nhanh

If Msg = WM_CLOSE Then
MsgBox ("Xin dung Close em...^!^")
Else
' The CallWindowProc API will execute a callback function when given its location.
myWindowProc = CallWindowProc(lngOldProc, hwnd, Msg, wParam, lParam)
End If

Trên lý thuyết thì: nếu tín hiệu WM_CLOSE thì "Xin dung.." ngoài ra thì gọi HĐH xử lý
Tôi suy nghĩ, Form nhận tín hiệu qua rất nhiều lần để xử lý, sẽ trở nên chậm chạp, mà có chậm là có kẽ hở, vậy tín hiệu WM_CLOSE của ta nhân đấy mà lọt vào!

Sau đây là 2 project:
* project NoBi không cho Ðóng windows với code chép ở trên và Form.Caption là "AAAA"
* project Lênh Ðóng cu'a sô AAAA với vài dòng code thông thường như sau:

Code: Select all

  1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  2. Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  3. Private Const WM_CLOSE As Long = &H10:
  4. Dim u As Boolean
  5. Private Sub Command1_Click()
  6. Dim h&
  7. h = FindWindow(vbNullString, "AAAA")
  8. Do
  9. If u = True Then Exit Do
  10. DoEvents
  11.     PostMessage h, WM_CLOSE, 0&, 0&
  12. Loop
  13. End Sub
  14.  
  15. Private Sub Command2_Click()
  16. u = True
  17. End Sub


Kết quả tốt!
Attachments
Trao Ðôi Windows.rar
(8.64 KiB) Downloaded 650 times
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
NoBi
Quản trị
Quản trị
Posts: 961
Joined: Tue 18/03/2008 1:22 pm
Location: Sài Gòn
Has thanked: 53 times
Been thanked: 66 times
Contact:

Re: [VB6]Làm form about autohide + hiệu ứng đẹp

Postby NoBi » Tue 24/03/2009 9:56 am

À, em nghĩ đó là do cái Msgbox, chính nó đã làm delay program của mình nên mới bị qua mặt. Thử comment dòng đó đi xem sao?! :)
:>

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Re: [VB6]Làm form about autohide + hiệu ứng đẹp

Postby truongphu » Tue 24/03/2009 2:29 pm

1- Một cửa sổ bao giờ cũng có đến 2 hWnd; tiếc là các tác động trên 2 hWnd nầy đều có kết quả như nhau.
2- Dòng lệnh sau đây là tối ưu

Code: Select all

  1.    If Msg = WM_CLOSE Then
  2.         Exit Function
  3.     Else
  4.         myWindowProc = CallWindowProc(lngOldProc, hWnd, Msg, wParam, lParam)
  5.     End If


Thay Exit Function bằng MsgBox "a" hoặc Text1.text = "a" đều chịu tác động của tấn công dồn dập
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
NoBi
Quản trị
Quản trị
Posts: 961
Joined: Tue 18/03/2008 1:22 pm
Location: Sài Gòn
Has thanked: 53 times
Been thanked: 66 times
Contact:

Re: [VB6]Làm form about autohide + hiệu ứng đẹp

Postby NoBi » Tue 24/03/2009 3:32 pm

Cửa sổ nào có đến 2 handle vậy bác truongphu?.
:>

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Re: [VB6]Làm form about autohide + hiệu ứng đẹp

Postby truongphu » Tue 24/03/2009 3:43 pm

Mọi control, từ form đến button (trừ Label)
giá trị thấp < 1000 thường FindWindow bỏ qua mà chỉ lấy giá trị cao > 60000
Attachments
Toàn Bô HWnd.rar
(1.86 KiB) Downloaded 680 times
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh


Return to “[VB] Mã nguồn linh tinh”

Who is online

Users browsing this forum: No registered users and 0 guests