Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получить хендл активного окна. / 12 сообщений из 12, страница 1 из 1
09.01.2013, 13:54
    #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
09.01.2013, 14:22
    #38103411
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить хендл активного окна.
GetForegroundWindow
...
Рейтинг: 0 / 0
09.01.2013, 14:32
    #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
09.01.2013, 14:34
    #38103447
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить хендл активного окна.
А Process processes = Process.GetCurrentProcess(); для чего оставил?
...
Рейтинг: 0 / 0
09.01.2013, 15:00
    #38103533
wvetal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить хендл активного окна.
AntonariyА Process processes = Process.GetCurrentProcess(); для чего оставил?
Торопился - забыл убрать. Конечно без него обойдусь. Спс.
...
Рейтинг: 0 / 0
14.01.2013, 13:19
    #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
14.01.2013, 16:44
    #38109597
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить хендл активного окна.
wvetal,

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

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

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

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

Вопрос: Можно ли программно эмулировать нажатие клавиатуры НЕ привязываясь к хендлам (или контролам) окон?DirectX потому и direct, что весь ввод-вывод происходит мимо winforms. Для отправки нажатий в DicrectX-приложение нужно использовать DirectInput.
...
Рейтинг: 0 / 0
15.01.2013, 13:40
    #38110626
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить хендл активного окна.
То есть не мимо winforms, а мимо gdi.
...
Рейтинг: 0 / 0
16.01.2013, 12:31
    #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
16.01.2013, 12:59
    #38112017
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить хендл активного окна.
На этот вопрос я не могу ответить, но могут ответить здесь или здесь .
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получить хендл активного окна. / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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