= Process.Start("notepad");
p.WaitForInputIdle();
while (true)
{
SendKeys.SendWait("x");
Thread.Sleep(1000);
}
Я компилирую его в exe и перезагружаю компьютер. Если я запускаю после этого exe файл, то при вводе символов не будут учитываться нажатия Shift, Ctrl, Caps Lock и т.д. Это поведение не будет меняться, пока я хотя бы один раз не вызову dotnet run на проект. После этого Shift, Ctrl и Caps Lock начнут учитываться при открытии того же exe вплоть до перезагрузки компьютера.
С чем это вообще может быть связано?
Что ты сделать то хочешь? Почему ждешь пока нотпад не войдет в idle?
Что сделать хочу – объяснить сложно, меня интересует, почему именно такое поведение. Это поведение не связано с конкретно блокнотом (в любых других текстовых полях тоже воспроизводится), это просто тестовый код, чтобы кто-то тоже мог попробовать воспроизвести. Жду idle, потому что (как я понимаю этот метод) она отпустит выполнение кода, когда окно нотпада полностью загрузится
С тем что .Net писали ебланы. Когда ты запускаешь dotnet run у тебя поднимается vhost, который, скорее всего, не опускается с выходом из приложения, так как .Net это в любом случае (особенно .Net core) dll и ей похуй в куда грузиться ебланы из микрософт решили что похуй куда оно будет грузиться, а это не так, так как наведенка.
Сразу предупреждаю, что так будет практически с любыми WinAPI зависимыми вещами. Чем более экзотичное оно (а SendKeys - экзотично), тем более проблемно. И если окошки с WinProc они вроде вылизали то вот такое может и будет содержать внезапные грабли.
Буду подпирать грабли костылями)
Я точно не помню что конкретно не так с SendKeys(Ex) Но там точно была наведенка от сборки и от факта запуска VS (причем не всех)
просто клади рядом проект и сначала делай process start dotnet run, а потом блокнот открывай
примерно так и буду делать, видимо, просто перед каждым запуском звать run
Обсуждают сегодня