powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Set text to SaveAs dialog
3 сообщений из 3, страница 1 из 1
Set text to SaveAs dialog
    #40053959
ramons
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. У меня есть следующая задача:

Нужно написать консольное приложение, которое будет находить стандартное SaveAs WindowsForm окно. В этом окне нужно найти контроол и вставить туда необходимый текст.
[img=]



Ниже приведен код, который это делает.

Код: 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.
[DllImport("user32.dll")]
    static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam);

    public const uint WM_SETTEXT = 0x000C;
    const int VK_F5 = 0x74;

    private static void InteropSetText(IntPtr iptrHWndDialog, string strTextToSet)
    {
        ///Step 1
        ///Find all parent controls on SaveAs dialog
        var list = GetChildWindows(iptrHWndDialog);

        ///Step 2
        /// Find control with className = "ComboBox"
        foreach (var item in list)
        {
            string className = GetWindowClass(item);
            
            if (className != "ComboBox")
                continue;

            HandleRef hrefHWndTarget = new HandleRef(null, item);

            /// Step 3
            ///Set text in Control. 
            SendMessage(hrefHWndTarget, WM_SETTEXT, IntPtr.Zero, strTextToSet);

            /// Step 4
            //HACK: Without press F5 button New filename was not applied in Save dialog
            PostMessage(item, WM_KEYDOWN, VK_F5, 0);
            return;
        }
    }



Step 1
находим список, всех контролов которые находятся на форме.

Step 2
В списке дочерних контролов находим ComboBox

Step 3
Вставляем текс в найденый ComboBox

После Step3 я могу видеть новый текст в ComboBox. Но при сохранении новый текст не применяется. ТАкое впечатление что новое значение не биндится в форму.

Поэтому был добавлен Step4, который эмулирует нажатие F5. И данный шаг решает проблему в ОС Windows 10.

Но данный хак не работает в Windows Server 2012 R2

Есть ли идеи как решить эту проблему ?
...
Рейтинг: 0 / 0
Set text to SaveAs dialog
    #40053984
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немножко мутно задача описана. Что вам нужно ?
Если вы хацкаете какое-то приложение, то почему бы его не хацкнуть по-людски, добавив в комбик строки, сохранив ассембли и тогда все надо сделать один раз. Или сделать это посторонним приложением, которое найдет комбик, добавит строки и сохранит(!) ассембли.
...
Рейтинг: 0 / 0
Set text to SaveAs dialog
    #40054005
ramons
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин,

Воодные условие. Есть консольное приложение, функция которого управлять кликами мишки другим виндовым приложением. Виндовое приложение конвертит видео из FLV в MP4.
В процессе конвертации виндовое приложене предлагает сохранить файл. Длинна файла может быть больше чем 255 символов, что недопустимо в Windows.

Я пытаюсь провалидировать длинну имени файла, если она больше чем 255 символов. то обрезать ее и снова вставить в диалоговое окно Save AS
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Set text to SaveAs dialog
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]