Переназначить горячие клавиши

Обсуждение программ nnCron и nnCron LITE

Re: Переназначить горячие клавиши

Postby Dark_Jones » Wed, 09 Jun 2010, 20:41

Были похожие темки:
viewtopic.php?f=5&t=10497
viewtopic.php?f=5&t=9813
Решение VoidVolker у меня заработало. И работает по сей день. Но управлять громкостью не получилось - видимо основная клавиатура блокирует (на другом компе работало).
Dark_Jones
 
Posts: 414
Joined: Thu, 09 Nov 2006, 00:43
Location: Russia, S.Peterburg

Re: Переназначить горячие клавиши

Postby Morituruz » Wed, 09 Jun 2010, 21:53

Я так понял, что для ctrl+p надо как-то так, но где-то ошибка:
Code: Select all
#( w_pauzee
\ NoActive
NoLog
SingleInstance
WatchHotKey: "^p"
: WAIT-KEY-UP ( VK -- )
  BEGIN DUP KEY-PRESSED? WHILE
  5 PAUSE
  REPEAT DROP
;
Action:
0x11 WAIT-KEY-UP
0x50 KEY-PRESSED?
IF
   0x50 WAIT-KEY-UP
   MSG: "Yo"
THEN
)#
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

И снова здравствуйте.

Postby Morituruz » Mon, 19 Mar 2012, 14:06

Оказывается, есть такая функция:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646309(v=vs.85).aspx (что-то подобное реализовано в файле watchkey.f.)
Как я понял, она может регистрировать хоткеи на поток, в котором запущена.
Совсем непонятно, что такое WM_HOTKEY.
Можно ли сделать на основе этого такую задачу:
По событию задача регистрирует на себя несколько горячих клавиш. При нажатии хоткея, задача получает его идентификатор, и в соответствии с ним делает какое-либо действие.
При другом событии задача снимает регистрацию хоткеев с себя (или завершается), и они работают в системе как будто ничего и не было.
?
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Переназначить горячие клавиши

Postby VoidVolker » Mon, 19 Mar 2012, 17:46

Ссылки лучше вставлять с использованием тега url, а то форумный движок ссылки со скобками некорректно обрабатывает.
Сабж делается набором задач с нужными хоткеями и обычной логической переменной в качестве правила, которую включаем-выключаем в нужный момент.
Альтернативное решение - опрос нужных хоткеев в цикле через KEY-PRESSED? и далее по условию либо делаем что-то либо нет.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Переназначить горячие клавиши

Postby Morituruz » Mon, 19 Mar 2012, 19:16

VoidVolker wrote:Сабж делается набором задач с нужными хоткеями и обычной логической переменной в качестве правила, которую включаем-выключаем в нужный момент.

Год назад уже обсуждалось, почему так нельзя — хоткеи ничего не делают при выключении.
Собственно так оно и работает сейчас, причём {ADD} не выключается.
Вот пожалуйста:
Code: Select all
<%
VARIABLE WinampHotKeysOn
WinampHotKeysOn ON
: Winamp_send_message { a }
WinampHotKeysOn @
IF
   " Winamp v1.x" WIN-EXIST?
   IF
      0 a 273 WIN-HWND SendMessageA DROP
   ELSE
      4 S" Winamp Hot Keys" DROP S" Winamp v1.x doesn't exist. Open?" DROP 0 MessageBoxA
      6 =
      IF
         CLASSIC-TASK-#-Run_winamp LAUNCH
      THEN
   THEN
ELSE
   a CASE
   40045 OF SEND-KEYS: "7" ENDOF
   40046 OF SEND-KEYS: "8" ENDOF
   40047 OF SEND-KEYS: "9" ENDOF
   40044 OF SEND-KEYS: "4" ENDOF
   40048 OF SEND-KEYS: "5" ENDOF
   40144 OF SEND-KEYS: "1" ENDOF
   40148 OF SEND-KEYS: "2" ENDOF
   40058 OF SEND-KEYS: "6" ENDOF
   40059 OF SEND-KEYS: "3" ENDOF
   40258 OF SEND-KEYS: "0" ENDOF
   40379 OF SEND-KEYS: "\" ENDOF
   40023 OF SEND-KEYS: "+" ENDOF
   DUP OF MSG: "Unknown code" ENDOF
   ENDCASE
THEN
;
%>

#( CLASSIC-TASK-#-winamp_play
NoLog
SingleInstance
MonitorResponseTime
10 TO MonitorResponseTime
WatchHotKey: "{NUMPAD7}"
TO MonitorResponseTime
Action:
40045 Winamp_send_message
)#

#( CLASSIC-TASK-#-winamp_pause
NoLog
SingleInstance
MonitorResponseTime
10 TO MonitorResponseTime
WatchHotKey: "{NUMPAD8}"
TO MonitorResponseTime
Action:
40046 Winamp_send_message
)#

#( CLASSIC-TASK-#-winamp_stop
NoLog
SingleInstance
MonitorResponseTime
10 TO MonitorResponseTime
WatchHotKey: "{NUMPAD9}"
TO MonitorResponseTime
Action:
40047 Winamp_send_message
)#

#( CLASSIC-TASK-#-winamp_previous
NoLog
SingleInstance
MonitorResponseTime
10 TO MonitorResponseTime
WatchHotKey: "{NUMPAD4}"
TO MonitorResponseTime
Action:
40044 Winamp_send_message
)#

#( CLASSIC-TASK-#-winamp_next
NoLog
SingleInstance
MonitorResponseTime
10 TO MonitorResponseTime
WatchHotKey: "{NUMPAD5}"
TO MonitorResponseTime
Action:
40048 Winamp_send_message
)#

#( CLASSIC-TASK-#-winamp_fast_rewind_5s
NoLog
SingleInstance
MonitorResponseTime
10 TO MonitorResponseTime
WatchHotKey: "{NUMPAD1}"
TO MonitorResponseTime
Action:
40144 Winamp_send_message
)#

#( CLASSIC-TASK-#-winamp_fast_forward_5s
NoLog
SingleInstance
MonitorResponseTime
10 TO MonitorResponseTime
WatchHotKey: "{NUMPAD2}"
TO MonitorResponseTime
Action:
40148 Winamp_send_message
)#


#( CLASSIC-TASK-#-winamp_volume_up
NoLog
SingleInstance
MonitorResponseTime
10 TO MonitorResponseTime
WatchHotKey: "{NUMPAD6}"
TO MonitorResponseTime
Action:
40058 Winamp_send_message
)#

#( CLASSIC-TASK-#-winamp_volume_down
NoLog
SingleInstance
MonitorResponseTime
10 TO MonitorResponseTime
WatchHotKey: "{NUMPAD3}"
TO MonitorResponseTime
Action:
40059 Winamp_send_message
)#

#( CLASSIC-TASK-#-winamp_toggle_main_window
NoLog
SingleInstance
MonitorResponseTime
10 TO MonitorResponseTime
WatchHotKey: "{NUMPAD0}
TO MonitorResponseTime
Action:
40258 Winamp_send_message
)#

#( CLASSIC-TASK-#-winamp_toggle_media_library
NoLog
SingleInstance
MonitorResponseTime
10 TO MonitorResponseTime
WatchHotKey: "{DIVIDE}
TO MonitorResponseTime
Action:
40379 Winamp_send_message
)#

#( CLASSIC-TASK-#-winamp_toggle_shuffle
NoLog
SingleInstance
MonitorResponseTime
10 TO MonitorResponseTime
WatchHotKey: "{ADD}
TO MonitorResponseTime
Action:
40023 Winamp_send_message
)#


# Previous track button 40044
# Next track button 40048
# Play button 40045
# Pause/Unpause button 40046
# Stop button 40047
# Fadeout and stop 40147
# Stop after current track 40157
# Fast-forward 5 seconds 40148
# Fast-rewind 5 seconds 40144
# Start of playlist 40154
# Go to end of playlist 40158
# Open file dialog 40029
# Open URL dialog 40155
# Open file info box 40188
# Set time display mode to elapsed 40037
# Set time display mode to remaining 40038
# Toggle preferences screen 40012
# Open visualization options 40190
# Open visualization plug-in options 40191
# Execute current visualization plug-in 40192
# Toggle about box 40041
# Toggle title Autoscrolling 40189
# Toggle always on top 40019
# Toggle Windowshade 40064
# Toggle Playlist Windowshade 40266
# Toggle doublesize mode 40165
# Toggle EQ 40036
# Toggle playlist editor 40040
# Toggle main window visible 40258
# Toggle minibrowser 40298
# Toggle easymove 40186
# Raise volume by 1% 40058
# Lower volume by 1% 40059
# Toggle repeat 40022
# Toggle shuffle 40023
# Open jump to time dialog 40193
# Open jump to file dialog 40194
# Open skin selector 40219
# Configure current visualization plug-in 40221
# Reload the current skin 40291
# Close Winamp 40001
# Moves back 10 tracks in playlist 40197
# Show the edit bookmarks 40320
# Adds current track as a bookmark 40321
# Play audio CD 40323
# Load a preset from EQ 40253
# Save a preset to EQF 40254
# Opens load presets dialog 40172
# Opens auto-load presets dialog 40173
# Load default preset 40174
# Opens save preset dialog 40175
# Opens auto-load save preset 40176
# Opens delete preset dialog 40178
# Opens delete an auto load preset dialog 40180
 
#( CLASSIC-TASK-#-activate_winamp_hotkeys
NoLog
HyperActive
SingleInstance
WatchHotKey: "^{NUMPAD5}"
: winamp_osd ( a u )
y_res @ 10 / DUP OSD-POS
" Verdana" y_res @ 30 / 0x2020F1 OSD-FONT
OSD
500 PAUSE
OSD-CLEAR
;
Action:
WinampHotKeysOn @
IF
   WinampHotKeysOn OFF
   " Hot-keys deactivated" winamp_osd
ELSE
   WinampHotKeysOn ON
   " Hot-keys activated" winamp_osd
THEN

)#

Это же корявое решение, может быть даже более корявое чем
VoidVolker wrote:KEY-PRESSED?


Мне очень хочется сделать уже наконец по-человечески.
Last edited by Morituruz on Mon, 19 Mar 2012, 20:16, edited 1 time in total.
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Переназначить горячие клавиши

Postby VoidVolker » Mon, 19 Mar 2012, 20:15

А чем не устраивает KEY-PRESSED? Оно гарантировано дает результат - нажата кнопка или нет. А стандартные WatchHotKey работают через хуки, которые могут быть перекрыты каким-либо еще приложением.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Previous

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Bing [Bot], Google [Bot] and 3 guests