Richard87 Skrevet 1. januar 2006 Del Skrevet 1. januar 2006 her e koden min: Dim lOldWindowProc As Long, lHookID As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public 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 Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long) Public Const WH_SYSMSGFILTER As Long = 6 Public Type POINTAPI x As Long y As Long End Type Public Type MSG hwnd As Long message As Long wParam As Long lParam As Long time As Long pt As POINTAPI End Type Public Function Terminate() UnhookWindowsHookEx lHookID End Function Sub Main() App.TaskVisible = False lHookID = SetWindowsHookEx(WH_SYSMSGFILTER, AddressOf HookProc, App.hInstance, App.ThreadID) SetWindow True, Form1.hwnd MsgBox Hex(lHookID) & vbNewLine & Hex(lOldWindowProc) End Sub Public Function HookProc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim HookMsg As MSG CopyMemory HookMsg, lParam, Len(HookMsg) Select Case HookMsg.message Case &H11: HookProc = 0 Debug.Print "HookProc destroy shutdown" Case Else: HookProc = CallNextHookEx(lHookID, ncode, wParam, lParam) Debug.Print HookMsg.message End Select End Function Public Function SetWindow(ByVal Register As Boolean, hwnd As Long) As Long Dim Ret As Long If Register Then lOldWindowProc = SetWindowLong(hwnd, -4, AddressOf WindowProc) Else Ret = SetWindowLong(hwnd, GWL_WNDPROC, lOldWindowProc) End If If Ret = 0 Then SetWindow = lOldWindowProc Else SetWindow = Ret End If End Function Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Select Case uMsg Case &H11: WindowProc = 0 Debug.Print "WindowProc destroy shutdown" Case Else: WindowProc = CallWindowProc(lOldWindowProc, hwnd, uMsg, wParam, lParam) End Select End Function Noen som kan forklare hvorfor lHookID altid er 0? Problemet mitt er at PC'en min skrur seg av hele tiden, uten kontroll... WindowProc fungerer, pc'en skrur seg ikke av, men den begynner, og en hel del viktige programmer blir avsluttet før programmet mitt stopper det... Lenke til kommentar
aadnk Skrevet 1. januar 2006 Del Skrevet 1. januar 2006 WM_QUERYENDSESSION blir sendt til alle applikasjoner imens systemet avsluttes. Derfor kan du risikere at mange applikasjoner informerer systemet at de er klar for å avslutte lenge før din applikasjon blir informert om dette. Muligens kan en endre din applikasjons prioritet, men kanskje det letteste blir å ganske enkelt eksekvere de eventuele programmer som rakk å bli avsluttet før du greide å stoppe avsluttingsprosessen. Lagre simpelthen en liste over alle programmer ved jevne mellomrom, og dette skulle være en smal sak. Lenke til kommentar
Richard87 Skrevet 2. januar 2006 Forfatter Del Skrevet 2. januar 2006 det er litt verre nar det er snakk om spill og andre lignende ting... Noen som vet hvordan jeg far WH_SYSMSGFILTER til og virke? Lenke til kommentar
kaffenils Skrevet 3. januar 2006 Del Skrevet 3. januar 2006 (endret) Er det ikke bedre å finne ut hvorfor pc'en starter nedstenging? Det finnes jo flere virus som gjør dette. Endret 3. januar 2006 av kaffenils Lenke til kommentar
Richard87 Skrevet 4. januar 2006 Forfatter Del Skrevet 4. januar 2006 Er det ikke bedre å finne ut hvorfor pc'en starter nedstenging? Det finnes jo flere virus som gjør dette. 5377569[/snapback] Jo, er helt enig, na har det seg sann, at jeg ikke greier og finne det ut, og vis jeg far til og lage et programm som avbryter nedstengningen, sa far jeg litt bedre tid... Na funker programmet mitt da, delvis ivertfall, men jeg ville satt pris pa et konstruktivt innlegg i hvordan jeg kan fa WH_SYSMSGFILTER til og virke, eventuelt hvorfor det ikke virker... Men for all del, takk for all respons... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå