|
Какой рейтинг вас больше интересует?
|
Главная /
Каталог блоговCтраница блогера Справочник по C#/Записи в блоге |
![]() |
|
Балуемся индикаторами NumLock, CapsLock, ScrollLock на клавиатуре!
2012-10-23 12:55:33 (читать в оригинале)

Для работы нам понадобится подключить пространство имен:
using System.Runtime.InteropServices; using System.Threading;И добавить компонент таймер со свойствами:
Enabled: True
Interval: 1000
Теперь переходим к коду:
private const byte VK_SCROLL = 0x91;
private const byte VK_NUMLOCK = 0x90;
private const byte VK_CAPITAL = 0x14;
private const uint KEYEVENTF_KEYUP = 0x2;
[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
[DllImport("user32.dll", EntryPoint = "GetKeyState", SetLastError = true)]
static extern short GetKeyState(uint nVirtKey);
//Scroll-------------------------------------------------------
public static void SetScrollLockKey(bool newState)
{
bool scrollLockSet = GetKeyState(VK_SCROLL) != 0;
if (scrollLockSet != newState)
{
keybd_event(VK_SCROLL, 0, 0, 0);
keybd_event(VK_SCROLL, 0, KEYEVENTF_KEYUP, 0);
}
}
public static bool GetScrollLockState()
{
return GetKeyState(VK_SCROLL) != 0;
}
//NUM-------------------------------------------------------
public static void SetNumLockKey(bool newState)
{
bool scrollLockSet = GetKeyState(VK_NUMLOCK) != 0;
if (scrollLockSet != newState)
{
keybd_event(VK_NUMLOCK, 0, 0, 0);
keybd_event(VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0);
}
}
public static bool GetNumLockState()
{
return GetKeyState(VK_NUMLOCK) != 0;
}
//Caps-------------------------------------------------------
public static void SetCapsLockKey(bool newState)
{
bool scrollLockSet = GetKeyState(VK_NUMLOCK) != 0;
if (scrollLockSet != newState)
{
keybd_event(VK_CAPITAL, 0, 0, 0);
keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0);
}
}
public static bool GetCapsLockState()
{
return GetKeyState(VK_CAPITAL) != 0;
}
Для реализации поочередного включения/выключения в таймер вставляете вот этот код:SetNumLockKey(true); Thread.Sleep(100); SetNumLockKey(false); Thread.Sleep(100); SetCapsLockKey(true); Thread.Sleep(100); SetCapsLockKey(false); Thread.Sleep(100); SetScrollLockKey(true); Thread.Sleep(100); SetScrollLockKey(false); Thread.Sleep(100);Вы так же можете пользоваться этими функциями по отдельности в случае если что-то необходимо включить:
SetNumLockKey(true);или выключить!
SetNumLockKey(false);
Определяем место запуска приложения(сеть или локальная машина)
2012-10-23 12:53:53 (читать в оригинале)

Для работы, необходимо подключить следующее пространство имен:
using System.IO;Код реализации данной задачи:
public static bool IsLocal()
{
DirectoryInfo dir = new DirectoryInfo(Application.StartupPath);
return (from d in DriveInfo.GetDrives()
where string.Compare(dir.Root.FullName, d.Name, StringComparison.OrdinalIgnoreCase) == 0
select (d.DriveType != DriveType.Network)
).FirstOrDefault();
}
Пример использования функции:private void button1_Click(object sender, EventArgs e)
{
if (IsLocal() == true)
{
MessageBox.Show("Запущен на локальной машине");
}
else
{
MessageBox.Show("Запущен из сети");
}
}
Блокируем все запущенные приложения кроме своего
2012-10-23 09:41:15 (читать в оригинале)

Данная функция позволяет реализовать блокировку всех запускаемых и запущенных приложений кроме вашего, мне данный код пригодился в реализации родительского контроля!
Для работы нам необходимо подключить следующее пространство имен:
using System.Runtime.InteropServices;Подключаем функции GetDesktopWindow,GetWindow и EnableWindow из библиотеки user32.dll.
[DllImport("user32.dll", SetLastError = false)]
static extern IntPtr GetDesktopWindow();
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr GetWindow(IntPtr hWnd, GetWindow_Cmd uCmd);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnableWindow(IntPtr hWnd, bool bEnable);
Объявляем необходимы нам флаги для прохода по приложениямenum GetWindow_Cmd : uint
{
GW_HWNDFIRST = 0,
GW_HWNDLAST = 1,
GW_HWNDNEXT = 2,
GW_HWNDPREV = 3,
GW_OWNER = 4,
GW_CHILD = 5,
GW_ENABLEDPOPUP = 6
}
Ну и сама функция блокировки приложений:private void button1_Click(object sender, EventArgs e)
{
//получаем первое дочернее окно Рабочего стола
IntPtr hwnd = GetWindow(GetDesktopWindow(), GetWindow_Cmd.GW_CHILD);
if (hwnd != IntPtr.Zero)
{
//перебираем все окна в системе
while (hwnd != IntPtr.Zero)
{
//проверка, что блокируем не свое окно
if (hwnd != this.Handle)
{
//блокируем окно
//(вид окна, как будто его блокирует диалоговое окно)
EnableWindow(hwnd, false);
}
//получаем хендл следующего окна
hwnd = GetWindow(hwnd, GetWindow_Cmd.GW_HWNDNEXT);
}
}
}
Указывая в EnableWindow(hwnd, false) true или false вы блокируете или разблокируете приложения!Программно выполняем Ctrl+C
2012-10-23 08:51:42 (читать в оригинале)

[DllImport("user32.dll", SetLastError = true)]
private static extern void keybd_event( byte bVk, byte bScan, uint dwFlags, int dwExtraInfo );
private static void SendCtrlhotKey( char key ) {
keybd_event( 0x11, 0, 0, 0);
keybd_event( (byte)key, 0, 0, 0);
keybd_event( (byte)key, 0, 0x2, 0);
keybd_event( 0x11, 0, 0x2, 0);
}
Пример как использовать:SendCtrlhotKey( 'C' );
Отслеживаем состояние раскладки клавиатуры
2012-10-19 14:25:12 (читать в оригинале)

public Form1()
{
InitializeComponent();
timer1 = new Timer();
this.timer1.Enabled = true;
this.timer1.Interval = 777;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
this.TopMost = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = GetKeyboardLayoutId();
}
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr GetKeyboardLayout(int WindowsThreadProcessID);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int GetWindowThreadProcessId(IntPtr handleWindow, out int lpdwProcessID);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetForegroundWindow();
private static InputLanguageCollection _InstalledInputLanguages;
// Идентификатор активного потока
private static int _ProcessId;
// Текущий язык ввода
private static string _CurrentInputLanguage;
private static string GetKeyboardLayoutId()
{
_InstalledInputLanguages = InputLanguage.InstalledInputLanguages;
// Получаем хендл активного окна
IntPtr hWnd = GetForegroundWindow();
// Получаем номер потока активного окна
int WinThreadProcId = GetWindowThreadProcessId(hWnd, out _ProcessId);
// Получаем раскладку
IntPtr KeybLayout = GetKeyboardLayout(WinThreadProcId);
// Циклом перебираем все установленные языки для проверки идентификатора
for (int i = 0; i < _InstalledInputLanguages.Count; i++)
{
if (KeybLayout == _InstalledInputLanguages[i].Handle)
{
_CurrentInputLanguage = _InstalledInputLanguages[i].Culture.ThreeLetterWindowsLanguageName.ToString();
}
}
return _CurrentInputLanguage;
}
Категория «Поэты»
Взлеты Топ 5
|
| ||
|
+27 |
41 |
biletiks |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Падения Топ 5
|
| ||
|
-5 |
36 |
Счастливые мамашки |
|
-9 |
2 |
gvud |
|
-16 |
13 |
mydorian |
|
|
|
|
|
|
|
|
Популярные за сутки
Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.
взяты из открытых общедоступных источников и являются собственностью их авторов.

