السلام عليكم و رحمة الله
لقد قمت بإنشاء تطبيق على أساس أنه يعمل في background و هو عبارة عن قيام الفأرة بالضغط أو كليك عند أمر معين
أنا محتاج أين أضع مثلا هذا الكود
if e.keycode = keys.F3 then
btn.PerformClick()
end if
لقد قمت بحذف الفورم من التطبيق ثم أضفت موديل و أصبح على الشكل التالي مع بعض الأكواد بطبيعة الحال:
Module Module1
Declare Sub mouse_event Lib "user64" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Sub Main()
Application.Run()
End Sub
Friend WithEvents btn As New Button()
Private Sub MyMethod()
Windows.Forms.Cursor.Position = New System.Drawing.Point(Windows.Forms.Cursor.Position)
mouse_event(&H2, 0, 0, 0, 1)
mouse_event(&H4, 0, 0, 0, 1)
End Sub
Private Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click
MyMethod()
End Sub
End Module
اول شيء غير خاصية الفورم KeyPreview وخليها True وبعدها استخدم الحدث KeyUp للفورم
مثل
كود :
Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
If e.KeyCode = Keys.F3 Then
MsgBox("مرحباَ")
End If
End Sub
في الحقيقة هذه هي المشكلة أخي msdos لو كان على الفورم سهلة لكن أنا حذفت الفورم و أتيت بموديل لكي يتم تنفيذ الأمر على أي مكان في الشاشة إذا فهمت قصدي
msdos كتب :اول شيء غير خاصية الفورم keypreview وخليها true وبعدها استخدم الحدث keyup للفورم
مثل
كود :
private sub form1_keyup(byval sender as object, byval e as system.windows.forms.keyeventargs) handles me.keyup
if e.keycode = keys.f3 then
msgbox("مرحباَ")
end if
end sub
Public Event SystemStateChanged(sender As Object, e As SystemStateChangedEventArgs) Private _State As SystemState
'Works only on Windows NT, version 4.0 SP3 and later
Private Declare Function UnhookWindowsHookEx Lib "user32" _ (ByVal hHook As Integer) As Integer
Private Declare Function SetWindowsHookEx Lib "user32" _ Alias "SetWindowsHookExA" (ByVal idHook As Integer, _ ByVal lpfn As KeyboardHookDelegate, ByVal hmod As Integer, _ ByVal dwThreadId As Integer) As Integer
Private Declare Function GetAsyncKeyState Lib "user32" _ (ByVal vKey As Integer) As Integer
Private Declare Function CallNextHookEx Lib "user32" _ (ByVal hHook As Integer, _ ByVal nCode As Integer, _ ByVal wParam As Integer, _ ByVal lParam As KBDLLHOOKSTRUCT) As Integer
Private Structure KBDLLHOOKSTRUCT Public vkCode As Integer Public scanCode As Integer Public flags As Integer Public time As Integer Public dwExtraInfo As Integer End Structure
' Low-Level Keyboard Constants Private Const HC_ACTION As Integer = 0 Private Const LLKHF_EXTENDED As Integer = &H1 Private Const LLKHF_INJECTED As Integer = &H10 Private Const LLKHF_ALTDOWN As Integer = &H20 Private Const LLKHF_UP As Integer = &H80
'KeyUp/KeyDown constants Private Const WM_KEYDOWN As Integer = &H100 Private Const WM_KEYUP As Integer = &H101 Private Const WM_SYSKEYDOWN As Integer = &H104 Private Const WM_SYSKEYUP As Integer = &H105
Private Const WH_KEYBOARD_LL As Integer = 13& Private KeyboardHandle As Integer Private disposed As Boolean = False
Private Delegate Function KeyboardHookDelegate( _ ByVal Code As Integer, _ ByVal wParam As Integer, ByRef lParam As KBDLLHOOKSTRUCT) _ As Integer
'Our keydown and keyup events Public Event KeyDown As KeyEventHandler Public Event KeyUp As KeyEventHandler
<MarshalAs(UnmanagedType.FunctionPtr)> _ Private callback As KeyboardHookDelegate = New KeyboardHookDelegate(AddressOf KeyboardCallback)
'Keyboard callback function Private Function KeyboardCallback(ByVal Code As Integer, _ ByVal wParam As Integer, _ ByRef lParam As KBDLLHOOKSTRUCT) As Integer
If (Code = HC_ACTION) Then 'Call the appropriate event
Dim KeyData As Keys Dim args As KeyEventArgs
KeyData = lParam.vkCode
'Check if the ALT key is pressed If CBool(GetAsyncKeyState(Keys.Menu) And &H8000) Then 'Alt key pressed KeyData = KeyData Or Keys.Alt End If
'Check if the Ctrl key is pressed If CBool(GetAsyncKeyState(Keys.ControlKey) And &H8000) Then 'Ctrl key pressed KeyData = KeyData Or Keys.Control End If
'Check if the Shift key was pressed If CBool(GetAsyncKeyState(Keys.ShiftKey) And &H8000) Then 'Shift key pressed KeyData = KeyData Or Keys.Shift End If
'Create the event args args = New KeyEventArgs(KeyData)
'Raise the appropriate event If wParam = WM_KEYDOWN Or wParam = WM_SYSKEYDOWN Then OnKeyDown(Me, args) ElseIf wParam = WM_KEYUP Or wParam = WM_SYSKEYUP Then OnKeyUp(Me, args) End If
'Determine if we should block the key If args.Handled Then Return 1 End If End If
'Call the next hook in the hook chain and return the value Return CallNextHookEx(KeyboardHandle, _ Code, wParam, lParam)
End Function
Protected Sub OnKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) RaiseEvent KeyDown(sender, e) End Sub
Protected Sub OnKeyUp(ByVal sender As Object, ByVal e As KeyEventArgs) RaiseEvent KeyUp(sender, e) End Sub
Public Overridable Sub Dispose() Implements IDisposable.Dispose If Not disposed Then disposed = True
'Unhook the keyboard UnhookWindowsHookEx(KeyboardHandle) Else Throw New ObjectDisposedException("KeyboardHook") End If End Sub
Public Sub New()
End Sub
Public Sub Start() 'Create a keyboard low-level hook KeyboardHandle = SetWindowsHookEx( _ WH_KEYBOARD_LL, callback, _ Marshal.GetHINSTANCE( _ [Assembly].GetExecutingAssembly.GetModules()(0)).ToInt32, 0) _State = SystemState.Working RaiseEvent SystemStateChanged(Me, New SystemStateChangedEventArgs(_State)) End Sub
Public Sub [Stop]() 'Unhook the keyboard _State = SystemState.Stopped UnhookWindowsHookEx(KeyboardHandle) RaiseEvent SystemStateChanged(Me, New SystemStateChangedEventArgs(_State)) End Sub
Protected Overrides Sub Finalize() MyBase.Finalize()
If Not disposed Then Dispose() End If End Sub
End Class
لكى يعمل الكود
اذهب لأعدادات المشروع ثم إلى debug
ثم ازل العلامه من امام Enable the visual studio hosting progress
ومن توبيب application غير الفريم ورك إلى الأصدار 3.5
أخي أحمد حسين لقد جربت الكلاس و لم يعمل بحيث قمت كما تفضلت بالشرح بعد إضافة الكلاس ذهبت للإعدادات و أزلت الإشارة من أمام Enable the visual studio hosting progress
و غيرت الفريمورك من 4.5 إلى 3.5 لكن لم يعمل طلعلي فيه مشاكل على العموم شكرا لك
****
إذا كان بالإمكان من الإخوة أو أي أحد لديه فكرة عن هذه الطريقة لا يبخل علي أقصد عندما أضغط على مفتاح من لوحة المفاتيح يتم عمل كليك يسار من زر الفأرة يعني الفأرة تقوم بالضغط كليك بالزر الأيسر عن طريق مفتاح من مفاتيح اللوحة المهم يكون على أي شيء و ليس على الفورم لأن على الفورم يمكن القيام بها و شكرا جزيلا للجميع
تحياتي
شكرا أخي أحمد حسين ما شاء الله تطبيقك إشتغل معي جيدا ربي يجازيك و ربي يحفظك إن شاء الله فقط بقية لي مشكلة واحدة الآن و هي الأساس فقط ضغطة الزر للماوس لم تشتغل أو ربما هناك طريقة أخرى لتشغيلها ممكن أي واحد يساعدني في إكمالها ها هو الكود الكامل :
كود :
[CODE][color=#0000FF]Public Class [/color][COLOR="#2B91AF"]Form1
[/COLOR][color=#0000FF]Public Declare Auto Function [/color][color=#000000]SetCursorPos [/color][color=#0000FF]Lib [/color][color=#A31515]"User64.dll" [/color][color=#000000]([/color][color=#0000FF]ByVal [/color][color=#000000]X [/color][color=#0000FF]As Integer[/color][color=#000000], [/color][color=#0000FF]ByVal [/color][color=#000000]Y [/color][color=#0000FF]As Integer[/color][color=#000000]) [/color][COLOR="#0000FF"]As Long
Public Declare Auto Function [/COLOR][color=#000000]GetCursorPos [/color][color=#0000FF]Lib [/color][color=#A31515]"User64.dll" [/color][color=#000000]([/color][color=#0000FF]ByRef [/color][color=#000000]lpPoint [/color][color=#0000FF]As [/color][color=#2B91AF]Point[/color][color=#000000]) [/color][COLOR="#0000FF"]As Long
Public Declare Sub [/COLOR][color=#000000]mouse_event [/color][color=#0000FF]Lib [/color][color=#A31515]"user64" [/color][color=#0000FF]Alias [/color][color=#A31515]"mouse_event" [/color][color=#000000]([/color][color=#0000FF]ByVal [/color][color=#000000]dwFlags [/color][color=#0000FF]As Long[/color][color=#000000], [/color][color=#0000FF]ByVal [/color][color=#000000]dx [/color][color=#0000FF]As Long[/color][color=#000000], [/color][color=#0000FF]ByVal [/color][color=#000000]dy [/color][color=#0000FF]As Long[/color][color=#000000], [/color][color=#0000FF]ByVal [/color][color=#000000]cButtons [/color][color=#0000FF]As Long[/color][color=#000000], [/color][color=#0000FF]ByVal [/color][color=#000000]dwExtraInfo [/color][color=#0000FF]As Long[/color][COLOR="#000000"])
[/COLOR][color=#0000FF]Public Const [/color][color=#000000]MOUSEEVENTF_LEFTDOWN = &H2 [/color][COLOR="#008000"]' left button down
[/COLOR][color=#0000FF]Public Const [/color][color=#000000]MOUSEEVENTF_LEFTUP = &H4 [/color][COLOR="#008000"]' left button up
[/COLOR][color=#0000FF]Public Const [/color][color=#000000]MOUSEEVENTF_MIDDLEDOWN = &H20 [/color][COLOR="#008000"]' middle button down
[/COLOR][color=#0000FF]Public Const [/color][color=#000000]MOUSEEVENTF_MIDDLEUP = &H40 [/color][COLOR="#008000"]' middle button up
[/COLOR][color=#0000FF]Public Const [/color][color=#000000]MOUSEEVENTF_RIGHTDOWN = &H8 [/color][COLOR="#008000"]' right button down
[/COLOR][color=#0000FF]Public Const [/color][color=#000000]MOUSEEVENTF_RIGHTUP = &H10 [/color][COLOR="#008000"]' right button up
[/COLOR][color=#0000FF]Private Sub [/color][COLOR="#000000"]MS_LEFTCLICK()
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
[/COLOR][COLOR="#0000FF"]End Sub
Private WithEvents [/COLOR][color=#000000]KeyHook [/color][color=#0000FF]As New [/color][COLOR="#2B91AF"]KeyboardHook
[/COLOR][color=#0000FF]Private Sub [/color][color=#000000]Form1_FormClosing(sender [/color][color=#0000FF]As Object[/color][color=#000000], e [/color][color=#0000FF]As [/color][color=#2B91AF]FormClosingEventArgs[/color][color=#000000]) [/color][color=#0000FF]Handles Me[/color][COLOR="#000000"].FormClosing
KeyHook.Stop()
[/COLOR][COLOR="#0000FF"]End Sub
Private Sub [/COLOR][color=#000000]Form1_Load(sender [/color][color=#0000FF]As Object[/color][color=#000000], e [/color][color=#0000FF]As [/color][color=#2B91AF]EventArgs[/color][color=#000000]) [/color][color=#0000FF]Handles MyBase[/color][COLOR="#000000"].Load
KeyHook.Start()
Location = [/COLOR][color=#0000FF]New [/color][color=#2B91AF]Point[/color][color=#000000]([/color][color=#2B91AF]Screen[/color][color=#000000].PrimaryScreen.WorkingArea.Width, [/color][color=#2B91AF]Screen[/color][COLOR="#000000"].PrimaryScreen.WorkingArea.Height)
ShowInTaskbar = [/COLOR][COLOR="#0000FF"]True
[/COLOR][color=#000000]Visible = [/color][COLOR="#0000FF"]False
End Sub
Private Sub [/COLOR][color=#000000]Button1_Click(sender [/color][color=#0000FF]As Object[/color][color=#000000], e [/color][color=#0000FF]As [/color][color=#2B91AF]EventArgs[/color][color=#000000]) [/color][color=#0000FF]Handles [/color][COLOR="#000000"]Button1.Click
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
[/COLOR][COLOR="#0000FF"]End Sub
Private Sub [/COLOR][color=#000000]KeyHook_KeyDown(sender [/color][color=#0000FF]As Object[/color][color=#000000], e [/color][color=#0000FF]As [/color][color=#2B91AF]KeyEventArgs[/color][color=#000000]) [/color][color=#0000FF]Handles [/color][COLOR="#000000"]KeyHook.KeyDown
[/COLOR][color=#0000FF]If [/color][color=#000000]e.KeyCode = [/color][color=#2B91AF]Keys[/color][color=#000000].F3 [/color][COLOR="#0000FF"]Then
[/COLOR][COLOR="#000000"]Button1.PerformClick()
[/COLOR][COLOR="#0000FF"]End If
End Sub
End Class[/COLOR]
السلام عليكم
بعد عدت محاولات تمكنت بفضل الله و بسببكم من حل المشكلة
قمت بتعويض أداة الزر "Button1" بأداة المؤقت "timer1" و كتبت كود النقر الخاص بالزر الايسر للماوس و كانت النتيجة إيجابيةو هذا هو الكود الذي عدلته:
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
Me.Timer1.Stop()
End Sub
شكرا لكل من شارك و ساعدني و بالأخص الأخ أحمد حسين ربي يحفظكم إن شاء الله
تحياتي