View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001793 | Wishes | Macro | public | 2011-06-05 12:32 | 2018-11-15 10:39 |
Reporter | Maximus | Assigned To | vskirdin | ||
Priority | normal | Severity | feature | Reproducibility | have not tried |
Status | closed | Resolution | duplicate | ||
Product Version | 3.0 | ||||
Summary | 0001793: Разрешить прерывание макроса по CtrlBreak во время "визуальных" функций | ||||
Description | Если макрос ничего не спрашивает у юзера - все хорошо, если он завис - можно прервать по CtrlBreak. Но если на экране в цикле отображается MsgBox (например) - макрос уже фиг прервешь. | ||||
Tags | No tags attached. | ||||
Build | |||||
|
0000924 |
|
Как себя Menu.Show ведет? А Prompt? А Waitkey? |
|
нашел. build 2064 |
|
macro:post $while(1) menu.show("AAA\r\nBBB") $end все плохо, CtrlBreak не прерывает. Нажатие крестика в консоли - приводит к зависанию фара: меню уже не отрисовывается, видны панели, зеленая 'P' в левом верхнем углу, фар ни на что не реагирует (кроме как на CtrlBreak, нажатие CtrlBreak приводит к закрытию фара) macro:post $while(1) prompt("test") $end почти все то же что и menu.show, но после нажатия крестика в консоли на экране мельтешит окно ввода (возможно меню тоже мельтешит, но его не видно) Нажатие крестика и CtrlBreak приводит к закрытию фара macro:post $while(1) waitkey() $end Зеленая 'P' в левом верхнем углу не горит. На крестик - не реагирует, CtrlBreak после крестика - игнорируется. Повторное нажатие на крестик через некоторое время закрывает фар И только macro:post $while(1) waitkey(1) $end можно прервать по CtrlBreak |
|
это в 2064? |
|
не, когда проверял - 2064 еще не было в 2064 вроде прерывается нормально |
|
закрываем? |
|
Фигня какая-то. Почему CalcKeyCode думает, что VK_CANCEL может быть нажат без Ctrl? Из-за этого прерывание или вообще не срабатывает (в conemu) или срабатывает не сразу (в отладчике видно, что Menu.Show дергается еще раз, и только потом прерывается). |
|
CtrlBreak.diff (475 bytes)
Index: keyboard.cpp =================================================================== --- keyboard.cpp (revision 6321) +++ keyboard.cpp (working copy) @@ -2917,6 +2917,10 @@ return KEY_PRNTSCRN; } } + else if (KeyCode == VK_CANCEL && IntKeyState.CtrlPressed && !IntKeyState.AltPressed && !IntKeyState.ShiftPressed) + { + return(KEY_BREAK); + } /* ------------------------------------------------------------- */ if (IntKeyState.CtrlPressed) |
|
см. WriteInput (и вызов в KeyMacro::SendDropProcess()) походу надо 4 вызова делать... VK_CONTROL down VK_CANCEL down VK_CANCEL up VK_CONTROL up и соответственно для WriteInput добавлять третий параметр - флаги... не? |
|
не знаю... мне вообще кажется стремным, что признак необходимости прерывания макроса записывается в консольный буфер ввода... Не лучше ли при получении CtrlBreak взводить флаг и ориентироваться на него? |
|
> Не лучше ли при получении CtrlBreak взводить флаг и ориентироваться на него? возможно и так... ...надо подумать |
|
http://skirda-file.googlecode.com/files/m1793.2.7z |
|
ага, все прерывается нормально. в том числе и в conemu |
|
build 2066 |
|
После очередного патча прерывания макроса поломалась отрисовка при mmode(1,0) [HKEY_CURRENT_USER\Software\Far Manager\KeyMacros\Shell\MsRClick] "Sequence"="mmode(1,0) MsLClick mmode(1,1) F11 e Enter 1" "Description"="EMenu - показать графическое меню по RClick, hotkey для emenu - 'e'" "DisableOutput"=dword:00000001 После MsLClick панели должны были отрисоваться Раньше отрисовка проходила в PeekInputRecord, вызываемом из KeyMacro::GetKey() // Mantis#0000581: Добавить возможность прервать выполнение макроса { INPUT_RECORD rec; if (PeekInputRecord(&rec) && rec.EventType==KEY_EVENT && rec.Event.KeyEvent.wVirtualKeyCode == VK_CANCEL) Теперь PeekInputRecord там больше нет // Mantis#0000581: Добавить возможность прервать выполнение макроса { INPUT_RECORD rec; //if (PeekInputRecord(&rec) && rec.EventType==KEY_EVENT && rec.Event.KeyEvent.wVirtualKeyCode == VK_CANCEL) if (StopMacro) { |
|
Index: macro.cpp =================================================================== --- macro.cpp (revision 6465) +++ macro.cpp (working copy) @@ -4695,8 +4695,7 @@ { INPUT_RECORD rec; - //if (PeekInputRecord(&rec) && rec.EventType==KEY_EVENT && rec.Event.KeyEvent.wVirtualKeyCode == VK_CANCEL) - if (StopMacro) + if (StopMacro || (PeekInputRecord(&rec) && rec.EventType==KEY_EVENT && rec.Event.KeyEvent.wVirtualKeyCode == VK_CANCEL)) { GetInputRecord(&rec,true); // удаляем из очереди эту "клавишу"... Work.KeyProcess=0; |
|
build 2115 |
|
Продолжение банкета. делаем макрос на F3 mmode(1,0) F3 выбираем толстую папку, например "C:\Program Files", жмем F3 в углу горит индикатор - зеленый P, бодро отсчитываются гигабайты, приходится ждать, пока до конца не досчитает - прервать нельзя исключение - если появляется Elevation, тогда макрос завершается. Аналогично с редактором. Если вдруг промахнулся, и нажал F4 (на котором подобный макрос), то приходится ждать пока гигабайтный файл загрузится в редактор |
|
Под "прервать" в данном случая понимаем, что нет реакции ни на Esc ни на CtrlBreak |
|
Тема на форуме: http://forum.farmanager.com/viewtopic.php?f=15&t=6428 |
|
С CtrlBreak сейчас более глобальная проблема: 0002288 Но и проблема с F3 никуда не делась: lm:post mmode(1,0) Keys'F3' По Esc не прервать Update: 0002692 |
|
Предлагаю закрыть, в пользу 0002288 и 0002692. |
Date Modified | Username | Field | Change |
---|---|---|---|
2011-06-05 12:32 | Maximus | New Issue | |
2011-06-05 12:48 | JohnDoe | Note Added: 0007143 | |
2011-06-06 13:52 | vskirdin | Note Added: 0007156 | |
2011-06-06 13:52 | vskirdin | Assigned To | => vskirdin |
2011-06-06 13:52 | vskirdin | Status | new => assigned |
2011-06-06 14:13 | vskirdin | Note Added: 0007157 | |
2011-06-06 14:13 | vskirdin | Status | assigned => feedback |
2011-06-06 14:28 | Maximus | Note Added: 0007158 | |
2011-06-06 14:28 | Maximus | Status | feedback => assigned |
2011-06-06 16:52 | vskirdin | Note Added: 0007159 | |
2011-06-06 19:26 | Maximus | Note Added: 0007160 | |
2011-06-07 06:16 | vskirdin | Note Added: 0007161 | |
2011-06-07 06:16 | vskirdin | Status | assigned => feedback |
2011-06-08 10:37 | Maximus | Note Added: 0007170 | |
2011-06-08 10:37 | Maximus | Status | feedback => assigned |
2011-06-08 10:37 | Maximus | File Added: CtrlBreak.diff | |
2011-06-08 13:53 | vskirdin | Note Added: 0007173 | |
2011-06-08 14:47 | Maximus | Note Added: 0007175 | |
2011-06-08 15:17 | vskirdin | Note Added: 0007177 | |
2011-06-10 07:22 | vskirdin | Note Added: 0007179 | |
2011-06-10 08:55 | Maximus | Note Added: 0007185 | |
2011-06-10 09:35 | vskirdin | Note Added: 0007187 | |
2011-06-10 09:35 | vskirdin | Status | assigned => feedback |
2011-07-12 11:20 | Maximus | Note Added: 0007269 | |
2011-07-12 11:20 | Maximus | Status | feedback => assigned |
2011-07-12 11:22 | Maximus | Note Edited: 0007269 | |
2011-07-12 22:12 | Maximus | Note Added: 0007281 | |
2011-07-24 06:24 | vskirdin | Note Added: 0007302 | |
2011-07-24 06:24 | vskirdin | Status | assigned => feedback |
2011-08-23 14:05 | Maximus | Note Added: 0007507 | |
2011-08-23 14:05 | Maximus | Status | feedback => assigned |
2011-08-23 14:06 | Maximus | Note Added: 0007508 | |
2011-08-23 15:04 | JohnDoe | Note Added: 0007512 | |
2013-02-03 00:33 | alexy | Severity | minor => feature |
2013-04-10 16:55 | JohnDoe | Note Added: 0010724 | |
2015-01-24 19:15 | JohnDoe | Note Edited: 0010724 | |
2015-01-24 19:16 | JohnDoe | Note Added: 0013434 | |
2018-11-15 10:35 | JohnDoe | Relationship added | duplicate of 0000924 |
2018-11-15 10:36 | JohnDoe | Relationship deleted | 0000924 |
2018-11-15 10:36 | JohnDoe | Relationship added | has duplicate 0000924 |
2018-11-15 10:38 | JohnDoe | Relationship added | related to 0002692 |
2018-11-15 10:39 | JohnDoe | Status | assigned => closed |
2018-11-15 10:39 | JohnDoe | Resolution | open => duplicate |