[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
Post Reply
User avatar
vietteiv
Quản trị
Quản trị
Posts: 1325
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: 70 times
Contact:

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

Post by vietteiv »

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 5796 times
Attachments
Alert_Window.rar
source code
(17.68 KiB) Downloaded 1791 times
User avatar
NoBi
Quản trị
Quản trị
Posts: 970
Joined: Tue 18/03/2008 1:22 pm
Location: Sài Gòn
Has thanked: 58 times
Been thanked: 68 times
Contact:

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

Post by NoBi »

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

' API declerationsDeclare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongDeclare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, _    ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long ' ConstantsPublic Const GWL_WNDPROC = (-4) ' This we recognize as the constant for accessing the callback addressPrivate Const WM_CLOSE As Long = &H10 ' VariablesPublic lngOldProc As Long ' This is for preserving the old address of the callback Public Function myWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long    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 IfEnd Function
Form code:

Code: Select all

Private Sub Form_Load()        ' Subclass!        lngOldProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf myWindowProc)End Sub Private Sub Form_Unload(Cancel As Integer)        ' Remove Subclass        SetWindowLong Me.hwnd, GWL_WNDPROC, lngOldProcEnd Sub
:>
User avatar
truongphu
VIP
VIP
Posts: 4781
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 525 times

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

Post by truongphu »

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

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Const WM_CLOSE As Long = &H10:Dim u As BooleanPrivate Sub Command1_Click()Dim h&h = FindWindow(vbNullString, "AAAA")DoIf u = True Then Exit DoDoEvents    PostMessage h, WM_CLOSE, 0&, 0&LoopEnd Sub Private Sub Command2_Click()u = TrueEnd Sub
Kết quả tốt!
Attachments
Trao Ðôi Windows.rar
(8.64 KiB) Downloaded 680 times
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
User avatar
NoBi
Quản trị
Quản trị
Posts: 970
Joined: Tue 18/03/2008 1:22 pm
Location: Sài Gòn
Has thanked: 58 times
Been thanked: 68 times
Contact:

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

Post by NoBi »

À, 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: 4781
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 525 times

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

Post by truongphu »

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

    If Msg = WM_CLOSE Then        Exit Function    Else        myWindowProc = CallWindowProc(lngOldProc, hWnd, Msg, wParam, lParam)    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: 970
Joined: Tue 18/03/2008 1:22 pm
Location: Sài Gòn
Has thanked: 58 times
Been thanked: 68 times
Contact:

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

Post by NoBi »

Cửa sổ nào có đến 2 handle vậy bác truongphu?.
:>
User avatar
truongphu
VIP
VIP
Posts: 4781
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 525 times

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

Post by truongphu »

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 706 times
o0o--truongphu--o0o

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

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