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

نام تاپیک: مشکل در hook کلید F1 جهت نمایش پنجره راهنما

  1. #1
    کاربر دائمی آواتار mz6488
    تاریخ عضویت
    تیر 1391
    محل زندگی
    قشم
    پست
    429

    مشکل در hook کلید F1 جهت نمایش پنجره راهنما

    سلام.من میخوام تو برنامه م این قابلیت رو بذارم که کاربر با فشردن کلید f1 تو هرجایی از برنامه بتونه از فرم راهنما استفاده کنه.برای همین اومدم کدهای زیر رو تو تایمر صفحه اصلی گذاشتم.مشکل اینجاس که بعضی وقت ها خوب عمل نمیکنه.اصلا نمیشه دیگه جایی کلیک کرد و باید از task manager استفاده کرد.

    // ... { GLOBAL HOOK }
    [DllImport("user32.dll")]
    static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc callback, IntPtr hInstance, uint threadId);


    [DllImport("user32.dll")]
    static extern bool UnhookWindowsHookEx(IntPtr hInstance);


    [DllImport("user32.dll")]
    static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, int wParam, IntPtr lParam);

    [DllImport("kernel32.dll")]
    static extern IntPtr LoadLibrary(string lpFileName);


    private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);


    const int WH_KEYBOARD_LL = 13; // Номер глобального LowLevel-хука на клавиатуру
    const int WM_KEYDOWN = 0x100; // Сообщения нажатия клавиши


    private LowLevelKeyboardProc _proc = hookProc;


    private static IntPtr hhook = IntPtr.Zero;


    public void SetHook()
    {
    IntPtr hInstance = LoadLibrary("User32");
    hhook = SetWindowsHookEx(WH_KEYBOARD_LL, _proc, hInstance, 0);
    }


    public static void UnHook()
    {
    UnhookWindowsHookEx(hhook);
    }


    public static IntPtr hookProc(int code, IntPtr wParam, IntPtr lParam)
    {

    if (code >= 0 && wParam == (IntPtr)WM_KEYDOWN)
    {
    int vkCode = Marshal.ReadInt32(lParam);
    //////ОБРАБОТКА НАЖАТИЯ
    if (vkCode.ToString() == "112")
    {
    UnHook();
    tools.Class1.showForm(tools.Class1._frmLearn, "learn");

    }
    return (IntPtr)1;
    }
    else
    return CallNextHookEx(hhook, code, (int)wParam, lParam);
    }



    private void tmrLearn_Tick(object sender, EventArgs e)
    {
    SetHook();
    }

    این کدها رو از سایت خارجی گرفتم.کد اسکی کلید f1 رو هم ست کردم.فقط کد هگزا رو که زده 0x100 به جاش 0x70 که مربوط هست به کلید f1 ست کردم ولی جواب نداد واس همین دوباره گذاشتم 0x100

  2. #2
    کاربر دائمی
    تاریخ عضویت
    شهریور 1390
    محل زندگی
    تو دل یه کویر بزرررگ، کنار یه بره کوچیییک
    پست
    232

    نقل قول: مشکل در hook کلید F1 جهت نمایش پنجره راهنما

    اگر شما میخوای با فشار F1 یه پنجره جدید به عنوان راهنما ظاهر بشه که این کارا براچیه؟خب توی رویداد KeyDown کد بنویس که اگر کلید فشار داده شدهF1 هست، برات پنجره رو ShowDialog کنه

  3. #3
    کاربر دائمی آواتار mz6488
    تاریخ عضویت
    تیر 1391
    محل زندگی
    قشم
    پست
    429

    نقل قول: مشکل در hook کلید F1 جهت نمایش پنجره راهنما

    نقل قول نوشته شده توسط MRasoul مشاهده تاپیک
    اگر شما میخوای با فشار F1 یه پنجره جدید به عنوان راهنما ظاهر بشه که این کارا براچیه؟خب توی رویداد KeyDown کد بنویس که اگر کلید فشار داده شدهF1 هست، برات پنجره رو ShowDialog کنه
    خوب من میخوتم این قابلیت تو همه فرم ها باشه.اینکه بیام تو همه فرم ها دونه به دونه دستور رو تو رویداد keyDown بذارم خیلی زمان بره

  4. #4
    کاربر دائمی آواتار Mofid.m
    تاریخ عضویت
    آبان 1392
    محل زندگی
    مازندران-تنکابن
    پست
    393

    نقل قول: مشکل در hook کلید F1 جهت نمایش پنجره راهنما

    خب شما میتونی یه کلاس به پروژت اضافه کنی و از کلاس فرم مشتق کنیش.
    بعد بیا کد دوستمونو اونجا بنویس و تمام فرم هاتو از اون مشتق کن.

  5. #5
    کاربر دائمی آواتار alibilgats
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    همین حوالی
    پست
    155

    نقل قول: مشکل در hook کلید F1 جهت نمایش پنجره راهنما

    من از کد زیر استفاده میکنم دوست عزیز.
    کافیه فقط توی فرم اصلیتون ازش استفاده کنید. توی کل پروژتون اعمال میشه.

    [System.Runtime.InteropServices.DllImport("user32.d ll", SetLastError = true)]
    public static extern bool RegisterHotKey(
    IntPtr hWnd,
    int id,
    KeyModifiers fsModifiers,
    Keys vk
    );
    [System.Runtime.InteropServices.DllImport("user32.d ll", SetLastError = true)]
    public static extern bool UnregisterHotKey(IntPtr hWnd, int id );
    const int HOTKEY_ID = 31197; //کد منحصر به فرد دلخواه برای تعریف کلید میانبر
    public enum KeyModifiers
    {
    None = 0,
    Alt = 1,
    Control = 2,
    Shift = 4,
    Windows = 8
    }


    public bool setHotKey(KeyModifiers Kmds, Keys key)
    {
    return RegisterHotKey(this.Handle, HOTKEY_ID, Kmds, key);
    }


    public bool unSetHotKey()
    {
    return UnregisterHotKey(this.Handle, HOTKEY_ID);
    }


    const int WM_HOTKEY = 0x0312;


    protected override void WndProc(ref Message message)
    {
    switch (message.Msg)
    {
    case WM_HOTKEY:
    Keys key = (Keys)(((int)message.LParam >> 16) & 0xFFFF);
    KeyModifiers modifier = (KeyModifiers)((int)message.LParam & 0xFFFF);


    محل نوشتن کد مربوط به زمان فشرده شدن کلید میانبر


    break;
    }
    base.WndProc(ref message);
    }


    public Form1()
    {
    InitializeComponent();


    setHotKey(KeyModifiers.None, Keys.F1);

    }


    البته این نکته رو هم بگم که به نظر من راهنمای برنامه رو شما باید یه فایل دیگه در نظر بگیرید و برنامه اصلی رو درگیرش نکنید.

  6. #6
    کاربر دائمی آواتار mz6488
    تاریخ عضویت
    تیر 1391
    محل زندگی
    قشم
    پست
    429

    نقل قول: مشکل در hook کلید F1 جهت نمایش پنجره راهنما

    ممنون از شما.یه مشکلی که وجود داره این که فرضا من فرم گزارشات رو باز کردم که به صورت showDialog هستش و فرم راهنما به صورت Show .حالا وقتی وارد فرم گزارشات میشم و کلید f1 رو میزنم فاکوس میره روی فرم گزارشات و روی فرم راهنما نمیشه کلیک کرد و باید فرم گزارشات رو بست.
    اینکه فرم آموزش رو گذاشتک تو خود نرم افزار این که کاربر بتونه هر جایی از برنامه بتونه بهش دسترسی داشته باشه

  7. #7
    کاربر دائمی آواتار alibilgats
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    همین حوالی
    پست
    155

    نقل قول: مشکل در hook کلید F1 جهت نمایش پنجره راهنما

    خب دقیقا بخاطر همین من میگم شما فایل راهنما رو یه فایل اجرایی دیگه در نظر بگیرید و کنار فایل اصلی برنامه داشته باشید و با زدن f1 اون فایل رو اجرا کنید. اینطوری فایل راهنما هیچ دخلی به برنامه اصلی نخواهد داشت و تداخلی توی فرم های برنامه ایجاد نمیشه!
    فقط کافیه کمی کنترلش کنی! مثلا اینکه چندبار فایل راهنما اجرا نشه! یا اینکه با بستن برنامه اصلی برنامه راهنما هم بسته بشه.

  8. #8
    کاربر دائمی آواتار mz6488
    تاریخ عضویت
    تیر 1391
    محل زندگی
    قشم
    پست
    429

    نقل قول: مشکل در hook کلید F1 جهت نمایش پنجره راهنما

    نقل قول نوشته شده توسط alibilgats مشاهده تاپیک
    خب دقیقا بخاطر همین من میگم شما فایل راهنما رو یه فایل اجرایی دیگه در نظر بگیرید و کنار فایل اصلی برنامه داشته باشید و با زدن f1 اون فایل رو اجرا کنید. اینطوری فایل راهنما هیچ دخلی به برنامه اصلی نخواهد داشت و تداخلی توی فرم های برنامه ایجاد نمیشه!
    فقط کافیه کمی کنترلش کنی! مثلا اینکه چندبار فایل راهنما اجرا نشه! یا اینکه با بستن برنامه اصلی برنامه راهنما هم بسته بشه.
    حالا اگه کاربر فرم رو minimize کرده بود و بعد دوباره کلید f1 رو بزنه چجوری بیام اون فایل آموزش رو دوباره بازش نکنم و فقط از حالت minimize درش بیارم؟

  9. #9
    کاربر دائمی آواتار alibilgats
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    همین حوالی
    پست
    155

    نقل قول: مشکل در hook کلید F1 جهت نمایش پنجره راهنما

    واسه اینکار شما میتونی با زدن f1 چک کنی که برنامه آموزش درحال اجراست یا نه!
    اگه نبود اجراش میکنی و اگر بود یا پیغام میدی که راهنما درحال اجراست یا اینکه روی برنامه فوکوس میکنی. که البته قسمت دومش شاید یکم کار داشته باشه! ولی قسمت اولش رو اگه نداشتی بگو برات کدشو بذارم

تاپیک های مشابه

  1. سوال: مشکل در گرفتن مقدار از متدی در یک کلاس دیگر جهت نمایش مقدار
    نوشته شده توسط pro_mvb در بخش Java SE : نگارش استاندارد جاوا
    پاسخ: 10
    آخرین پست: پنج شنبه 28 دی 1391, 16:27 عصر
  2. سوال: نمایش پنجره لاگین جهت در هنگام اجرای فرم گزارش Crystal
    نوشته شده توسط mojtaba_kz در بخش C#‎‎
    پاسخ: 1
    آخرین پست: شنبه 28 مرداد 1391, 14:55 عصر
  3. مشکل با جهت نمایش داده ها در مرورگرهای متفاوت
    نوشته شده توسط ahmad156 در بخش ابزارهای گزارش سازی
    پاسخ: 0
    آخرین پست: چهارشنبه 05 بهمن 1390, 17:49 عصر
  4. انتخاب یک فرم برای نمایش جهت اولین پنجره
    نوشته شده توسط f_naderi در بخش C#‎‎
    پاسخ: 11
    آخرین پست: جمعه 20 خرداد 1390, 18:26 عصر
  5. فارسی کردن صفحه کلید در یا نمایش کیبورد فارسی جهت تایپ
    نوشته شده توسط hamed_bostan در بخش ASP.NET Web Forms
    پاسخ: 12
    آخرین پست: سه شنبه 23 فروردین 1390, 11:41 صبح

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

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