Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Sendmessage alt+enter 
:(
    Опции темы
eXa
Дата 27.7.2008, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 1.12.2006

Репутация: нет
Всего: нет



Код

HWND h;
h=FindWindow("Winamp v1.x", NULL);
SendMessage(h,WM_COMMAND,40192,0);
h=FindWindow("avswnd", NULL);
SendMessage(h, WM_SYSKEYDOWN, VK_RETURN, 0);


Нужно открыть окно визуализации и развереуть в полноэкранный режим, открыть получается, но вот с развернуть не очень, нужно отправить хендлу сочетание "alt+enter" 

WM_SYSKEYDOWN - Сообщение WM_SYSKEYDOWN посылается окну с фокусом клавиатуры тогда, когда пользователь удерживает нажатой клавишу ALT

Тоесть получается окно будет считать что ALT зажата или я не правильно понял, видно не правильно понял потому что так не разварачивает, может дело  в чём то другом? Вообщем как осуществить задуманное, подскажите пожалуст
PM MAIL   Вверх
ama_kid
Дата 27.7.2008, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 5
Всего: 95



Есть подозрение, что необходимо выставить 29 бит в параметре lParam:
Цитата
29 - Specifies the context code. The value is 1 if the ALT key is down while the key is pressed; it is 0 if the WM_SYSKEYDOWN message is posted to the active window because no window has the keyboard focus.
т.е. примерно так:
Код
SendMessage(h, WM_SYSKEYDOWN, VK_RETURN, 536870912);



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Gwendolen
Дата 27.7.2008, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 5.4.2005

Репутация: 1
Всего: 1



После активации окна визуализации попробуй:
Код

BYTE key = VK_RETURN;

keybd_event (VK_MENU, MapVirtualKey (VK_MENU, 0),0, 0);
keybd_event (key, MapVirtualKey (key, 0), 0, 0);
keybd_event (key, MapVirtualKey (key, 0), KEYEVENTF_KEYUP, 0);
keybd_event (VK_MENU, MapVirtualKey (VK_MENU, 0),KEYEVENTF_KEYUP, 0);


Если есть проблемы с активацией окна, можно использовать Alt+Tab и проверять какое окно активно.
--------------------
Наносите пользу и причиняйте добро!
PM MAIL   Вверх
eXa
Дата 27.7.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 1.12.2006

Репутация: нет
Всего: нет



Консоль раскрывает, а визуализацию не хочет, хоть и активриую с приорететом
Код

h=FindWindow("avswnd", NULL);
SetForegroundWindow(h);


Вот нашёл индетичный вопрос на VB. Тоже не получается развернуть эмулирая клавиатуру, с двйоном кликом мыши как пишет получилось, поробывал мышью неполучилось
Код

SetCursorPos(960,700);
mouse_event(WM_LBUTTONDBLCLK,0,0,0,0);




Это сообщение отредактировал(а) eXa - 27.7.2008, 21:40
PM MAIL   Вверх
Gwendolen
Дата 27.7.2008, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 5.4.2005

Репутация: 1
Всего: 1



Цитата(eXa @  27.7.2008,  20:40 Найти цитируемый пост)
Консоль раскрывает, а визуализацию не хочет, хоть и активриую с приорететомКодincludeSyntax('cpp');h=FindWindow("avswnd", NULL);SetForegroundWindow(h);


Я уже упоминал, что могут быть проблемы, т.к. у SetForegroundWindow много ограничений

Цитата(Gwendolen @  27.7.2008,  08:08 Найти цитируемый пост)
Если есть проблемы с активацией окна, можно использовать Alt+Tab и проверять какое окно активно.


см. документацию по ней.

Функция GetForegroundWindow() работает почти всегда, перед комбинацией клавиш проверяй активировано ли нужное окно.

P.S. Смотри документацию по Winamp API, там где-то была WM_USER команда (или другая сразу не вспомню) для активация визуализации. Есть заголовочные файлы с нужными константами. Я с этим года 4 назад тоже баловался, у меня есть старая документация по Winamp 2.X - 3.X, если не найдешь другой, могу выложить.

Это сообщение отредактировал(а) Gwendolen - 27.7.2008, 22:12
--------------------
Наносите пользу и причиняйте добро!
PM MAIL   Вверх
eXa
Дата 28.7.2008, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 1.12.2006

Репутация: нет
Всего: нет



Цитата(Gwendolen @ 27.7.2008,  22:12)

P.S. Смотри документацию по Winamp API, там где-то была WM_USER команда (или другая сразу не вспомню) для активация визуализации. Есть заголовочные файлы с нужными константами. Я с этим года 4 назад тоже баловался, у меня есть старая документация по Winamp 2.X - 3.X, если не найдешь другой, могу выложить.

я её использую
Код

SendMessage(h,WM_COMMAND,40192,0);


Gwendolen окно активируется точно, потому что с этой командой оно подсвечивается
Код

FindWindow("avswnd", NULL);
SetForegroundWindow(h);


Вот забыл ссылку дать  там у гостя под ником Alex_b01 есть два подозрения
Цитата

1. Поскольку согласно Platform SDK комбинации "Alt + " являются системными, то передавать в окно их надо с помощью 
WinCtrl( "WM_SYSKEYDOWN", <LParam>, <WParam>, hVS ) 
но что указывать в <LParam>, <WParam> - не совсем понятно 

2. Есть в модуле Keyboard.dll какой-то скрытый глюк, который и проявился в окне визуализатора....


Первое исключаем, а если второе то у меня опускаются руки =\ 
Что то странное с переходом в полный экран как и визуализации так и друих плееров, заметен одинаковый глюк вместо изображения розовые с белом горизантальные полоски.







Это сообщение отредактировал(а) eXa - 28.7.2008, 02:45
PM MAIL   Вверх
Gwendolen
Дата 28.7.2008, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 5.4.2005

Репутация: 1
Всего: 1



Цитата(MSDN)

wParam
  Specifies the virtual-key code of the key being pressed. 

lParam
  Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table. 
0-15
Specifies the repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative.
16-23
Specifies the scan code. The value depends on the OEM.
24
Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
25-28
Reserved; do not use.
29
Specifies the context code. The value is 1 if the ALT key is down while the key is pressed; it is 0 if the WM_SYSKEYDOWN message is posted to the active window because no window has the keyboard focus.
30
Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is 0 if the key is up.
31
Specifies the transition state. The value is always 0 for a WM_SYSKEYDOWN message.


wParam - VK_RETURN;
lParam - 536870913 (0010 0000 0000 0000 0000 0000 0000 0001)
Т.е. 29 и 0 биты.

--------------------
Наносите пользу и причиняйте добро!
PM MAIL   Вверх
eXa
Дата 28.7.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 1.12.2006

Репутация: нет
Всего: нет



Уже было предложенно в теме ama_kid'ом 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.