70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 395
1

Doevents обратная функция: Прерывание стэка событий Windows пока не выполнится стэк событий application

01.09.2014, 16:11. Показов 1662. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот есть DoEvents он передает управление очередью винде, асуществует ли обратная функция, которая передавала бы управление приложению?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2014, 16:11
Ответы с готовыми решениями:

Копирование из стэка в стэк
Вообще у меня есть 2 стэка забитых рандомными числами stackPtr и stackPtr2 , и мне нужно...

Сгенерировать 30 случайных событий с интенсивностью 10 событий в час с помощью мастера функций
Добрый день! Помогите решить.:( Задача: Сгенерировать 30 случайных событий с интенсивностью 10...

Произведением двух событий А и В называется событие С, состоящее…1) в наступлении хотя бы одного из событий
Произведением двух событий А и В называется событие С, состоящее… 1) в наступлении хотя бы одного...

Отделение работы обработчика событий клавиатуры от событий ввода текста в поля редактирования
Проблема: есть форма с графическими компонентами, в которых редактируется текст. И вот проблема -...

21
Модератор
9902 / 3806 / 879
Регистрация: 22.02.2013
Сообщений: 5,678
Записей в блоге: 78
01.09.2014, 16:43 2
Что? Откуда передавала?
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 395
01.09.2014, 16:52  [ТС] 3
If you call DoEvents in your code, your application can handle the other events. То есть Application прерывается пока не выполнится стэк событий Windows, а меня интересует обратный процесс: прерывание стэка событий Windows пока не выполнится стэк событий application.
0
Модератор
9902 / 3806 / 879
Регистрация: 22.02.2013
Сообщений: 5,678
Записей в блоге: 78
01.09.2014, 16:55 4
CRIDEL, что за
Цитата Сообщение от CRIDEL Посмотреть сообщение
стэк событий application.
Приведи пример того что ты хочешь получить.
DoEvents обрабатывает сообщения в очереди потока, и возвращает количество открытых форм.
0
6807 / 2837 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
01.09.2014, 17:01 5
Цитата Сообщение от CRIDEL Посмотреть сообщение
обратный процесс: прерывание стэка событий Windows пока не выполнится стэк событий application.


Назначить этому приложению самый высокий приоритет
Visual Basic
1
Private Const REALTIME_PRIORITY_CLASS = &H100
Код полный есть, но не думаю, что вы это всерьёз?
Говорят, что не только процессы Винды, а даже мышка может тормозить, пока ваше приложение будет выполняться
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 395
01.09.2014, 17:03  [ТС] 6
У меня есть код, работающий по таймеру, и код работающий в LowLevele хука клавиатуры, они вполне нормально себя чувствуют за исключением клавиши Delete, почему-то хук не дает отработать коду в таймере, хотя другие клавиши работают нормально, вот я и предположил что может можно как-то прерывать хук при Delete?
0
Модератор
9902 / 3806 / 879
Регистрация: 22.02.2013
Сообщений: 5,678
Записей в блоге: 78
01.09.2014, 17:05 7
Что-то ты неправильно делаешь. Код в студию.
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 395
01.09.2014, 17:07  [ТС] 8
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Назначить этому приложению самый высокий приоритет
Не вариант, это как с пушки по воробьям
0
Модератор
9902 / 3806 / 879
Регистрация: 22.02.2013
Сообщений: 5,678
Записей в блоге: 78
01.09.2014, 17:08 9
Цитата Сообщение от CRIDEL Посмотреть сообщение
Не вариант, это как с пушки по воробьям
Это вообще никоим образом не относится к обработке событий. События и так никуда не денутся.
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 395
01.09.2014, 17:08  [ТС] 10
Цитата Сообщение от The trick Посмотреть сообщение
Что-то ты неправильно делаешь. Код в студию.
Код Огромен
Спасибо за совет, то есть предположения мои беспочвенны?
0
Модератор
9902 / 3806 / 879
Регистрация: 22.02.2013
Сообщений: 5,678
Записей в блоге: 78
01.09.2014, 17:11 11
Цитата Сообщение от CRIDEL Посмотреть сообщение
Спасибо за совет, то есть предположения мои беспочвенны?
Я не могу тебе сказать без кода. Вот код - там все работает нормально.
Цитата Сообщение от CRIDEL Посмотреть сообщение
Код Огромен
Процедуру хука и таймера только.
1
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 395
01.09.2014, 17:25  [ТС] 12
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Public Sub TimeRun()
Dim ii As Long 'counter
 
If ansiCNT(1) > 99 Then
ansiCNT(1) = 10
End If
 
ansiCNT(1) = ansiCNT(1) + 1
 
 
If GetAsyncKeyState(46) = -32768 Then 'delete
    ansiCNT(1) = 0
End If
 
If ansiCNT(5) = 1 Then '.........................................................................Delete
 
Delete Procedure
 
end if
 
End Sub
 
Private Function LowLevelkbdProc(ByVal uCode As Long, ByVal wParam As Long, lParam As KBDLLHOOKSTRUCT) As Long
 
'Исключение клавиш
          For i = 1 To 47
        
            If CLng(exept(i)) = CLng(lParam.VkCode) Then
       
                HookCh = wParam
      
            Exit Function
            End If
'Исключение клавиш      
    
     If i = 47 Then
      
       If uCode = HC_ACTION Then
 
          If wParam = WM_KEYDOWN Then
          
HOOK PROCEDURE
    
          Exit Function
         End If
         
        End If
     
      End If
      
      
    
       Next i
  
    LowLevelkbdProc = CallNextHookEx(hKeyHook, uCode, wParam, lParam)
End Function
Ну как-то так.

Добавлено через 2 минуты
Цитата Сообщение от The trick Посмотреть сообщение
Я не могу тебе сказать без кода. Вот код - там все работает нормально.
Я этот код и использую.
0
Модератор
9902 / 3806 / 879
Регистрация: 22.02.2013
Сообщений: 5,678
Записей в блоге: 78
01.09.2014, 17:28 13
Исключать клавиши нужно внутри HC_ACTION, иначе ничего не делать, как в моем примере.
Какая строчка в таймере не работает?
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 395
01.09.2014, 17:34  [ТС] 14
Цитата Сообщение от CRIDEL Посмотреть сообщение
If ansiCNT(5) = 1 Then '.........................................................................Delete
Delete Procedure
end if
- не работает, попробовал цикл исключения вставить в HC_Action - не помогло (

Добавлено через 1 минуту
If ansiCNT(1) = 1 конечно же, их массив просто
0
Модератор
9902 / 3806 / 879
Регистрация: 22.02.2013
Сообщений: 5,678
Записей в блоге: 78
01.09.2014, 17:35 15
Короче нормально распиши что у тебя не получается, что должно по замыслу, я вообще не понимаю что ты понаписал.
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 395
01.09.2014, 17:53  [ТС] 16
Все аналогичные конструкции с другими клавишами работают на ура, а Delete вот не фурычит

Добавлено через 58 секунд
Сейчас.

Добавлено через 15 минут
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Dim ansiCNT(1) As Long' -Счетчик от 1 до 99
 
If ansiCNT(1) > 99 Then' Возвращает Счетчик в значение 10.
ansiCNT(1) = 10
End If
 
ansiCNT(1) = ansiCNT(1) + 1' Крутит счетчик от 0 до 99
 
 
If GetAsyncKeyState(46) = -32768 Then ' Если ловит delete назначает счетчику 0
    ansiCNT(1) = 0
End If
 
If ansiCNT(1) = 1 Then ' Когда счетчик становится равен 1 выполняет nn-ую процудуру (Delete Procedure).
 
Delete Procedure
 
end if
 
End Sub
 
Private Function LowLevelkbdProc(ByVal uCode As Long, ByVal wParam As Long, lParam As KBDLLHOOKSTRUCT) As Long
 
'Исключение клавиш
          For i = 1 To 47' смотрит по коду клавиши выловленной хуком в массиве исключений(exept()) и если находит совпадение выходит из функции
        
            If CLng(exept(i)) = CLng(lParam.VkCode) Then
       
                HookCh = wParam
      
            Exit Function
            End If
'Исключение клавиш      
    
     If i = 47 Then ' последний элемент цикла срабатывает только если исключений не найдено .
      
       If uCode = HC_ACTION Then
 
          If wParam = WM_KEYDOWN Then
          
HOOK PROCEDURE' выполняет nn-ую процудуру (HOOK PROCEDURE)
    
          Exit Function
         End If
         
        End If
     
      End If
      
      
    
       Next i
  
    LowLevelkbdProc = CallNextHookEx(hKeyHook, uCode, wParam, lParam)
End Function

Задача этого кода: При зажатии кнопки Delete должна циклично по таймеру выполняться nn-ая процедура(Delete Procedure).
Проблема: При зажатии кнопки Delete Не происходит цикличного выполнения nn-ой процедуры(Delete Procedure), вместо этого nn-ая процедура(Delete Procedure) выполняется один раз при отжатии клавиши Delete.
0
Модератор
9902 / 3806 / 879
Регистрация: 22.02.2013
Сообщений: 5,678
Записей в блоге: 78
01.09.2014, 18:19 17
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Option Explicit
 
Private Type KBDLLHOOKSTRUCT
    VkCode As Long
    ScanCode As Long
    flags As Long
    time As Long
    dwExtraInfo As Long
End Type
 
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Integer, lParam As Any) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
 
Private Const WH_KEYBOARD_LL = 13
Private Const HC_ACTION = 0
Private Const LLKHF_INJECTED = &H10
Private Const WM_KEYDOWN As Long = &H100
Private Const WM_KEYUP As Long = &H101
 
Dim hKeyHook    As Long
Dim idTimer     As Long
Dim counter     As Long
 
Public Sub Hook()
    hKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelkbdProc, App.hInstance, 0)
    If hKeyHook = 0 Then MsgBox ("Keyboard hook error")
End Sub
Public Sub UnHook()
    If hKeyHook Then UnhookWindowsHookEx (hKeyHook): hKeyHook = 0
End Sub
' Ïðîöåäóðà ïåðåõâàòà ñîîáùåíèé êëàâèàòóðû
Private Function LowLevelkbdProc(ByVal uCode As Long, ByVal wParam As Long, lParam As KBDLLHOOKSTRUCT) As Long
    If uCode = HC_ACTION Then
        If lParam.VkCode = vbKeyDelete Then
            If idTimer = 0 Then
                Select Case wParam
                Case WM_KEYDOWN
                    idTimer = SetTimer(0, 0, 32, AddressOf TimerProc): counter = 20
                End Select
            Else
                Select Case wParam
                Case WM_KEYUP
                    KillTimer 0, idTimer
                    idTimer = 0
                End Select
            End If
        End If
    End If
    LowLevelkbdProc = CallNextHookEx(hKeyHook, uCode, wParam, lParam)
End Function
 
Private Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
    counter = counter - 1
    If counter = 0 Then
        KillTimer 0, idTimer
    Else
        Debug.Print "Delete Procedure" & Rnd
    End If
End Sub
Накидал - все прекрасно выполняется.
1
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 395
01.09.2014, 19:10  [ТС] 18
У меня таймер идет параллельным процессом, я не могу его прерывать и запускать по хуку, он должен непрерывно крутиться, в этом-то и проблема. Попытаюсь отдельно вкрячить еще один
0
Модератор
9902 / 3806 / 879
Регистрация: 22.02.2013
Сообщений: 5,678
Записей в блоге: 78
01.09.2014, 19:11 19
CRIDEL, все работает, клавиша никак не влияет на таймеры, скорее всего у тебя что-то не то с алгоритмом или ты неправильно разработал код.
0
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 395
01.09.2014, 19:17  [ТС] 20
Цитата Сообщение от The trick Посмотреть сообщение
или ты неправильно разработал код.
Тогда бы другие клавиши не работали. Спасибо за содействие в любом случае, разберусь - отпишусь.

Добавлено через 2 минуты
Цитата Сообщение от The trick Посмотреть сообщение
все работает
Твой код рабочий, только в моем таймер идет отдельно и не прерывается, а у тебя запускается при нажатии.
0
01.09.2014, 19:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.09.2014, 19:17
Помогаю со студенческими работами здесь

Суммой двух событий А и В называется событие С, состоящее…1) в наступлении хотя бы одного из событий А и В2
Суммой двух событий А и В называется событие С, состоящее… 1) в наступлении хотя бы одного из...

Нужен батник для создания отчета событий и их свойств из журнала событий на локальном компьютере
Пакетный файл, предназначенный для создания отчета событий и их свойств из журнала событий на...

Автоматизация создания событий + время выполнения событий
Подскажите, имею 9 button как автоматически с помощью цикла прописать выполнения события для всех...

По вероятностям событий A и B найти вероятности других событий
Добрый день!Подскажите пожалуйста, что я делаю не так... Задача: По вероятностям событий P( A) и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru