powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получить хендл активного окна.
12 сообщений из 12, страница 1 из 1
Получить хендл активного окна.
    #38103347
wvetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть код:
Код: c#
1.
2.
3.
4.
5.
6.
private void func2()
    {
       Process processes = Process.GetCurrentProcess();
       SetForegroundWindow(processes.MainWindowHandle);
       SendKeys.SendWait("{A}");
    }


У меня приложение WinForms, оно должно посылать символ А активному в данный момент окну (например, если открыт Блокнот, то в блокноте должна печататься "А").

Как(на что) мне заменить MainWindowHandle, чтобы символ А отправлялся в открытый и активный блокнот(или любое другое приложение, не указывая имя процесса)? (А то сейчас символ А отправляется в мое WinForms приложение).
Как получить хендл активного окна?
...
Рейтинг: 0 / 0
Получить хендл активного окна.
    #38103411
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GetForegroundWindow
...
Рейтинг: 0 / 0
Получить хендл активного окна.
    #38103442
wvetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyGetForegroundWindow

Спасибо - то что нужно.

Сделал так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();

...

private void func2()
    {
       Process processes = Process.GetCurrentProcess();
       SetForegroundWindow(GetForegroundWindow());
       SendKeys.SendWait("{A}");
    }
...
Рейтинг: 0 / 0
Получить хендл активного окна.
    #38103447
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А Process processes = Process.GetCurrentProcess(); для чего оставил?
...
Рейтинг: 0 / 0
Получить хендл активного окна.
    #38103533
wvetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyА Process processes = Process.GetCurrentProcess(); для чего оставил?
Торопился - забыл убрать. Конечно без него обойдусь. Спс.
...
Рейтинг: 0 / 0
Получить хендл активного окна.
    #38109111
wvetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтоб не создавать новой темы - напишу здесь вопрос:

Есть функция PostMessage.
Так вот два примера:

Код: c#
1.
2.
PostMessage(GetForegroundWindow(), WM_KEYDOWN, (int)Keys.F5, 0); // срабатывает, и идет вызов F5 (например в Блокноте)
PostMessage(GetForegroundWindow(), WM_KEYDOWN, (int)Keys.Q, 0); // не работает (в том же Блокноте не печатается Q), почему?


Почему второй PostMessage не работает?

ЗЫ: SendKeys - не предлагать.
...
Рейтинг: 0 / 0
Получить хендл активного окна.
    #38109597
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wvetal,

WM_SETTEXT
Только при использовании непосредственно хэндла окна это будет работать только в окнах, у которых непосредственный потомок от top-level window является edit control (как в случае с notepad, например). Если требуется послать текст в сфокусированный контрол более сложного окна, то, соответственно, придется действовать сложнее (см. тут ).
...
Рейтинг: 0 / 0
Получить хендл активного окна.
    #38110584
wvetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел библиотеку для эмуляции нажатия клавиш - InputSimulator.dll ( Вот )

Но она не во все окна(приложения) передает "нажатия клавиш". (В Блокнот передает)
Например, у меня есть приложение, написанное на Direct3D (оно реагирует на нажатие клавиатуры даже если окно не активно), но ни библиотека InputSimulator.dll, ни SendKeys не передает туда (в это приложение) "нажатия клавиш".

Вопрос: Можно ли программно эмулировать нажатие клавиатуры НЕ привязываясь к хендлам (или контролам) окон?
...
Рейтинг: 0 / 0
Получить хендл активного окна.
    #38110623
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wvetalНашел библиотеку для эмуляции нажатия клавиш - InputSimulator.dll ( Вот )

Но она не во все окна(приложения) передает "нажатия клавиш". (В Блокнот передает)
Например, у меня есть приложение, написанное на Direct3D (оно реагирует на нажатие клавиатуры даже если окно не активно), но ни библиотека InputSimulator.dll, ни SendKeys не передает туда (в это приложение) "нажатия клавиш".

Вопрос: Можно ли программно эмулировать нажатие клавиатуры НЕ привязываясь к хендлам (или контролам) окон?DirectX потому и direct, что весь ввод-вывод происходит мимо winforms. Для отправки нажатий в DicrectX-приложение нужно использовать DirectInput.
...
Рейтинг: 0 / 0
Получить хендл активного окна.
    #38110626
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть не мимо winforms, а мимо gdi.
...
Рейтинг: 0 / 0
Получить хендл активного окна.
    #38111953
wvetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, на правильном ли я пути (для эмулирования нажатия клавиши).

Значит использую теперь DirectInput.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
//объявляю клавиатуру
private Microsoft.DirectX.DirectInput.Device keyb;
...
keyb = new Microsoft.DirectX.DirectInput.Device(SystemGuid.Keyboard);
keyb.Acquire();
...
//клавиатура подхватывается, об этом свидетельствует попадание сюда:
KeyboardState keys2 = keyb.GetCurrentKeyboardState();
if (keys2[Key.E])
{
    MessageBox.Show("e");
}



Теперь, поправьте, правильно ли я рассуждаю: мне нужно каким-то образом записать в буфер клавиатуры код той клавиши, которую я хочу эмулировать? Правильно?
Какой метод(функцию) для этого можно(нужно) использовать?
Или я не в том направлении рою?
...
Рейтинг: 0 / 0
Получить хендл активного окна.
    #38112017
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На этот вопрос я не могу ответить, но могут ответить здесь или здесь .
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получить хендл активного окна.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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