Form Küçültülmüşken İşlem Yapmak vb.net

  • Konbuyu başlatan Hanif89
  • Başlangıç tarihi

Hanif89

Üye
Katılım
9 Eki 2019
Mesajlar
6
Puanları
1
Selamun Aleyküm,
form küçültülmüş iken basılan tuşlar ile işlem yapmak mümkün mü?
mesela kişi ctrl+sol fare ye bastığında seçilen kelimeyi sözlükte aramasını istiyorum.
teşekkür ederim.
 

FakirMaker

Katılımcı Üye
Katılım
5 May 2009
Mesajlar
376
Puanları
58
Bu işletim sisteminin çalışma prensibine aykırıdır. Bir uygulama simge durumuna küçüldüğünde işletim sistemi onun fare ve klavye erişimini kısıtlar ki diğer uygulamalar bunlara erişebilsin. Senin dediğinin en kolay yolu uygulamanı sağ tıklama menüsüne eklemek. Böylelikle uygulaman kapalı olsa bile kullanıcı bir metini seçip sağ tıklayıp senin uygulamanı seçtiğinde senin uygulaman seçilen metini argüman alarak başlayacaktır. Bunları anlayacak kadar programlama bilgin varsa inanıyorum ki internetten uygun örnekleri bulup kendine uyarlayabilirsin.
 
Konu Sah

Hanif89

Üye
Katılım
9 Eki 2019
Mesajlar
6
Puanları
1
Bu işletim sisteminin çalışma prensibine aykırıdır. Bir uygulama simge durumuna küçüldüğünde işletim sistemi onun fare ve klavye erişimini kısıtlar ki diğer uygulamalar bunlara erişebilsin. Senin dediğinin en kolay yolu uygulamanı sağ tıklama menüsüne eklemek. Böylelikle uygulaman kapalı olsa bile kullanıcı bir metini seçip sağ tıklayıp senin uygulamanı seçtiğinde senin uygulaman seçilen metini argüman alarak başlayacaktır. Bunları anlayacak kadar programlama bilgin varsa inanıyorum ki internetten uygun örnekleri bulup kendine uyarlayabilirsin.
teşekkür ederim. Ancak bunu babylon gibi programlarda görmüştüm. Onlar nasıl yapıyorlar merak ediyorum doğrusu. Ayrıca başka bir programa sağ tıklandığında o programın istediği şekilde seçenekler sunuluyor. Sizin dediğiniz ancak program çalıştırmak için olabilir sanırım.
 

FakirMaker

Katılımcı Üye
Katılım
5 May 2009
Mesajlar
376
Puanları
58
Şöyle ki Babylon aşağıya küçülmüyor saat sekmesinde bir icon haline geliyor. İkisi birbirinden çok farklı. Saat sekmesinde çalışan bir program atanan öncelik sırasına göre her zaman aktiftir.babylon sürekli olarak klavye tuşlarını dinliyor arkaplanda. Bunun için işletim sisteminin sunduğu user32 ve kernel32 gibi dll dosyalarını kullanırlar. Yani uzun lafın kısası bunu yapmak kolay değildir. İşletim sistemi çekirdeği ve dll dosyaları C dilinde yazıldığı için vb yerine C türevi bi dil kullanmak daha akıllıca olur. Aşağıdaki kod c# dilinde space tuşuna basılınca capslock açıp kapatıyor.
C#:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

class Program
{
    private const int WH_KEYBOARD_LL = 13;
    private const int WM_KEYDOWN = 0x0100;
    private static LowLevelKeyboardProc _proc = HookCallback;
    private static IntPtr _hookID = IntPtr.Zero;
    private static bool lastKeyWasLetter = false;

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool UnhookWindowsHookEx(IntPtr hhk);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);

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

    [DllImport("user32.dll")]
    static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);

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

    [STAThread]
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        _hookID = SetHook(_proc);
        Application.Run();

        UnhookWindowsHookEx(_hookID);
    }

    private static IntPtr SetHook(LowLevelKeyboardProc proc)
    {
        using (Process curProcess = Process.GetCurrentProcess())
        using (ProcessModule curModule = curProcess.MainModule)
        {
            return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
        }
    }

    private static void ToggleCapsLock()
    {
        const int KEYEVENTF_EXTENDEDKEY = 0x1;
        const int KEYEVENTF_KEYUP = 0x2;

        UnhookWindowsHookEx(_hookID);
        keybd_event(0x14, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
        keybd_event(0x14, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
        _hookID = SetHook(_proc);
    }

    private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
    {
        if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
        {
            if (lastKeyWasLetter)
            {
                if (Control.IsKeyLocked(System.Windows.Forms.Keys.CapsLock))
                {
                    ToggleCapsLock();
                }
                lastKeyWasLetter = false;
            }
            Keys key = (Keys)Marshal.ReadInt32(lParam);           
            if (key == Keys.Space)
            {
                if (!Control.IsKeyLocked(System.Windows.Forms.Keys.CapsLock))
                {
                    ToggleCapsLock();
                }
            }
            else if (key >= Keys.A && key <= Keys.Z)
            {
                lastKeyWasLetter = true;
            }
        }
        return CallNextHookEx(_hookID, nCode, wParam, lParam);
    }
}

Ve ayrıca benim önerim programı açmak için değil programı bir argümanla açmak için kullanılır bu ikisi de birbirinden farklı.
 

Forum istatistikleri

Konular
115,531
Mesajlar
813,622
Kullanıcılar
422,141
Son üye
Cesur90

Yeni konular

Üst