Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
18 / 18 / 15
Регистрация: 27.11.2013
Сообщений: 470

SendKeys.Send срабатывает не всегда

24.07.2020, 15:32. Показов 904. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть следующие методы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 async Task PopulateInputFile_poster(GeckoHtmlElement file_poster)
        {
 
            //delay the execution of SendKey to let the Choose File dialog show up
           var sendKeyTask = Task.Delay(500).ContinueWith((_) =>
           { 
               // this gets executed when the dialog is visible
               SendKeys.Send(@"D:\File\poster.jpg" + "{ENTER}");
           }, TaskScheduler.FromCurrentSynchronizationContext());
 
            file_poster.Click();
            //file_poster.InvokeMember("Click"); // this shows up the dialog
 
            await sendKeyTask;
 
            //delay continuation to let the Choose File dialog hide
           await Task.Delay(500);
        }
 
        async Task PopulateInputFile(GeckoHtmlElement file)
        {
            file.Focus();
            // delay the execution of SendKey to let the Choose File dialog show up
            var sendKeyTask = Task.Delay(500).ContinueWith((_) =>
            {
                // this gets executed when the dialog is visible
                SendKeys.Send(@"D:\File\poster1.jpg" + "{ENTER}");
            }, TaskScheduler.FromCurrentSynchronizationContext());
 
            file.Click(); // this shows up the dialog
 
            await sendKeyTask;
 
            // delay continuation to let the Choose File dialog hide
            await Task.Delay(500);
        }
 
        async Task Populate()
        {
            var elements = geckoWebBrowser1.Document.GetElementsByTagName("input");
 
            //постер
            foreach (GeckoHtmlElement file_poster in elements)
            {
                if (file_poster.GetAttribute("name") == "file1")
                {
                     file_poster.Focus();
 
                    await PopulateInputFile_poster(file_poster);
                }
 
            }
 
            foreach (GeckoHtmlElement file in elements)
            {
                if (file.GetAttribute("name") == "file")
                {
                    file.Focus();
                    await PopulateInputFile(file);
                }
            }
        }
Вызываю так:
C#
1
2
3
4
Populate().ContinueWith((_) =>
            {
 
            }, TaskScheduler.FromCurrentSynchronizationContext());
Использовал этот способ для автозаполнения input type="file" в webbrowser. Но т.к. в нем уже даже ajax перестал работать, то я решил перейти на geckofx60. Этот способ работает и в нем, но здесь проблема в том, что не всегда срабатывает нажатие кнопки ENTER, хотя путь в диалоговом окне успевает заполниться. В результате окна выбора файлов остаются висеть поверх друг друга и мне приходится просто нажимать "открыть", чтобы выбрать нужный файл. Хотелось бы автоматизировать весь процесс)

Может есть решение этой проблемы?
Еще я пытался через setAttribute установить в value поля путь к файлу, но этот способ не работает. Я читал о том, что в браузерах есть защита от подобных манипуляций, но не думал, что ее добавят и в решения, типа gecko, которые как раз предназначены для программного взаимодействия с полями.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.07.2020, 15:32
Ответы с готовыми решениями:

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

Как отправить Ctrl+V через SendKeys.Send()?
Скажите пожалуйста как сделать ctrl+v. Все перепробовал ничего не робит.

Не срабатывает SendKeys.SendWait
Если кнопка мыши нажата,то SendKeys.SendWait("{DOWN}") листание НЕ вызывает. При этом я нашел, что событие richTextBox1_KeyUp происходит, а...

2
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
26.07.2020, 11:06
SendKeys посылает нажатия в активное окно, а не в определенное, поэтому не стоит рассчитывать на надежность такого решения
0
18 / 18 / 15
Регистрация: 27.11.2013
Сообщений: 470
26.07.2020, 12:36  [ТС]
Цитата Сообщение от nicolas2008 Посмотреть сообщение
SendKeys посылает нажатия в активное окно, а не в определенное, поэтому не стоит рассчитывать на надежность такого решения
Ну вот проблема в том, что в webbrowser окно всегда оставалось активным и другие не вызывались, пока это не закроется. А в gecko Это почему-то игнорируется.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.07.2020, 12:36
Помогаю со студенческими работами здесь

Не срабатывает SendKeys.Send();
Здравствуйте! Пишу биржевого робота в программе CAlgo (это язык C# дополненный несколькими библиотеками). При вызове функции...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru