PDA

View Full Version : سوال: Function SetWindowsHookEx



Saman_12
دوشنبه 18 مرداد 1389, 13:25 عصر
سلام.
من مي خوام يه برنامه بنويسم که هر برنامه اي پيغام WM_DISTORY رو به برنامه ام فرستاد ,مقدار False به اون پيغام بفرستم.(يا اگه امکان داره اون پيغام رو به سمت منبع فرستنده بر گردونم.:لبخند:)
خوب يه گشتي توي اين سايت و چند تا سايت خارجي زدم يه چيزايي دستگيرم شد(فهميدم که بايد از يه API توي User32 به نام SetWindowsHookEx استفاده کنم.)
اگه دوستان يه لطف به من بکنن و يه آموزش براي من (و امثال من) در اين مورد بزارند خيلي متشکرشون ميشم.(من هيچي از پارمتر هاش و روش استفاده اش نمي دونم توي MSDN هم گشت زدم چيز جالب نداره فقط يه توضيح مختصر در باره ي هوک کردن Eventmouse و کيبورد داره! :گریه:)
با تشکر.:خجالت:

Saman_12
دوشنبه 18 مرداد 1389, 14:35 عصر
کسی میدونه وقتی که از تسک منیجر یه برنامه رو End Proocess می کنیم چه پیغامی به برنامه فرستاده میشه؟:متعجب:

Saman_12
دوشنبه 18 مرداد 1389, 22:05 عصر
یکی کمک کنه (حداقل جواب سوال دومم رو بدید!)؟:گریه:

Saman_12
سه شنبه 19 مرداد 1389, 10:34 صبح
دوستان عزیز برین حال کنیین , حال کنید که من چه آدم با حالیم.:لبخند:
یه روش پیدا کردم که میشه جای بعضی پیغام ها رو با هاش عوض کرد می زارم تا شاید یکی دلش به رحم اومد و کمک کرد! :گریه: :


'پیغام شات دان که به بر نامه فرستاده میشود
Const WM_QUERYENDSESSION = 17
' پیام کنسل کردن شات دان یا ریستارت
Private Const WM_CANCELMODE As System.Int32 = &H1F
'از شات دان یا ریستارت شدن جلوگیری می کند
Protected Overrides Sub WndProc(ByRef exp As Message)
If exp.Msg = WM_QUERYENDSESSION Then
'پیام ها را جابه جا می کند
Dim activeMessage As New Message
activeMessage.Msg = WM_CANCELMODE
MyBase.WndProc(activeMessage)
MyBase.WndProc(activeMessage)
Else
' پیام اجازه عبور دادرد
MyBase.WndProc(exp)
End If
End Sub

کمک !:گریه:

Saman_12
چهارشنبه 20 مرداد 1389, 18:00 عصر
از دوستان کسی با این API کار نکرده؟:گریه:

hero4000
پنج شنبه 21 مرداد 1389, 08:01 صبح
'In a module
Public Const WH_KEYBOARD = 2
Public Const VK_SHIFT = &H10
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
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
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public hHook As Long
Public Function KeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'if idHook is less than zero, no further processing is required
If idHook < 0 Then
'call the next hook
KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
Else
'check if SHIFT-S is pressed
If (GetKeyState(VK_SHIFT) And &HF0000000) And wParam = Asc("S") Then
'show the result
Form1.Print "Shift-S pressed ..."
End If
'call the next hook
KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
End If
End Function

'In a form, called Form1
Private Sub Form_Load()

'set a keyboard hook
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, App.hInstance, App.ThreadID)
End Sub
Private Sub Form_Unload(Cancel As Integer)
'remove the windows-hook
UnhookWindowsHookEx hHook
End Sub


دوست عزيز اين يک مثال براي استفاده از SetWindowsHookEx هستش ببين کارت رو راه ميندازه :چشمک:

Saman_12
پنج شنبه 21 مرداد 1389, 15:22 عصر
دستت درد نکه اون چیزایی رو که میخواستم فهمیدم!

ahura_24
جمعه 02 مهر 1389, 11:36 صبح
HHOOK hhook;

LRESULT CALLBACK hookProc(int nCode, WPARAM wparam, LPARAM lparam)
{
return CallNextHookEx(hhook, nCode, wparam, lparam);
}

void main()
{
hhook = SetWindowsHookEx(WH_DEBUG, hookProc, GetModuleHandle(NULL), 0);


kasi midune ke che juri mishe be WH_DEBUG hook kard man vaghti ke in karo mikonam explorer.exe crash mishe ...... :(