
27.08.2009, 18:29
|
|
Новичок
Регистрация: 28.11.2007
Сообщений: 13
Провел на форуме: 115313
Репутация:
1
|
|
Вот класс который я составил:
Код:
class KeyboardHook
{
[DllImport("user32")]
public static extern int OemKeyScan(int wOemChar);
[DllImport("user32", EntryPoint = "PostMessageA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern bool PostMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
[DllImport("user32.dll")]
static extern uint MapVirtualKey(uint uCode, uint uMapType);
static int WM_KEYDOWN = 0x0100;
static int WM_KEYUP = 0x0101;
static int WM_CHAR = 0x0102;
static byte ORD(char ch)
{
return System.Text.Encoding.ASCII.GetBytes(new char[] { ch })[0];
}
public static void SendShift(bool Down)
{
ushort vKey, ScanCode, wParam;
int lParam;
vKey = 0x10;
ScanCode = MapVirtualKey(vKey, 0);
wParam = vKey || ScanCode << 8;
lParam = longint(ScanCode) << 16 || 1;
if (!Down)
{ lParam = lParam || 0xC0000000; }
PostMessage(BotContro1l.mem.WindowHandle, WM_KEYDOWN, vKey, lParam);
}
public static void SendCtrl(bool Down)
{
ushort vKey, ScanCode, wParam;
int lParam;
vKey = 0x11;
ScanCode = MapVirtualKey(vKey, 0);
wParam = vKey || ScanCode << 8;
lParam = longint(ScanCode) << 16 || 1;
if (!Down)
{ lParam = lParam || 0xC0000000; }
PostMessage(BotContro1l.mem.WindowHandle, WM_KEYDOWN, vKey, lParam);
}
public static void SendKey(char Key)
{
ushort ScanCode, vKey, wParam;
int lParam, ConvKey;
bool Shift, Ctrl;
ConvKey = OemKeyScan(ORD(Key));
ScanCode = (ConvKey && 0x000000FF) || 0xFF00;
vKey = ORD(Key);
wParam = vKey;
lParam = (int)ScanCode << 16 || 1;
if ((ConvKey && 0x00020000) != 0)
SendShift(true);
if ((ConvKey && 0x00040000) != 0)
SendCtrl(true);
PostMessage(BotContro1l.mem.WindowHandle, WM_KEYDOWN, vKey, lParam);
PostMessage(BotContro1l.mem.WindowHandle, WM_CHAR, vKey, lParam);
lParam = lParam || 0xC0000000;
PostMessage(BotContro1l.mem.WindowHandle, WM_KEYUP, vKey, lParam);
if ((ConvKey && 0x00020000) != 0)
SendShift(false);
if ((ConvKey && 0x00040000) != 0)
SendCtrl(false);
}
public static void SendString(string s)
{
for (int i = 1; i != s.Length; i++)
{
SendKey(s[i]);
}
}
}
Проблема в том что Я не понимаю для чего в Deplhi используется в переменных and or и тп. И зачем по
битовый снов используется. Кому не трудно распишите.
Кто-нибудь может показать как эти строки на C# буду выглядеть?
Код:
Ctrl:= (ConvKey and $00040000) <> 0;
wParam:= vKey or ScanCode shl 8;
ScanCode:= ConvKey and $000000FF or $FF00;
Последний раз редактировалось QJHoly; 28.08.2009 в 04:27..
|
|
|