Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Sendmessage alt+enter


Автор: eXa 27.7.2008, 02:29
Код

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 зажата или я не правильно понял, видно не правильно понял потому что так не разварачивает, может дело  в чём то другом? Вообщем как осуществить задуманное, подскажите пожалуст

Автор: ama_kid 27.7.2008, 07:31
Есть подозрение, что необходимо выставить 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);

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

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 и проверять какое окно активно.

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

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


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

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



Автор: Gwendolen 27.7.2008, 22:12
Цитата(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, если не найдешь другой, могу выложить.

Автор: eXa 28.7.2008, 01:48
Цитата(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);


http://radiator-fm.com.ru/phpBB2/viewtopic.php?t=4841  там у гостя под ником Alex_b01 есть два подозрения
Цитата

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

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


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






Автор: Gwendolen 28.7.2008, 07:14
Цитата(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 биты.

Автор: eXa 28.7.2008, 14:26
Уже было предложенно в теме ama_kid'ом 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)