Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2015, 16:58   #1
ZiDoxFix
Пользователь
 
Регистрация: 09.05.2015
Сообщений: 70
По умолчанию Развернуть форму по горячим клавишам!

Имеется форма в трее, как можно по нажатию клавиш снова её развернуть ?
ZiDoxFix вне форума Ответить с цитированием
Старый 26.05.2015, 17:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Зарегистрировать горячую клавишу.
Дедовский метод: Функция RegisterHotKey.
Хотя может в Шарпее есть для этого компонент или класс специальный.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.05.2015, 22:52   #3
ZiDoxFix
Пользователь
 
Регистрация: 09.05.2015
Сообщений: 70
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Зарегистрировать горячую клавишу.
Дедовский метод: Функция RegisterHotKey.
Хотя может в Шарпее есть для этого компонент или класс специальный.
Вроде так сделал:

Импортировал длл
[DllImport("user32.dll")]
private static extern bool RegisterHotKey(IntPtr hwnd, int id, uint fsModifiers, uint keyCode);

в InitializeComponent(); поставил:
this.KeyPreview = true;

private void button12_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F1 && e.Alt)
{
this.Visible = false; /* скроем форму */
notifyIcon1.Visible = true; /* покажем икону в трее */
}
}

такой код скрывает форму по нажатию клавиш F1 + Alt!
а как развернуть мне её? у меня не получается!
ZiDoxFix вне форума Ответить с цитированием
Старый 26.05.2015, 23:16   #4
ZiDoxFix
Пользователь
 
Регистрация: 09.05.2015
Сообщений: 70
По умолчанию

Вообщем понял как реализовать и получилось: поделюсь!
Добавил класс hook.cs
подключил его добавил код:
private Hook _hook;

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

public Form1()
{
TopMost = true;
InitializeComponent();
this.KeyPreview = true;
keybd_event(0x71, 0x45, 0x1, (UIntPtr)0);
_hook = new Hook(0x71); //Передаем код клавиши на которую ставим хук

_hook.KeyPressed += new KeyPressEventHandler(_hook_KeyPress ed);
_hook.SetHook();
}

P.s где (0x71) это код клавиши
вот сайт по ним:http://www.arininav.ru/js/keycodes.htm


Вот сам класс:
// Копируем вставляем в тестовый документ сохраняем под названием Hook.cs,
перетаскиваем в проект!


public class Hook : IDisposable
{
#region Declare WinAPI functions
[DllImport("kernel32.dll")]
private static extern IntPtr LoadLibrary(string lpFileName);

[DllImport("user32.dll")]
private static extern IntPtr SetWindowsHookEx(int idHook, KeyboardHookProc callback, IntPtr hInstance, uint threadId);
[DllImport("user32.dll")]
private static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, int wParam, IntPtr lParam);
[DllImport("user32.dll")]
private static extern bool UnhookWindowsHookEx(IntPtr hInstance);
#endregion
#region Constants
private const int WH_KEYBOARD_LL = 13;
private const int WH_KEYDOWN = 0x0100;
#endregion

// код клавиши на которую ставим хук
private int _key;
public event KeyPressEventHandler KeyPressed;

private delegate IntPtr KeyboardHookProc(int code, IntPtr wParam, IntPtr lParam);
private KeyboardHookProc _proc;
private IntPtr _hHook = IntPtr.Zero;

public Hook(int keyCode)
{
_key = keyCode;
_proc = HookProc;
}

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

public void Dispose()
{
UnHook();
}

public void UnHook()
{
UnhookWindowsHookEx(_hHook);
}

private IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam)
{
if ((code >= 0 && wParam == (IntPtr)WH_KEYDOWN) && Marshal.ReadInt32(lParam) == _key)
{

// бросаем событие
if (KeyPressed != null)
{
KeyPressed(this, new KeyPressEventArgs(Convert.ToChar(co de)));
}
}

// пробрасываем хук дальше
return CallNextHookEx(_hHook, code, (int)wParam, lParam);
}
}

Последний раз редактировалось ZiDoxFix; 26.05.2015 в 23:19. Причина: Добавил класс
ZiDoxFix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как развернуть форму? Janger Общие вопросы Delphi 3 01.10.2013 07:21
Исчез доступ к горячим клавишам Andrey85 Общие вопросы Delphi 5 03.12.2010 13:59
как свернуть и развернуть форму? blackstersl Общие вопросы Delphi 7 25.06.2009 09:20
Как развернуть свернутую форму? XPAiN Общие вопросы Delphi 2 14.02.2008 15:51
Развернуть форму Veiron Общие вопросы Delphi 4 24.01.2008 11:08