+1 امتیاز
سلام

من میخوام تو برنامه ای کلید ترکیبی Alt+tab را غیر فعال کنم طوری که بعد از بستن برنامه توسط کاربر دوباره Alt+Tab فعال بشه
بسته شده

3 پاسخ

0 امتیاز
 
بهترین پاسخ

از کد زیر استفاده کردم و درست شد.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace AltTab
{

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public delegate IntPtr LowLevelKeyboardProcDelegate(int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam);

        [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr GetModuleHandle(string lpModuleName);

        [DllImport("user32", EntryPoint = "SetWindowsHookEx", SetLastError = true)]
        public static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProcDelegate lpfn, IntPtr hMod, uint dwThreadId);

        [DllImport("user32", EntryPoint = "UnhookWindowsHookEx", SetLastError = true)]
        public static extern bool UnhookWindowsHookEx(IntPtr hHook);

        [DllImport("user32", EntryPoint = "CallNextHookEx", SetLastError = true)]
        public static extern IntPtr CallNextHookEx(IntPtr hHook, int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam);

        public const int WH_KEYBOARD_LL = 13;

        /*code needed to disable start menu*/
        [DllImport("user32.dll")]
        private static extern int FindWindow(string className, string windowText);
        [DllImport("user32.dll")]
        private static extern int ShowWindow(int hwnd, int command);

        private const int SW_HIDE = 0;
        private const int SW_SHOW = 1;

        public struct KBDLLHOOKSTRUCT
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }

        public static IntPtr intLLKey;

        public IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam)
        {
            bool blnEat = false;

            try
            {
                switch (wParam.ToInt64())
                {
                    case 256:
                    case 257:
                    case 260:
                    case 261:

                        //Alt+Tab, Alt+Esc, Ctrl+Esc, Windows Key,
                        blnEat = ((lParam.vkCode == 9) && (lParam.flags == 32))  // alt+tab
                            || ((lParam.vkCode == 27) && (lParam.flags == 32)) // alt+esc
                            || ((lParam.vkCode == 27) && (lParam.flags == 0))  // ctrl+esc
                            || ((lParam.vkCode == 91) && (lParam.flags == 1))  // left winkey
                            || ((lParam.vkCode == 92) && (lParam.flags == 1))
                            || ((lParam.vkCode == 73) && (lParam.flags == 0));

                        break;
                }


            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            if (blnEat == true)
            {
                return (IntPtr)1;
            }
            else
            {
                return CallNextHookEx(intLLKey, nCode, wParam, ref lParam);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (ProcessModule curModule = Process.GetCurrentProcess().MainModule)
            {
                intLLKey = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, GetModuleHandle(curModule.ModuleName), 0);
            }
            if (intLLKey.ToInt64() == 0)
            {
                throw new Win32Exception();
            }
        }
    }
}

 

ممنون، عالی بود
توسط (6,480 امتیاز) 6 17 129
0 امتیاز
دو روش هست ، یکی اینکه سراسری باشه ، منظورم اینه اگه رو فرم شما فکوس نباشه روش جداگانه  داره با نام فارسی چنگ زدن و اگر رو فرم که دو خط کد هستش که تو Keypress  اتفاق می افته؟کدوم رو می خوای؟
میخوام کد رو بر روی فرم اصلی برنامه بزارم و تو فرم اصلی کاربر نتونه از Alt+Tab  استفاده کنه و همچنین از Alt+Esc هم نتونه استفاده کنه
توسط (1,019 امتیاز) 1 23 74
0 امتیاز
از منوي tools بعد گزينه option بعد keyboard رو انتخاب كن ، هم مي توني كليد هاي جديد بزاري و هم مي توني بعضي از كليد ها را غير فعال كني .
شما اینرو امتحان کردین ؟

من میخوام تو برنامه ام یه سری کلید ها رو غیر فعال کنم . به نظر شما این روش جواب گو هست؟

اگر جواب کار من رو میده ، بیشتر توضیح بدین. ممنون
توسط (1,019 امتیاز) 1 23 74
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,921 کاربر

دسته بندی ها

...