نمایش نتایج 1 تا 11 از 11

نام تاپیک: در مورد hot key مثلا برای ماشین حساب برنامه...

  1. #1

    در مورد hot key مثلا برای ماشین حساب برنامه...

    می خواستم داخل برنامه با فشرده شدن کلید خاصی مثل F1 فرمی لود بشه مثل ماشین حساب .
    مستقل از اینکه کاربر در حال حاضر در چه فرمی قرار داره.
    میشه روش این کارو به من بفرمایین . ممنون میشم . :oops:

  2. #2
    کاربر دائمی
    تاریخ عضویت
    آذر 1383
    محل زندگی
    تهران
    پست
    1,021
    سلام

    سوالتون تکراری است.
    اگه منظورت اینکه توی Windows میخواهی کلید خاصی رو به برنامه خودت اختصاص بدی باید از یکی از دو روش زیر عمل کنی:

    ۱ - استفاده از یک تابع کتابخانه ای به اسم GetAsyncKeyState موجود در کتابخانه user32.dll . این تابع ، فشرده شدن یا رها شدن یک کلید را تشخیص می دهد . نحوه declare کردن این تابع بصورت زیر است :
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
    حال در برنامه تان یک timer قرار داده و در event آن کد زیر را قرار دهید :
        For i = 1 To 255 
    results = 0
    results = GetAsyncKeyState(i)
    If results <> 0 Then
    Msgbox(Chr(i))
    End If
    Next

    برای مشاهده یک برنامه نمونه به آدرس زیر مراجعه کنید .
    http://www.planetsourcecode.com/vb/s...8&lngWId=1

    ۲ - استفاده از قلاب یا Hook : قلاب ، یک ابزار در مکانیزم مدیریت پیغام سیستم ویندوز است که توسط آن برنامه ها می توانند یک روتین را برای مدیریت و پردازش پیغامهای خاصی قبل از اینکه آن پیغامها به برنامه مقصد برسند نصب نمایند . قلابها باعث کندی سیستم می شوند زیرا حجم پردازشی سیستم روی هر پیغام را افزایش می دهند بنابراین بایستی زمانیکه واقعاً به قلاب نیاز دارید آنرا نصب نموده و هر چه زودتر آنرا حذف نمایید . سیستم ویندوز از انواع زیادی از قلابها پشتیبانی می کند که هر کدام امکان دستیابی به پیغامهای خاصی را مهیا می نمایند برای مثال یک برنامه کاربردی می تواند با استفاده از قلاب کیبرد برای مدیریت و پردازش پیغامهای مربوط به آن ( مثل فشرده شدن یک کلید خاص یا رها شدن آن ) استفاده کند .
    برای نصب یک قلاب در برنامه از یک تابع کتابخانه ای به اسم SetWindowsHookEx استفاده می شود . این تابع یک قلاب را به زنجیره قلابهای سیستم اضافه می کند . نحوه declare کردن این تابع بصورت زیر است :
    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

    همچنین برای آزاد کردن یک قلاب و حذف آن از زنجیره قلابها از تابع کتابخانه ای UnhookWindowsHookEx استفاده می گردد . نحوه declare کردن این تابع بصورت زیر است :
    Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long

    برای ایجاد قلاب کیبرد همچنین نیاز به تعریف یک ثابت است که شماره قلاب کیبرد در آن قرار دارد :
    Public Const WH_KEYBOARD = 2

    حال بایستی یک تابع پس زمینه یا Callback Function نوشت که به ازای فشرده شدن کیبرد اجرا شود و آدرس آنرا ( با استفاده از کلمه کلیدی Address Of ) بهمراه ثابت فوق به تابع SetWindowsHookEx فرستاد .

    برای دیدن نمونه و اطلاعات بیشتر میتونید به آدرس زیر مراجعه کنید.
    http://www.mentalis.org/apilist/SetWindowsHookEx.shtml

    موفق باشید و پرتوان :موفق:

  3. #3
    سلام
    جناب حامد خان اگر از یک تایمر برای بررسی کلید های فشار داده شده استفاده کنیم باعث کند شدن برنامه خواهد شد و اگر برای رویداد های صفحه کلید هوک تعریف کنیم باعث می شود تا ویندوز در هر بار فشار داده شدن کلید های صفحه کلید کد برنامه شما را نیز اجرا کند
    بهترین راه برای انجام این کار تعریف یک Shortcut برای یک پنجره است ؛ به این ترتیب هر وقت کلید های مربوطه فشار داده شود ویندوز پنجره مربوطه را مطلع خواهد ساخت که با بررسی پروسس پنجره می توان به فشرده شدن کلید های مربوطه پی برد
    و اما نحوه انجام این کار:

    تعریف یک شورت کات


    Public Enum ModConst
    MOD_ALT = &H1
    MOD_CONTROL = &H2
    MOD_SHIFT = &H4
    End Enum

    Private Declare Function RegisterHotKey Lib "user32" ( _
    ByVal hwnd As Long, _
    ByVal id As Long, _
    ByVal fsModifiers As Long, _
    ByVal vk As Long) As Long


    hwnd هندل پنجره مربوطه
    id آی دی شورت کات ( از 0 تا 3071 )
    fsMdifiers یکی از کلید های کنترلی
    MOD_ALT = &H1
    MOD_CONTROL = &H2
    MOD_SHIFT = &H4

    vk کد اسکی کلید مورد نظر


    بررسی فشرده شدن شورت کات:
    ابتدا تابع زیر را تعریف می کنیم


    Private Const GWL_WNDPROC = -4
    Private Declare Function SetWindowLongA Lib "user32" ( _
    ByVal hwnd As Long, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long


    حال وقایع مربوط به فرم را در تابعی به نام WndProc بررسی می کنیم

    Dim oldProc As Long
    oldProc = SetWindowLongA(Me.hwnd, GWL_WNDPROC, AddressOf WndProc)


    تابع WndProc را اینگونه تعریف کنید:

    Public Function WndProc(ByVal hwnd As Long, _
    ByVal uMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long) As Long

    ' بررسی فشرده شدن شورت کات در اینجا انجام می پذیرد
    End Function



    یک نمونه از بررسی کلید فشار داده شده که در تابع WndProc باید نوشته شود ( توجه : خط آخر الزامی است )

    WndProc = 0
    If uMsg = WM_HOTKEY Then
    If wParam = 1 Then
    MsgBox "The Hotkey pressed"
    End If
    End If
    WndProc = CallWindowProcA(oldProc, hwnd, uMsg, wParam, lParam)


    نحوه برداشتن شورت کات با تابع زیر صورت می گیرد

    Private Declare Function UnRegisterHotKey Lib "user32" ( _
    ByVal hwnd As Long, _
    ByVal id As Long) As Long


    در صورت نیاز بفرمایید تا یک نمونه برایتان بنویسم

  4. #4
    کاربر دائمی
    تاریخ عضویت
    آذر 1383
    محل زندگی
    تهران
    پست
    1,021
    BlackDal جان میشه در مورد تابع SetWindowLongA توضیح بدی؟

    ممنون :flower: :flower:

  5. #5
    سلام
    البته

    همانطور که می دانید هر پنجره خصوصیاتی مربوط به خود دارد که این خصوصیات در 64 بیت ذخیره می شوند ( 32 بیت خصوصیات عادی و 32 بیت خصوصیات بسط یافته ) از تابع SetWindowLongA ( که نمونه 32 بیتی تابع SetWindowLong است ) برای تغییر این خصوصیات استفاده می شود و صورت ان به این شکل است :

    Const GWL_EXSTYLE = -20 ' خصوصیات بسط یافته
    Const GWL_WNDPROC = -4 ' پردازش هایی که روی پنجره صورت می گیرد
    Const GWL_STYLE = -16 ' خصوصیات عادی پنجره

    Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" ( _
    ByVal hWnd As Long, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long


    hwnd : هندل پنجره مورد نظر است
    nIndex : مشخص می کند قصد تغییر کدام خصوصیات پنجره را دارید ( از ثابت هایی که در کد نوشتم استفاده کنید )
    dwNewLong : خصوصیات جدید پنجره است ( توجه کنید من در این متغیر از آدرس یک تابع استفاده کرده ام که این موضوع باعث می شود تا ویندوز در هر بار مقدار دهی خصوصیات پنجره تابع مزبور را فراخوانی کند ( نوعی هوک )

  6. #6
    کاربر دائمی
    تاریخ عضویت
    آذر 1383
    محل زندگی
    تهران
    پست
    1,021
    BlackDal جان ممنون :flower: :flower: :flower:

  7. #7
    از لطف شما دو دوست عزیز ممنونم. :oops:

  8. #8

    سلام

    ار دوستان خیلی ممنون
    ما هم استفاده کردیم :flower: :flower:

  9. #9

    سلام

    ار دوستان خیلی ممنون
    ما هم استفاده کردیم :flower: :flower:

  10. #10

    سلام

    ار دوستان خیلی ممنون
    ما هم استفاده کردیم :flower: :flower:

  11. #11
    کاربر جدید
    تاریخ عضویت
    آذر 1387
    محل زندگی
    قم شهر عشق
    سن
    35
    پست
    6

    نقل قول: در مورد hot key مثلا برای ماشین حساب برنامه...

    من وی بی بلد نیستم میشه یه برنامه کوچیک بنویسید یا توزیح بدین که مثلا با زدن یه دکمه ی تیمر 1ک به کار بیوفته

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •