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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/*
* Copyright (c) 2024. The RigelA open source project team and
* its contributors reserve all rights.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and limitations under the License.
* Modified by igaisin 2025
*/
use ;
use ;
use UI;
use PCWSTR;
pub ;
unsafe
unsafe
/**
Расширение для работы со строками.
*/
pub
//noinspection SpellCheckingInspection
/**
Обрабатывает входящие неотложные сообщения, проверяет очередь сообщений потока на наличие
опубликованных сообщений и, если они есть, извлекает их.
`msg` - структура сообщения, которая получает информацию о сообщениях из очереди потока.
`h_wnd` - дескриптор окна, сообщения которого нужно проверить. Окно должно принадлежать текущему потоку.
Если h_wnd равен NULL, PeekMessage извлекает сообщения для любого окна, принадлежащего текущему потоку,
а также любые сообщения в очереди текущего потока со значением h_wnd равным NULL (см. структуру MSG).
Таким образом, если h_wnd равен NULL, обрабатываются как оконные сообщения, так и сообщения потока.
Если h_wnd равен -1, PeekMessage проверяет только сообщения в очереди текущего потока со значением h_wnd равным NULL,
то есть сообщения потока, опубликованные через PostMessage или PostThreadMessage, когда параметр h_wnd равен NULL.
`msg_filter_min` - значение первого сообщения в диапазоне проверяемых сообщений.
Используйте WM_KEYFIRST (0x0100) для указания первого сообщения клавиатуры
или WM_MOUSEFIRST (0x0200) для указания первого сообщения мыши.
Если и msg_filter_min, и msg_filter_max равны нулю, PeekMessage возвращает все доступные сообщения
(т.е. без фильтрации по диапазону).
`msg_filter_max` - значение последнего сообщения в диапазоне проверяемых сообщений.
Используйте WM_KEYLAST для указания последнего сообщения клавиатуры,
WM_MOUSELAST для указания последнего сообщения мыши.
Если и msg_filter_min, и msg_filter_max равны нулю, PeekMessage возвращает все доступные сообщения
(т.е. без фильтрации по диапазону).
`remove_msg` - определяет, как обрабатывать сообщения. Этот параметр может принимать одно или несколько следующих значений:
- PM_NOREMOVE: после обработки сообщение не удаляется из очереди.
- PM_REMOVE: после обработки сообщение удаляется из очереди.
- PM_NOYIELD: предотвращает освобождение системой любых потоков, ожидающих перехода вызывающего потока в состояние простоя
(см. WaitForInputIdle). Комбинируйте это значение с PM_NOREMOVE или PM_REMOVE.
По умолчанию обрабатываются все типы сообщений. Чтобы указать, что следует обрабатывать только определенные сообщения,
укажите одно или несколько из следующих значений:
- PM_QS_INPUT: обрабатывать сообщения мыши и клавиатуры.
- PM_QS_PAINT: обрабатывать сообщения перерисовки.
- PM_QS_POSTMESSAGE: обрабатывать все опубликованные сообщения, включая таймеры и горячие клавиши.
- PM_QS_SENDMESSAGE: обрабатывать все отправленные сообщения.
*/
pub
/**
Обрабатывает все ожидающие сообщения текущего потока.
*/
pub