Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/41: Рейтинг темы: голосов - 41, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 23.06.2012
Сообщений: 55

Не срабатывает SendKeys.Send();

01.08.2016, 13:02. Показов 7839. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Пишу биржевого робота в программе CAlgo (это язык C# дополненный несколькими библиотеками).
При вызове функции SendKeys.Send("{Down}"); (сгенерировать нажатие кнопки "вниз" на клавиатуре) получаю ошибку:

28/07/2016 22:23:59.134 | Crashed in OnTick with SecurityException: Сбой при запросе разрешения типа "System.Security.Permissions.SecurityPer mission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".

При вынесении этой функции в комментарий ошибки не происходит.
На странице документации msdn написано, что этот класс содержится в файле mscorlib.dll, но подключить этот класс не удаётся. При компиляции возникает ошибка

Error CS1703: Сборка с идентификацией "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" уже импортирована. Рекомендуется удались одну из повторяющихся ссылок.

Правильно ли я понимаю, что эта библиотека по умолчанию подключена в программе?
И мой основной вопрос: можно ли как-нибудь программно решить мою проблему, или нужно редактировать библиотеку? Если второе, то в какую сторону копать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.08.2016, 13:02
Ответы с готовыми решениями:

Функция SendKeys.Send не работает
Такой вот вопрос: Если хочу передать программе сочетания клавиш Alt+F4 пишу: SendKeys.Send("%{F4}"); // И окно...

Отправка даты через SendKeys.Send
Скажите каким образом можно с имитировать ввод текущей даты через SendKeys.Sen или каким то другим способом? Зарание спасибо

Как использовать SendKeys.Send
Здравствуйте. Имитирую печать символов в документ Word. Для этого использую функцию SendKeys.Send(); Для того чтобы использовать её...

8
10 / 10 / 1
Регистрация: 27.11.2011
Сообщений: 153
01.08.2016, 14:54
SeMiTr, Если вам нужно эмулировать нажатие кнопок в окне, то лучше использовать WinAPI SendMessage или PostMessage
1
0 / 0 / 1
Регистрация: 23.06.2012
Сообщений: 55
03.08.2016, 16:03  [ТС]
using System.Runtime.InteropServices; - подключил

C#
1
2
3
4
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
static extern IntPtr GetActiveWindow();
- тоже прописал.

Далее:
C#
1
2
IntPtr h1C = GetActiveWindow();
SendMessage(h1C, ...
А что после этой запятой - так и не понял. Инструкция по дополнительным полям длинная и на английском. Как к примеру нажать клавишу "Вниз"?
0
10 / 10 / 1
Регистрация: 27.11.2011
Сообщений: 153
03.08.2016, 16:43
C#
1
2
3
4
5
6
7
 //объявление функции
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
//Вызов функции где-то в коде
SendMessage(hwnd, 0x100, 0x28, 0); //hwnd - собственно хендел окна в кторое отпраляется сообщение, 
                                   //0x100 - говорит что обрабатывается именно нажатие кнопки, 
                                  //0х28 - код клавиши вниз
Другие коды клавиш
Кликните здесь для просмотра всего текста

WM_LBUTTONDOWN = 0x201, //Left mousebutton down
WM_LBUTTONUP = 0x202, //Left mousebutton up
WM_LBUTTONDBLCLK = 0x203, //Left mousebutton doubleclick
WM_RBUTTONDOWN = 0x204, //Right mousebutton down
WM_RBUTTONUP = 0x205, //Right mousebutton up
WM_RBUTTONDBLCLK = 0x206, //Right mousebutton doubleclick
WM_KEYDOWN = 0x100, //Key down
WM_KEYUP = 0x101, //Key up
WM_MOUSEMOVE = 0x0200,
WM_ACTIVATE = 0x0006,
WM_QUERYOPEN = 0x0013,
WM_SYSCOMMAND = 0x0112,
WM_CHAR = 0x0102,
WM_SYSKEYDOWN = 0x0104,
WM_SYSKEYUP = 0x0105,
WM_SETCURSOR = 0x0020,
WM_MOUSEACTIVATE = 0x0021,
CB_SETCURSEL = 0x014E,
WM_MOUSEHOVER = 0x02A1,
WM_MOUSELEAVE = 0x02A3,
MK_CONTROL = 0x0008,
MK_LBUTTON = 0x0001,
MK_MBUTTON = 0x0010,
MK_RBUTTON = 0x0002,
MK_SHIFT = 0x0004,
MK_XBUTTON1 = 0x0020,
MK_XBUTTON2 = 0x0040,
VK_LBUTTON = 0x01, //Left mouse button
VK_RBUTTON = 0x02, //Right mouse button
VK_CANCEL = 0x03, //Control-break processing
VK_MBUTTON = 0x04, //Middle mouse button (three-button mouse)
VK_BACK = 0x08, //BACKSPACE key
VK_TAB = 0x09, //TAB key
VK_CLEAR = 0x0C, //CLEAR key
VK_RETURN = 0x0D, //ENTER key
VK_SHIFT = 0x10, //SHIFT key
VK_CONTROL = 0x11, //CTRL key
VK_MENU = 0x12, //ALT key
VK_PAUSE = 0x13, //PAUSE key
VK_CAPITAL = 0x14, //CAPS LOCK key
VK_ESCAPE = 0x1B, //ESC key
VK_SPACE = 0x20, //SPACEBAR
VK_PRIOR = 0x21, //PAGE UP key
VK_NEXT = 0x22, //PAGE DOWN key
VK_END = 0x23, //END key
VK_HOME = 0x24, //HOME key
VK_LEFT = 0x25, //LEFT ARROW key
VK_UP = 0x26, //UP ARROW key
VK_RIGHT = 0x27, //RIGHT ARROW key
VK_DOWN = 0x28, //DOWN ARROW key
VK_SELECT = 0x29, //SELECT key
VK_PRINT = 0x2A, //PRINT key
VK_EXECUTE = 0x2B, //EXECUTE key
VK_SNAPSHOT = 0x2C, //PRINT SCREEN key
VK_INSERT = 0x2D, //INS key
VK_DELETE = 0x2E, //DEL key
VK_HELP = 0x2F, //HELP key
VK_0 = 0x30, //0 key
VK_1 = 0x31, //1 key
VK_2 = 0x32, //2 key
VK_3 = 0x33, //3 key
VK_4 = 0x34, //4 key
VK_5 = 0x35, //5 key
VK_6 = 0x36, //6 key
VK_7 = 0x37, //7 key
VK_8 = 0x38, //8 key
VK_9 = 0x39, //9 key
VK_A = 0x41, //A key
VK_B = 0x42, //B key
VK_C = 0x43, //C key
VK_D = 0x44, //D key
VK_E = 0x45, //E key
VK_F = 0x46, //F key
VK_G = 0x47, //G key
VK_H = 0x48, //H key
VK_I = 0x49, //I key
VK_J = 0x4A, //J key
VK_K = 0x4B, //K key
VK_L = 0x4C, //L key
VK_M = 0x4D, //M key
VK_N = 0x4E, //N key
VK_O = 0x4F, //O key
VK_P = 0x50, //P key
VK_Q = 0x51, //Q key
VK_R = 0x52, //R key
VK_S = 0x53, //S key
VK_T = 0x54, //T key
VK_U = 0x55, //U key
VK_V = 0x56, //V key
VK_W = 0x57, //W key
VK_X = 0x58, //X key
VK_Y = 0x59, //Y key
VK_Z = 0x5A, //Z key
VK_NUMPAD0 = 0x60, //Numeric keypad 0 key
VK_NUMPAD1 = 0x61, //Numeric keypad 1 key
VK_NUMPAD2 = 0x62, //Numeric keypad 2 key
VK_NUMPAD3 = 0x63, //Numeric keypad 3 key
VK_NUMPAD4 = 0x64, //Numeric keypad 4 key
VK_NUMPAD5 = 0x65, //Numeric keypad 5 key
VK_NUMPAD6 = 0x66, //Numeric keypad 6 key
VK_NUMPAD7 = 0x67, //Numeric keypad 7 key
VK_NUMPAD8 = 0x68, //Numeric keypad 8 key
VK_NUMPAD9 = 0x69, //Numeric keypad 9 key
VK_SEPARATOR = 0x6C, //Separator key
VK_SUBTRACT = 0x6D, //Subtract key
VK_DECIMAL = 0x6E, //Decimal key
VK_DIVIDE = 0x6F, //Divide key
VK_F1 = 0x70, //F1 key
VK_F2 = 0x71, //F2 key
VK_F3 = 0x72, //F3 key
VK_F4 = 0x73, //F4 key
VK_F5 = 0x74, //F5 key
VK_F6 = 0x75, //F6 key
VK_F7 = 0x76, //F7 key
VK_F8 = 0x77, //F8 key
VK_F9 = 0x78, //F9 key
VK_F10 = 0x79, //F10 key
VK_F11 = 0x7A, //F11 key
VK_F12 = 0x7B, //F12 key
VK_SCROLL = 0x91, //SCROLL LOCK key
VK_LSHIFT = 0xA0, //Left SHIFT key
VK_RSHIFT = 0xA1, //Right SHIFT key
VK_LCONTROL = 0xA2, //Left CONTROL key
VK_RCONTROL = 0xA3, //Right CONTROL key
VK_LMENU = 0xA4, //Left MENU key
VK_RMENU = 0xA5, //Right MENU key
VK_PLAY = 0xFA, //Play key
VK_ZOOM = 0xFB; //Zoom key
1
0 / 0 / 1
Регистрация: 23.06.2012
Сообщений: 55
05.08.2016, 09:37  [ТС]
Полностью так, как Вы говорили не получилось. Скомпилировал так:
SendMessage(h1C, 0x100, new IntPtr(0x28), new IntPtr(0));

Но получил ты же ошибку.
05/08/2016 08:31:04.986 | Crashed in OnTick with SecurityException: Сбой при запросе разрешения типа "System.Security.Permissions.SecurityPer mission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".
Вопрос по-прежнему
Цитата Сообщение от SeMiTr Посмотреть сообщение
Правильно ли я понимаю, что эта библиотека по умолчанию подключена в программе?
И мой основной вопрос: можно ли как-нибудь программно решить мою проблему, или нужно редактировать библиотеку? Если второе, то в какую сторону копать?
0
10 / 10 / 1
Регистрация: 27.11.2011
Сообщений: 153
07.08.2016, 16:04
SeMiTr, Решешие этой проблемы заключается вот в чем: необходимо изменить AccessRights = AccessRights.None на AccessRights = AccessRights.FullAccess
1
0 / 0 / 1
Регистрация: 23.06.2012
Сообщений: 55
12.08.2016, 19:27  [ТС]
Хочется, чтобы "ANTSOFT Key Manager v1.11" перехватывал это нажатие. Попробовал даже нажатие внутри самого "Key Manager" но результата нет. При нажатии на клавиатуру - есть, а программно - нет.
части кода работающие с клавиатурой:
C#
1
2
3
4
5
6
7
8
9
10
11
12
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
static extern IntPtr GetActiveWindow();
[DllImport("user32.dll")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
// объявлено в классе MycBot : Robot т. есть вверху внутри единственного класса
...
//IntPtr h1C = GetActiveWindow();
IntPtr h1C = FindWindow(null, "ATNSOFT Key Manager v1.11");
SendMessage(h1C, 0x100, (IntPtr)0x28, (IntPtr)0);
Stop();
После Stop() программа останавливается (во всех других случаях - нет).
0
10 / 10 / 1
Регистрация: 27.11.2011
Сообщений: 153
12.08.2016, 19:44
SeMiTr, Возьмите Spy и посмотрите как выглядят сообщения о нажатии кнопок в вашей программе. У меня бывало такое что кроме самого кода клавиши требовалось передавать еще и ScanCode этой клавиши в lParam. Это раз. Вы через отладчик проверяли,
C#
1
IntPtr h1C = FindWindow(null, "ATNSOFT Key Manager v1.11");
точно получает хендел окна? Это два. У "ATNSOFT Key Manager v1.11" точно один хендел на все окно? Бывает такое что у контролов могут быть свои хендлы. Это три.
1
0 / 0 / 1
Регистрация: 23.06.2012
Сообщений: 55
17.08.2016, 16:29  [ТС]
Не знаю, в чём было дело, возможно генерировалось нажатие клавиш, и не генерировалось отпускание. Или оно происходило слишком быстро, чтобы программа успевала его заметить. Но сработал следующий вариант.
C#
1
SendKeys.SendWait("%1");
А в программе clickermann
IF (iskeydown(#ALT)=1)
IF(iskeydown(#1)=1)
WAITMS(5)
LOGWRITE("Вверх")
LCLICK(36, 321)
KEYDOWN(#ALT)
KEYDOWN(#1)
WAITMS(5)
KEYUP(#ALT)
KEYUP(#1)
WAITMS(1)
END_IF
END_IF
или что-то аналогичное с одной кнопкой
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.08.2016, 16:29
Помогаю со студенческими работами здесь

Не срабатывает SendKeys при повторном нажатии горячих клавиш
Здравствуйте, не срабатывает SendKeys при повторном нажатии горячих клавиш. Я понимаю, что дело в скорости обработки сообщений WinAPI,...

SendKeys.Send("^v") отправляется как "v"
Команда SendKeys.Send("^v") вместо Ctrl+v как будто нажимает просто v. Одна и та же прога, в которой я не делал изменений, один день...

Проблема с SendKeys.Send
Всем привет! Подскажите в чём затык, пытаюсь управлять программой через горячие клавиши и например с paint'ом всё гуд, а с автокадом тоже...

Ошибка. Не работает SendKeys.Send
Есть программа, в ней есть момент когда должна отправится например кнопка А ( с помощью SendKeys.Send ), так вот у меня эта кнопка...

SendKeys.Send программное нажатие клавиш?
Здрасти всем. Дело заключается вот в чем: есть приложение, пусть будет скайп, в нем забиндина кнопка для отключения микрофона допустим...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru