|
|
|
Опросить клавиатуру из потока для своего приложения
|
|||
|---|---|---|---|
|
#18+
Иногда приходится запускать скрипты типа PascalScript и в некоторых ситуациях случается, что они зависают. Придумал "умный" способ их останавливать - опрашивать клавиатуру на нажатие Escape. Что-то вроде: Код: pascal 1. 2. 3. 4. 5. 6. Всё работает почти классно, но нажатие Escape останавливает скрипт, даже если приложение, где запущен скрипт, не активное. Как можно из потока безопасно определить, что твоё приложение активно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 15:07 |
|
||
|
Опросить клавиатуру из потока для своего приложения
|
|||
|---|---|---|---|
|
#18+
Dimonka, Как вариант навесить обработчик Application.OnMessage и там проверять WM_KEYDOWN с VK_ESCAPE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 15:10 |
|
||
|
Опросить клавиатуру из потока для своего приложения
|
|||
|---|---|---|---|
|
#18+
alekcvpDimonka, Как вариант навесить обработчик Application.OnMessage и там проверять WM_KEYDOWN с VK_ESCAPE. Вариант не очень. Добавляю условие - скрипт выполняется в главном потоке и может повесить его наглухо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 15:11 |
|
||
|
Опросить клавиатуру из потока для своего приложения
|
|||
|---|---|---|---|
|
#18+
DimonkaalekcvpDimonka, Как вариант навесить обработчик Application.OnMessage и там проверять WM_KEYDOWN с VK_ESCAPE. Вариант не очень. Добавляю условие - скрипт выполняется в главном потоке и может повесить его наглухо. ИМХО, логичнее было бы наоборот - скрипт в потоке, а всё остальное - из главного. Ну тогда: GetForegroundWindow , GetCurrentProcessId и GetWindowThreadProcessId . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 15:16 |
|
||
|
Опросить клавиатуру из потока для своего приложения
|
|||
|---|---|---|---|
|
#18+
Правда я не на 100% уверен, что их можно вызывать не из GUI-потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 15:17 |
|
||
|
Опросить клавиатуру из потока для своего приложения
|
|||
|---|---|---|---|
|
#18+
Если действительно никак нельзя переместить выполнение скрипта в доп поток, то можно сделать доп поток-контролёр. В нём создавать окно (на winapi, т.к. VCL-ную форму вызвать из доп потока - проктология высшего разряда) с кнопкой Стоп. Чтобы не морочиться с конструкцией окна функциями, можно подгружать его из ресурсов диалогов, это намного проще. Так будет более солидно (юзер увидит, что прога его не покинула, уйдя в нирвану) и понятно (откуда ему знать, что нужно нажать Escape). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 16:13 |
|
||
|
Опросить клавиатуру из потока для своего приложения
|
|||
|---|---|---|---|
|
#18+
[quot alekcvp]Dimonkaпропущено...ИМХО, логичнее было бы наоборот - скрипт в потоке, а всё остальное - из главного.Тогда скрипт синхронизировать с GUI замучаешься alekcvpНу тогда: GetForegroundWindow , GetCurrentProcessId и GetWindowThreadProcessId . Вот так хорошо - мне нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 17:26 |
|
||
|
Опросить клавиатуру из потока для своего приложения
|
|||
|---|---|---|---|
|
#18+
DimonkaТогда скрипт синхронизировать с GUI замучаешься А сейчас, я смотрю, всё легко и приятно, а, главное, UI - отзывчивый Там через PostMessage() можно или через Synchronize(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 19:32 |
|
||
|
Опросить клавиатуру из потока для своего приложения
|
|||
|---|---|---|---|
|
#18+
alekcvpDimonkaТогда скрипт синхронизировать с GUI замучаешься А сейчас, я смотрю, всё легко и приятно, а, главное, UI - отзывчивый Там через PostMessage() можно или через Synchronize(). Сейчас всё легко и приятно. И даже UI отзывчивый. Конечно можно и накосячить, но при желании теперь можно в любой момент скрипт остановить, а это уже плюс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 20:26 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39739220&tid=2040070]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 230ms |
| total: | 500ms |

| 0 / 0 |
