Я сделал вид автоматики для входа в мои Email-аккаунты.Я работаю с функцией Postmessage из User32.DLL, потому что одна из моих главных целей заключается в том, чтобы программа могла работать в фоновом режиме, не всплывая.Это раздражает.
Итак, моя ошибка в том, что я не могу отправить '@' - Char.Нет, потому что клавиша STRG + ALT не нажата.Я немного исследовал, и один форум говорит, что невозможно эмулировать STR + ALT + AnyChar с Postmessage, но я решил эту проблему с ключом CapsLock, так что я думаю, что это возможно.Может быть, вы, ребята, можете мне помочь.Вот кусок моего кода:
[DllImport("user32.dll")]
static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern short VkKeyScan(char ch);
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
const int PROCESS_WM_READ = 0x0010;
const uint WM_LBUTTONDOWN = 0x201;
const uint WM_LBUTTONUP = 0x202;
const uint WM_KEYDOWN = 0x0100;
const uint WM_KEYUP = 0x0101;
const int KEYEVENTF_EXTENDEDKEY = 0x1;
const int KEYEVENTF_KEYUP = 0x2;
const int KEYEVENTF_KEYDOWN = 0x0;
public static Keys ConvertCharToVirtualKey(char ch)
{
short vkey = VkKeyScan(ch);
Keys retval = (Keys)(vkey & 0xff);
int modifiers = vkey >> 8;
if ((modifiers & 1) != 0) retval |= Keys.Shift;
if ((modifiers & 2) != 0) retval |= Keys.Control;
if ((modifiers & 4) != 0) retval |= Keys.Alt;
return retval;
}
//In this function lies the problem
static void SendText(string texty)
{
char[] characters = texty.ToCharArray();
Process[] processes = Process.GetProcessesByName("firefox");
foreach (Process p in processes)
{
if (p.ProcessName == "firefox")
{
for (int i = 0; i != characters.Length; i++)
{
if (characters[i] == '@')
{
//DO SOME OTHER STUFF M8Y
}
else
{
PostMessage(p.MainWindowHandle, WM_KEYUP, (int)ConvertCharToVirtualKey(characters[i]), 0);
}
System.Threading.Thread.Sleep(5);
if (Control.IsKeyLocked(Keys.CapsLock))
{
keybd_event(0x14, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
keybd_event(0x14, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
System.Threading.Thread.Sleep(60);
}
}
}
}
System.Threading.Thread.Sleep(35);
}