Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 21 kết quả

Đề tài: có thể Hook để tìm thời điểm chuẩn bị tắt máy không

  1. #1
    Ngày gia nhập
    12 2008
    Bài viết
    198

    Mặc định có thể Hook để tìm thời điểm chuẩn bị tắt máy không

    VD mình muốn biết chủ nhân sắp tắt máy ( họ ấn vào nút tắt trên màn hình đó ) thì có Hook để theo dõi được không

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Cái này mình không biết có hook được không, nhưng trong Win để quản lí các sự kiện này bạn có thể dùng đến Winlogon Notification packages.

    Bạn search thêm trên MSDN, ( rãnh thì nghiên cứu luôn GINA ) Chúc thành công.

  3. #3
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Nếu ko xét những kiểu tắt máy như rút nguồn, đè nút shutdown 10 giây, ... thì ta có thể hook hàm ExitWindowsEx hoặc sâu hơn là NtShutDownSystem. Nhưng nếu máy chủ chỉ muốn kiểm tra tình trạng tắt máy của máy con thì ta chỉ cần viết một chương trình nhỏ trên máy con để liên tục gửi tín hiệu về máy chủ. Nếu quá thời gian timeout mà máy chủ ko nhận được tín hiệu từ máy con thì có thể coi như máy đó đã bị tắt. Đây là cách mà một số soft quản lý tiệm net hay dùng.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  4. #4
    Ngày gia nhập
    04 2008
    Bài viết
    244

    Nếu ko xét những kiểu tắt máy như rút nguồn, đè nút shutdown 10 giây, ... thì ta có thể hook hàm ExitWindowsEx hoặc sâu hơn là NtShutDownSystem. Nhưng nếu máy chủ chỉ muốn kiểm tra tình trạng tắt máy của máy con thì ta chỉ cần viết một chương trình nhỏ trên máy con để liên tục gửi tín hiệu về máy chủ. Nếu quá thời gian timeout mà máy chủ ko nhận được tín hiệu từ máy con thì có thể coi như máy đó đã bị tắt. Đây là cách mà một số soft quản lý tiệm net hay dùng.
    chào mèoconlongvang,thấy tiêu đề hay thật đó,bạn cho mình biết là liệu có thể chặn để không cho tắt máy không nhỉ,hoặc cho quá trình tắt máy xảy ra chậm hơn

  5. #5
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Rất khó để ngăn ko cho tắt máy bạn à, nếu gọi hàm ExitWindowsEx với cờ là FORCE thì nó sẽ tắt hết các ứng dụng gây chậm trễ quá trình tắt. Cách chặn hàm ExitWindowsEx thì có thể tạm dùng được tuy nhiên ko phải trường hợp nào cũng thành công.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  6. #6
    Ngày gia nhập
    10 2008
    Nơi ở
    sài gòn
    Bài viết
    422

    Mặc định có thể Hook để tìm thời điểm chuẩn bị tắt máy không

    Thủ thuật : Không cho Windows Shutdown

    Ghi chú : Làm sao có thể ngăn được Windows Shutdown khi người dùng muốn Shutdown ? Với kĩ thuật hook (hay còn gọi là Subclass) bạn có thể làm được hơn thế nữa.
    Ở đây khi Shutdown, Windows sẽ gửi 2 Message đến chương trình WM_QUERYENDSESSION và WM_ENDSESSION. Chúng ta chỉ việc chặn 2 Message này lại là xong.

    Thiết kế :

    Code :

    ‘ > Trong Module
    Option Explicit

    Public Const GWL_WNDPROC = (-4)
    Public Const WM_ENDSESSION = &H16
    Public Const WM_QUERYENDSESSION = &H11
    Public WndProc As Long

    Declare 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
    Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

    Public Sub Hook(Lwnd As Long)
    WndProc = SetWindowLong(Lwnd, GWL_WNDPROC, AddressOf WindowProc)
    End Sub

    Public Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If uMsg = WM_QUERYENDSESSION Then
    WindowProc = False'send don't shut down
    Exit Function
    ElseIf uMsg = WM_ENDSESSION Then
    WindowProc = False
    Exit Function
    End If
    WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam)
    End Function



    ‘ > Trong Form

    Option Explicit

    Private Sub Form_Load()
    Hook Me.hwnd
    End Sub

    Private Sub Form_Unload(Cancel As Integer)
    SetWindowLong Me.hwnd, GWL_WNDPROC, WndProc
    End Sub
    thấy thủ thuật này trên caulacboVB

  7. #7
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Ý mình muốn nói là không có cách nào ngăn chặn triệt để người dùng tắt máy cả. Thủ thuật trên chạy khá tốt trong nhiều trường hợp tuy nhiên nó vẫn bị qua mặt như thường. Bạn thử down tool này về vài dùng chức năng tắt máy nhanh xem cách hook kể trên có chặn được ko.

    PS : cái tắt máy nhanh đó tụi mình cũng tham khảo từ code của bác thuongall trên caulacbovb luôn đó.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  8. #8
    Ngày gia nhập
    09 2008
    Bài viết
    328

    @ haian cho mình hỏi là sao người ta bảo Hook mà tại sao không thấy có hàm SetWindowsHookEx nhi,mà hàm SetWindowLong để làm gì thế

  9. #9
    Ngày gia nhập
    09 2008
    Bài viết
    328

    Code:
    #include<windows.h>
    WNDPROC WndProc;
    LRESULT CALLBACK WindowProc(HWND hwnd,
    							UINT uMsg,
    							WPARAM wParam,
    							LPARAM lParam
    							)
    {
    	if (hwnd ==WM_QUERYENDSESSION )
    	{
    		return false;
    	}
    	else if (hwnd ==WM_ENDSESSION)
    	{
    		return false;
    	}
    	else
    		CallWindowProc(WndProc, hw, uMsg, wParam, lParam);
    }
    nếu chuyển sang C++ thì mình thấy là hàm WindowProc người ta có sẵn rồi,vậy làm sao mà chuyển được,mình thử chuyển thế này

    so với
    Public Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If uMsg = WM_QUERYENDSESSION Then
    WindowProc = False'send don't shut down
    Exit Function
    ElseIf uMsg = WM_ENDSESSION Then
    WindowProc = False
    Exit Function
    End If
    WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam)
    End Function
    Tham gia diễn đàn MACOS http://www.apple9.com/forum

  10. #10
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Mình cũng khôg hiểu đoạn code vb trên nữa, theo lí thuyết thì chỉ dùng global hook để chặn 2 msg vWM_QUERYENDSESSION và vWM_ENDSESSION thì tại sao còn dùng subclass ? Trong khi đó lại subclass chính chương trình của nó, ( có gì sai thì chỉ giúp nhé, tớ ko biết vb )

    PHP Code:
    Hook Me.hwnd 
    PHP Code:
    Public Sub Hook(Lwnd As Long)
    WndProc SetWindowLong(LwndGWL_WNDPROCAddressOf WindowProc)
    End Sub 
    Nếu đã biết được 2 sự kiện này, thì tối tớ code cái global hook xem có được ko ?

Các đề tài tương tự

  1. Mouse hook system-wide lại chạy như local hook ???
    Gửi bởi nguoixanh trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 12-11-2013, 04:02 PM
  2. Mouse hook system-wide lại chạy như local hook ???
    Gửi bởi nguoixanh trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 1
    Bài viết cuối: 12-11-2013, 03:01 PM
  3. Hook keyboard và mouse hook trong c# không cần code
    Gửi bởi tienlbhoc trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 7
    Bài viết cuối: 23-06-2013, 01:27 PM
  4. [Kernel Driver] ShaDow SSDT Hook Có Phải là Hook đồ Họa
    Gửi bởi chàng trai dễ thương trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 0
    Bài viết cuối: 11-10-2009, 07:48 AM
  5. chỉ dẫn phương pháp Hook APi bằng inline hook
    Gửi bởi trần trân trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 3
    Bài viết cuối: 22-06-2009, 10:15 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn