Rev 833 | Rev 1100 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1098 | Lrz | 1 | ; 01.06.09 - Компоненты беруться из системной библиотеки |
205 | heavyiron | 2 | ; Автор программы Евтихов Максим (Maxxxx32) |
833 | Lrz | 3 | ; 24.07.2008 |
307 | Lrz | 4 | ; 01.02.07 - обновлён editbox |
5 | ; 31.01.07 - всё теперь рисуется относительно клиентской области |
||
205 | heavyiron | 6 | |
1098 | Lrz | 7 | title equ 'Screenshooter v 0.91' ; Заголовок окна |
8 | include '../../develop/libraries/box_lib/trunk/load_lib.mac' |
||
9 | include '../../develop/libraries/box_lib/trunk/editbox_ex.mac' |
||
10 | ;include '../../develop/examples/editbox/trunk/editbox.inc' |
||
11 | include '../../macros.inc' |
||
12 | include 'scrshoot.mac' |
||
13 | include 'txtbut.inc' |
||
14 | include 'label.inc' |
||
15 | include 'textwork.inc' |
||
205 | heavyiron | 16 | |
1098 | Lrz | 17 | ;include 'macros.inc' ; вставляем макросы |
18 | ; meos_header cmdstr ; вставляем заголовок программы |
||
19 | use32 |
||
20 | org 0x0 |
||
21 | db 'MENUET01' |
||
22 | dd 0x1 |
||
23 | dd start |
||
24 | dd i_end |
||
25 | dd i_end |
||
26 | dd i_end |
||
27 | dd cmdstr |
||
28 | dd cur_dir_path |
||
29 | |||
30 | align 4 |
||
205 | heavyiron | 31 | include 'scrwin.inc' ; вставляем код окна прдпросмотра |
32 | include 'scrsavef.inc'; вставляем процедуру сохранения файла |
||
1098 | Lrz | 33 | |
34 | @use_library |
||
833 | Lrz | 35 | use_txt_button ; | |
36 | use_label ; |-- GUI компоненты и некоторые процедуры |
||
37 | use_text_work ; / |
||
307 | Lrz | 38 | include 'gp.inc' |
39 | include 'srectwin.inc' |
||
310 | heavyiron | 40 | include 'lang.inc' |
205 | heavyiron | 41 | ;--- начало программы --- |
1098 | Lrz | 42 | align 4 |
43 | start: |
||
44 | sys_load_library library_name, cur_dir_path, library_path, system_path, \ |
||
45 | err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i |
||
46 | ;if return code =-1 then exit, else nornary work |
||
47 | ; cmp eax,-1 |
||
48 | inc eax |
||
49 | test eax,eax |
||
50 | jz close |
||
51 | ;;;;;;;;;;;;;;;; init memory 68/11 |
||
52 | mov eax,68 |
||
53 | mov ebx,11 |
||
54 | mcall |
||
55 | test eax,eax |
||
56 | jz close |
||
57 | |||
833 | Lrz | 58 | ;mov al,[gs:1280*4*1024] |
59 | ; устанавливаем ipc буффер |
||
60 | push 60 |
||
61 | pop eax |
||
62 | ;mov ebx,1 |
||
63 | xor ebx,ebx |
||
64 | inc ebx |
||
65 | mov ecx,app_ipc |
||
66 | mov edx,32 |
||
1098 | Lrz | 67 | mcall |
205 | heavyiron | 68 | |
833 | Lrz | 69 | push 66 ; устанавливаем глобальную горячую клавишу |
70 | pop eax |
||
71 | push eax |
||
72 | mov ebx,4 |
||
73 | mov cl,55 ; 55 - PrintScrn |
||
74 | xor edx,edx |
||
1098 | Lrz | 75 | mcall |
205 | heavyiron | 76 | |
833 | Lrz | 77 | mov ebx,app |
78 | call get_slot_n |
||
79 | mov [slot_n],ecx |
||
205 | heavyiron | 80 | |
833 | Lrz | 81 | ; устанавливаем маску событий |
82 | set_events_mask (evm_redraw+evm_key+evm_button+evm_mouse+evm_ipc) |
||
205 | heavyiron | 83 | |
84 | ; сюда прыгаем при каждой перерисовке |
||
85 | red: |
||
833 | Lrz | 86 | get_procinfo app ; получаем информацию о процессе |
87 | get_sys_colors sc ; получаем системные цвета |
||
205 | heavyiron | 88 | |
833 | Lrz | 89 | ; устанавливаем системные цвета у GUI компонентов |
90 | txt_but_set_sys_color buttons,buttons_end,sc ; \ |
||
91 | labels_set_sys_color labels,labels_end,sc ; | |
||
92 | check_boxes_set_sys_color check_boxes,check_boxes_end,sc ; | |
||
93 | edit_boxes_set_sys_color editboxes,editboxes_end,sc ; / |
||
205 | heavyiron | 94 | |
833 | Lrz | 95 | get_screen_prop scr ; получаем информацию об экране |
96 | call draw_window ; перерисовываем окно |
||
205 | heavyiron | 97 | still: |
833 | Lrz | 98 | wait_event red,key,button,mouse,ipc,still ; ждем событий |
205 | heavyiron | 99 | |
100 | key: |
||
833 | Lrz | 101 | get_key |
102 | cmp al,2 |
||
103 | jne @f |
||
104 | cmp ah,55 |
||
105 | jne @f |
||
106 | call shoot |
||
107 | jmp still |
||
205 | heavyiron | 108 | @@: |
1098 | Lrz | 109 | ; key_edit_boxes editboxes,editboxes_end |
110 | push dword edit1 |
||
111 | call [edit_box_key] |
||
112 | |||
113 | push dword edit2 |
||
114 | call [edit_box_key] |
||
115 | |||
116 | push dword edit3 |
||
117 | call [edit_box_key] |
||
118 | |||
119 | push dword edit4 |
||
120 | call [edit_box_key] |
||
121 | |||
833 | Lrz | 122 | jmp still |
205 | heavyiron | 123 | button: |
833 | Lrz | 124 | get_pressed_button |
125 | cmp ah,1 |
||
126 | je p_close |
||
127 | txt_but_ev buttons,buttons_end |
||
128 | jmp still |
||
205 | heavyiron | 129 | mouse: |
833 | Lrz | 130 | get_active_window |
131 | cmp eax,[slot_n] |
||
132 | jne still |
||
1098 | Lrz | 133 | ;---------------------------------- |
134 | push dword edit1 |
||
135 | call [edit_box_mouse] |
||
136 | push dword edit2 |
||
137 | call [edit_box_mouse] |
||
138 | push dword edit3 |
||
139 | call [edit_box_mouse] |
||
140 | push dword edit4 |
||
141 | call [edit_box_mouse] |
||
142 | ;---------------------------------- |
||
143 | push dword ch1 |
||
144 | call [check_box_mouse] |
||
145 | push dword ch2 |
||
146 | call [check_box_mouse] |
||
147 | push dword ch3 |
||
148 | call [check_box_mouse] |
||
149 | push dword ch4 |
||
150 | call [check_box_mouse] |
||
151 | push dword ch5 |
||
152 | call [check_box_mouse] |
||
153 | push dword ch6 |
||
154 | call [check_box_mouse] |
||
155 | push dword use_rect |
||
156 | call [check_box_mouse] |
||
157 | ;----------------------------------- |
||
158 | ; mouse_check_boxes check_boxes,check_boxes_end |
||
159 | ; mouse_edit_boxes editboxes,editboxes_end |
||
833 | Lrz | 160 | jmp still |
205 | heavyiron | 161 | ipc: |
833 | Lrz | 162 | cmp word [app_ipc+8],2 |
163 | jne @f |
||
164 | min_window |
||
165 | jmp .clear_ipc |
||
205 | heavyiron | 166 | @@: |
167 | |||
833 | Lrz | 168 | call draw_number |
169 | call dr_st |
||
205 | heavyiron | 170 | |
171 | .clear_ipc: |
||
833 | Lrz | 172 | cld |
173 | xor eax,eax |
||
1098 | Lrz | 174 | mov ecx,32 |
833 | Lrz | 175 | mov edi,app_ipc |
176 | rep stosb |
||
177 | jmp still |
||
205 | heavyiron | 178 | |
179 | p_close: |
||
833 | Lrz | 180 | btr dword [flags],1 |
307 | Lrz | 181 | |
833 | Lrz | 182 | bt dword [flags],3 |
183 | jnc @f |
||
1098 | Lrz | 184 | mov eax,18 |
833 | Lrz | 185 | mov ebx,eax |
186 | mov ecx,[set_rect_window_pid] |
||
1098 | Lrz | 187 | mcall |
307 | Lrz | 188 | @@: |
189 | |||
205 | heavyiron | 190 | close: |
833 | Lrz | 191 | app_close |
205 | heavyiron | 192 | |
193 | ;-------------------------------------------------------------------- |
||
194 | ;--- прооцедура перерисовки главного окна --------------------------- |
||
195 | ;-------------------------------------------------------------------- |
||
196 | draw_window: |
||
833 | Lrz | 197 | start_draw_window ; начало перерисовки |
198 | ; определяем окно |
||
199 | get_skin_height |
||
200 | mov ebx,100*65536+320 |
||
201 | mov ecx,100*65536+220 |
||
202 | add cx,ax |
||
203 | mov edx,[sc.work] |
||
1098 | Lrz | 204 | or edx,0x34000000;0x33000000 |
833 | Lrz | 205 | xor esi,esi |
206 | ;xor edi,edi |
||
207 | mov edi,grab_text |
||
208 | xor eax,eax |
||
1098 | Lrz | 209 | mcall |
205 | heavyiron | 210 | |
1098 | Lrz | 211 | mov eax,47 ; выводим числа в окно |
833 | Lrz | 212 | mov bx,4 |
213 | shl ebx,16 |
||
214 | movsx ecx,word [scr.width] ; ширина экрана |
||
215 | mov dx,95 |
||
216 | shl edx,16 |
||
217 | mov dx,[label1.top] |
||
218 | push dx |
||
219 | mov esi,[sc.work_text] |
||
1098 | Lrz | 220 | mcall |
833 | Lrz | 221 | movsx ecx,word [scr.height] ; высота экрана |
222 | mov dx,[label2.top] |
||
1098 | Lrz | 223 | mcall |
833 | Lrz | 224 | mov bx,2 |
225 | shl ebx,16 |
||
226 | movsx ecx,word [scr.bitspp] ; бит на пиксель |
||
227 | mov dx,240 |
||
228 | shl edx,16 |
||
229 | pop dx |
||
1098 | Lrz | 230 | mcall |
833 | Lrz | 231 | mov bx,6 |
232 | shl ebx,16 |
||
233 | mov ecx,[scr.bytesps] ; байт на строку |
||
234 | mov dx,[label2.top] |
||
1098 | Lrz | 235 | mcall |
205 | heavyiron | 236 | |
833 | Lrz | 237 | call draw_number ; прорисовываем номер снимка |
238 | call dr_st |
||
205 | heavyiron | 239 | |
833 | Lrz | 240 | draw_labels labels,labels_end ; метки |
1098 | Lrz | 241 | ; draw_edit_boxes editboxes,editboxes_end ; edit_box |
242 | ;------ show check editbox ----------- |
||
243 | push dword edit1 |
||
244 | call [edit_box_draw] |
||
245 | push dword edit2 |
||
246 | call [edit_box_draw] |
||
247 | push dword edit3 |
||
248 | call [edit_box_draw] |
||
249 | push dword edit4 |
||
250 | call [edit_box_draw] |
||
251 | ;------ end check all editbox ------- |
||
252 | |||
833 | Lrz | 253 | draw_txt_buttons buttons,buttons_end ; кнопки |
1098 | Lrz | 254 | ; draw_check_boxes check_boxes,check_boxes_end ; флажки |
255 | ;------ check all checkbox --------- |
||
256 | push dword ch1 |
||
257 | call [check_box_draw] |
||
258 | push dword ch2 |
||
259 | call [check_box_draw] |
||
260 | push dword ch3 |
||
261 | call [check_box_draw] |
||
262 | push dword ch4 |
||
263 | call [check_box_draw] |
||
264 | push dword ch5 |
||
265 | call [check_box_draw] |
||
266 | push dword ch6 |
||
267 | call [check_box_draw] |
||
268 | push dword use_rect |
||
269 | call [check_box_draw] |
||
270 | ;------ end check all checkbox ------ |
||
271 | |||
205 | heavyiron | 272 | stop_draw_window ; конец перерисовки |
273 | ret |
||
274 | |||
275 | shoot: |
||
833 | Lrz | 276 | bt dword [ch4.flags],1 ; включена ли задержка ? |
277 | jnc @f |
||
278 | draw_status delay_now |
||
279 | mov edi,ed_buffer.2 |
||
280 | call zstr_to_int |
||
281 | mov ebx,eax |
||
282 | delay |
||
205 | heavyiron | 283 | @@: |
833 | Lrz | 284 | call get_mem_for_shoot; получаем память для снимка |
205 | heavyiron | 285 | |
286 | |||
833 | Lrz | 287 | bts dword [flags],0 ; нулевой флаг - снимок есть в памяти |
205 | heavyiron | 288 | |
833 | Lrz | 289 | ; делаем снимок |
290 | draw_status shooting |
||
291 | mov esi,scr |
||
292 | mov edi,[scr_buf.ptr] |
||
293 | call copy_screen_to_image |
||
205 | heavyiron | 294 | |
833 | Lrz | 295 | bt dword [use_rect.flags],1 |
296 | jc .use_rect |
||
297 | push dword [scr] |
||
298 | jmp @f |
||
307 | Lrz | 299 | .use_rect: |
833 | Lrz | 300 | push dword [rect.height] |
307 | Lrz | 301 | @@: |
833 | Lrz | 302 | pop dword [scr_buf.size] |
205 | heavyiron | 303 | |
833 | Lrz | 304 | bt dword [ch5.flags],1 ; включено ли автосохранение ? |
305 | jnc @f |
||
306 | call save_file |
||
205 | heavyiron | 307 | @@: |
833 | Lrz | 308 | draw_status shooted_ok |
205 | heavyiron | 309 | |
833 | Lrz | 310 | bt dword [flags],1 |
311 | jnc @f |
||
312 | ret |
||
205 | heavyiron | 313 | @@: |
314 | |||
833 | Lrz | 315 | bt dword [ch2.flags],1 ; показать окно предпросмотра ? |
316 | jnc @f |
||
317 | call show_scr_window |
||
205 | heavyiron | 318 | @@: |
833 | Lrz | 319 | bt word [ch3.flags],1 ; восстановить окно ? |
320 | jnc @f |
||
205 | heavyiron | 321 | |
833 | Lrz | 322 | delay 100 |
323 | mov ecx,[slot_n] |
||
324 | activ_window |
||
205 | heavyiron | 325 | @@: |
326 | ret |
||
327 | |||
307 | Lrz | 328 | ;--- получить память для снимка --- |
205 | heavyiron | 329 | get_mem_for_shoot: |
1098 | Lrz | 330 | ;clean memory |
331 | mov ecx,dword [scr_buf.ptr] |
||
332 | mov ebx,13 |
||
333 | mov eax,68 |
||
334 | mcall |
||
335 | |||
833 | Lrz | 336 | bt dword [use_rect.flags],1 ; фоткать область экрана |
337 | jc .use_area |
||
338 | movzx ecx, word [scr.width] |
||
339 | movzx ebx, word [scr.height] |
||
340 | jmp @f |
||
307 | Lrz | 341 | .use_area: |
833 | Lrz | 342 | call read_rect |
343 | movzx ecx, word [rect.width] |
||
344 | movzx ebx, word [rect.height] |
||
307 | Lrz | 345 | @@: |
833 | Lrz | 346 | imul ecx,ebx |
347 | lea ecx,[ecx*3] |
||
1098 | Lrz | 348 | ; add ecx,i_end |
349 | mov ebx,12 |
||
350 | mov eax,68 |
||
351 | mcall |
||
352 | mov [scr_buf.ptr],eax |
||
353 | add eax,ecx |
||
833 | Lrz | 354 | mov [scr_buf.end_ptr],ecx |
205 | heavyiron | 355 | ret |
356 | |||
357 | ;--- содать окно проедпросмотра --- |
||
358 | show_scr_window: |
||
359 | pusha |
||
833 | Lrz | 360 | bt dword [flags],0 |
361 | jnc @f |
||
362 | mov eax,51 |
||
363 | xor ebx,ebx |
||
364 | inc ebx |
||
1098 | Lrz | 365 | mov ecx,scr_window |
366 | mov edx,i_end_tread-1000 |
||
367 | mcall |
||
205 | heavyiron | 368 | @@: |
369 | popa |
||
370 | ret |
||
371 | |||
372 | ;--- прочитать и нарисовать текущий номер --- |
||
373 | apply_number: |
||
833 | Lrz | 374 | mov edi,ed_buffer.3 |
375 | call zstr_to_int |
||
376 | mov [cur_number],eax |
||
377 | call draw_number |
||
205 | heavyiron | 378 | ret |
379 | |||
380 | ;--- процедура прорисовки текущего номера --- |
||
381 | draw_number: |
||
833 | Lrz | 382 | mov edi,sign_n_input |
383 | call zstr_to_int |
||
384 | mov [sign_n],al |
||
1098 | Lrz | 385 | mov eax,13 |
833 | Lrz | 386 | mov ebx,150*65536+96 |
387 | mov cx,[label9.top] |
||
388 | shl ecx,16 |
||
389 | mov cx,10 |
||
390 | mov edx,[sc.work] |
||
1098 | Lrz | 391 | mcall |
392 | mov eax,47 |
||
833 | Lrz | 393 | movsx bx,byte [sign_n] |
394 | shl ebx,16 |
||
395 | mov ecx,[cur_number] |
||
396 | mov dx,150 |
||
397 | shl edx,16 |
||
398 | mov dx,[label9.top] |
||
399 | mov esi,[sc.work_text] |
||
1098 | Lrz | 400 | mcall |
205 | heavyiron | 401 | ret |
402 | |||
403 | ;--- процедура, запускающая поток автосъемки --- |
||
404 | start_autoshoot: |
||
833 | Lrz | 405 | bts dword [flags],1 |
406 | jc @f |
||
1098 | Lrz | 407 | mov eax,51 |
833 | Lrz | 408 | ;mov ebx,1 |
409 | xor ebx,ebx |
||
410 | inc ebx |
||
411 | mov ecx,autoshoot |
||
1098 | Lrz | 412 | mov edx,i_end_tread-512 |
413 | mcall |
||
205 | heavyiron | 414 | @@: |
415 | ret |
||
416 | |||
417 | ;--- останавливает этот поток --- |
||
418 | stop_autoshoot: |
||
833 | Lrz | 419 | btr dword [flags],1 |
205 | heavyiron | 420 | ret |
421 | |||
422 | ;--- цикл потока автосъемки --- |
||
423 | autoshoot: |
||
833 | Lrz | 424 | mov ecx,[slot_n] |
425 | activ_window |
||
205 | heavyiron | 426 | .next: |
833 | Lrz | 427 | bt dword [flags],1 |
428 | jnc close |
||
1098 | Lrz | 429 | mov eax,60 |
430 | mov ebx,2 |
||
833 | Lrz | 431 | mov ecx,[app.pid] |
432 | mov edx,messages.draw_number |
||
433 | mov esi,2 |
||
1098 | Lrz | 434 | mcall |
833 | Lrz | 435 | call shoot |
436 | jmp autoshoot.next |
||
205 | heavyiron | 437 | |
438 | ;--- процедура прорисовки строки состояния --- |
||
439 | ; (должна вызываться потоком главного окна) |
||
440 | dr_st: |
||
1098 | Lrz | 441 | mov eax,38 ; отрезок |
833 | Lrz | 442 | mov ebx,0*65536+310 |
443 | mov ecx,198*65536+198 |
||
444 | mov edx,[sc.work_graph] |
||
1098 | Lrz | 445 | mcall |
205 | heavyiron | 446 | |
1098 | Lrz | 447 | mov eax,13 ; полоска |
833 | Lrz | 448 | mov bx,310 |
449 | mov ecx,199*65536+15 |
||
450 | mov edx,[sc.work] |
||
1098 | Lrz | 451 | mcall |
205 | heavyiron | 452 | |
833 | Lrz | 453 | mov edi,status |
454 | call draw_label |
||
205 | heavyiron | 455 | ret |
456 | |||
457 | ;--- процедура получения номера слота потока --- |
||
458 | ; вход ebx - буффер 1024 байт |
||
459 | ; выход ecx - номер слота |
||
460 | get_slot_n: |
||
1098 | Lrz | 461 | mov eax,9 |
833 | Lrz | 462 | xor ecx,ecx |
463 | dec ecx |
||
1098 | Lrz | 464 | mcall |
205 | heavyiron | 465 | |
833 | Lrz | 466 | mov edx,[ebx+30] |
467 | xor ecx,ecx |
||
205 | heavyiron | 468 | @@: |
1098 | Lrz | 469 | mov eax,9 |
833 | Lrz | 470 | inc ecx |
1098 | Lrz | 471 | mcall |
833 | Lrz | 472 | cmp [ebx+30],edx |
473 | je @f |
||
474 | jmp @b |
||
205 | heavyiron | 475 | @@: |
476 | ret |
||
477 | |||
307 | Lrz | 478 | ;--- процедура, запускающая поток, делающий 1 снимок --- |
205 | heavyiron | 479 | one_shoot: |
833 | Lrz | 480 | mov ecx,one_shoot_thread |
481 | mov edx,shoot_esp |
||
482 | jmp @f |
||
307 | Lrz | 483 | ;--- процедра, запускающая поток, сохраняющий снимок --- |
205 | heavyiron | 484 | save_shoot: |
833 | Lrz | 485 | mov ecx,save_shoot_thread |
486 | mov edx,shoot_esp |
||
205 | heavyiron | 487 | @@: |
833 | Lrz | 488 | bts dword [flags],2 |
489 | jc .running |
||
490 | bt dword [flags],1 |
||
491 | jc .running |
||
205 | heavyiron | 492 | |
1098 | Lrz | 493 | mov eax,51 |
833 | Lrz | 494 | ;mov ebx,1 |
495 | xor ebx,ebx |
||
496 | inc ebx |
||
1098 | Lrz | 497 | mcall |
205 | heavyiron | 498 | .running: |
499 | ret |
||
500 | |||
307 | Lrz | 501 | ;--- поток, делающий 1 снимок --- |
205 | heavyiron | 502 | one_shoot_thread: |
833 | Lrz | 503 | mov ecx,[slot_n] |
504 | activ_window |
||
505 | bt dword [ch1.flags],1 ; минимизировать окно ? |
||
506 | jnc @f |
||
1098 | Lrz | 507 | mov eax,60 |
508 | mov ebx,2 |
||
833 | Lrz | 509 | mov ecx,[app.pid] |
510 | mov edx,messages.min_window |
||
511 | mov esi,2 |
||
1098 | Lrz | 512 | mcall |
205 | heavyiron | 513 | @@: |
833 | Lrz | 514 | call shoot |
515 | btr dword [flags],2 |
||
516 | jmp close |
||
205 | heavyiron | 517 | |
307 | Lrz | 518 | ;--- процедура, отправляющая главному окну сообщение о перерисовке |
519 | ; строки состояния --- |
||
205 | heavyiron | 520 | send_draw_status: |
1098 | Lrz | 521 | mov eax,60 |
522 | mov ebx,2 |
||
833 | Lrz | 523 | mov ecx,[app.pid] |
524 | mov edx,messages.draw_status |
||
525 | mov esi,2 |
||
1098 | Lrz | 526 | mcall |
205 | heavyiron | 527 | ret |
528 | |||
307 | Lrz | 529 | ;--- поток, сохраняюий файл --- |
205 | heavyiron | 530 | save_shoot_thread: |
833 | Lrz | 531 | mov ecx,[slot_n] |
532 | activ_window |
||
533 | call save_file |
||
534 | btr dword [flags],2 |
||
535 | jmp close |
||
205 | heavyiron | 536 | |
307 | Lrz | 537 | ;--- процедура, запускающая поток окна установки области съемки --- |
538 | show_set_rect_window: |
||
833 | Lrz | 539 | bts dword [flags],3 |
540 | jc @f |
||
1098 | Lrz | 541 | mov eax,51 |
833 | Lrz | 542 | xor ebx,ebx |
543 | inc ebx |
||
544 | mov ecx,set_rect_window |
||
545 | mov edx,set_rect_window_esp |
||
1098 | Lrz | 546 | mcall |
307 | Lrz | 547 | |
833 | Lrz | 548 | mov [set_rect_window_pid],eax |
307 | Lrz | 549 | ret |
550 | |||
551 | @@: |
||
1098 | Lrz | 552 | mov eax,18 |
833 | Lrz | 553 | mov ebx,eax |
554 | mov ecx,[set_rect_window_pid] |
||
1098 | Lrz | 555 | mcall |
833 | Lrz | 556 | btr dword [flags],3 |
307 | Lrz | 557 | ret |
558 | |||
559 | ;--- получение информации об активном окне --- |
||
560 | get_active_window_info: |
||
1098 | Lrz | 561 | mov eax,18 |
562 | mov ebx,7 |
||
563 | mcall |
||
307 | Lrz | 564 | |
833 | Lrz | 565 | mov ecx,eax |
1098 | Lrz | 566 | mov eax,9 |
833 | Lrz | 567 | mov ebx,active_app |
1098 | Lrz | 568 | mcall |
307 | Lrz | 569 | ret |
570 | |||
205 | heavyiron | 571 | ;==================================================================== |
572 | ;=== данные программы =============================================== |
||
573 | ;==================================================================== |
||
574 | messages: |
||
575 | .draw_number dw 0 |
||
576 | .draw_status dw 1 |
||
577 | .min_window dw 2 |
||
578 | |||
579 | |||
580 | grab_text: |
||
833 | Lrz | 581 | db title,0 |
307 | Lrz | 582 | |
205 | heavyiron | 583 | labels: |
307 | Lrz | 584 | label1 label 5,5,0,text.1 ; ширина экрана |
585 | label2 label 5,15,0,text.2 ; высота экрана |
||
586 | label3 label 5,25,0,text.3 ; введите имя файла |
||
587 | label4 label 150,5,0,text.4 ; бит на пиксель |
||
588 | label5 label 150,15,0,text.5 ; байт на строку |
||
589 | label6 label 115,138,0,text.6 ; 100 = 1 сек. |
||
205 | heavyiron | 590 | ;label7 label 10,190,0,text.7 |
591 | ;label8 label 10,225,0,text.8 |
||
307 | Lrz | 592 | label9 label 5,52,0,text.9 ; номер текущего симка |
593 | label10 label 5,185,0,text.10 |
||
594 | status label 5,201,0,no_shoot |
||
205 | heavyiron | 595 | labels_end: |
596 | |||
597 | editboxes: |
||
1098 | Lrz | 598 | edit1 edit_box 300,5,35,cl_white,0xaabbcc,0,0,0,300,ed_buffer.1,ed_focus,10,10 ; путь к файлу |
599 | edit2 edit_box 35,75,134,cl_white,0xaabbcc,0,0,0,9,ed_buffer.2,ed_figure_only,3,3 ; задержка |
||
600 | edit3 edit_box 35,165,164,cl_white,0xaabbcc,0,0,0,9,ed_buffer.3,ed_figure_only ; автонумерация |
||
485 | heavyiron | 601 | edit4 edit_box 16,165,181,cl_white,0xaabbcc,0,0,0,1,sign_n_input,ed_figure_only,1 |
205 | heavyiron | 602 | editboxes_end: |
603 | |||
604 | buttons: |
||
1098 | Lrz | 605 | but1 txt_button 150,5,15,65,2,0,0,but_text.1,one_shoot ; сделать снимок |
833 | Lrz | 606 | but2 txt_button 145,160,15,65,3,0,0,but_text.2,save_shoot ; сохранить снимок |
307 | Lrz | 607 | but3 txt_button 140,115,12,120,4,0,0,but_text.3,show_scr_window ; показать снимок |
833 | Lrz | 608 | but4 txt_button 80,205,15,163,5,0,0,but_text.4,apply_number ; применить номер |
1098 | Lrz | 609 | but5 txt_button 150,5,15,85,6,0,0,but_text.5,start_autoshoot ; начать автосъёмку |
610 | but6 txt_button 145,160,15,85,7,0,0,but_text.6,stop_autoshoot ; остановить автосъёмку |
||
307 | Lrz | 611 | but7 txt_button 40,205,10,150,8,0,0,but_text.7,show_set_rect_window ; задать область |
205 | heavyiron | 612 | buttons_end: |
613 | |||
614 | check_boxes: |
||
1098 | Lrz | 615 | ch1 check_box 5,105,5,11,cl_white,0,0,ch_text.1,(ch_text.2-ch_text.1),ch_flag_en ; свернуть окно |
616 | ch2 check_box 5,120,5,11,cl_white,0,0,ch_text.2,(ch_text.3-ch_text.2),ch_flag_en ; затем сделать активным |
||
617 | ch3 check_box 145,105,5,11,cl_white,0,0,ch_text.3,(ch_text.4-ch_text.3),ch_flag_en ; показать снимок |
||
618 | ch4 check_box 5,135,5,11,cl_white,0,0,ch_text.4,(ch_text.5-ch_text.4),ch_flag_en ; задержка |
||
619 | ch5 check_box 5,150,5,11,cl_white,0,0,ch_text.5,(ch_text.6-ch_text.5) |
||
620 | ch6 check_box 5,165,5,11,cl_white,0,0,ch_text.6,(ch_text.7-ch_text.6),ch_flag_en |
||
621 | use_rect check_box 145,150,5,11,cl_white,0,0,ch_text.7,(ch_text.8-ch_text.7) ; исп. область |
||
205 | heavyiron | 622 | ; автонумерация |
623 | check_boxes_end: |
||
624 | |||
625 | if lang eq ru |
||
626 | text: |
||
307 | Lrz | 627 | .2 db 'Высота экрана:',0 |
628 | .1 db 'Ширина экрана:',0 |
||
629 | .3 db 'Введите полный путь к файлу:',0 |
||
630 | .4 db 'Бит на пиксель:',0 |
||
631 | .5 db 'Байт на строку:',0 |
||
632 | .6 db '100 = 1 секунда',0 |
||
205 | heavyiron | 633 | ;.7: db 'Введите имя файла:',0 |
634 | ;.8: db 'Вместо "*" в имени файла будет вставляться номер.',0 |
||
307 | Lrz | 635 | .9 db 'Номер текущего снимка:',0 |
636 | .10 db 'Количество знаков в номере:',0 |
||
205 | heavyiron | 637 | |
638 | but_text: |
||
307 | Lrz | 639 | .1 db 'Сделать снимок экрана',0 |
640 | .2 db 'Сохранить снимок экрана',0 |
||
641 | .3 db 'Показать снимок сейчас',0 |
||
642 | .4 db 'Применить',0 |
||
643 | .5 db 'Начать автосъемку',0 |
||
644 | .6 db 'Остановить автосъемку',0 |
||
645 | .7 db 'задать',0 |
||
205 | heavyiron | 646 | |
647 | ch_text: |
||
648 | .1 db 'Свернуть окно';,0 |
||
649 | .2 db 'Показать снимок';,0 |
||
650 | .3 db 'затем сделать активным';,0 |
||
307 | Lrz | 651 | .4 db 'Задержка:';,0 |
652 | .5 db 'Автосохранение';,0 |
||
653 | .6 db 'Автонумерация, начиная с';,0 |
||
654 | .7 db 'Область' |
||
655 | .8: |
||
205 | heavyiron | 656 | |
657 | no_shoot db 'Снимок не сделан',0 |
||
658 | shooting db 'Фотографирование...',0 |
||
659 | shooted_ok db 'Снимок сделан',0 |
||
660 | saving db 'Сохранение...',0 |
||
661 | saved_ok db 'Снимок сохранен',0 |
||
662 | delay_now db 'Задержка...',0 |
||
663 | bad_file_name db 'Имя файла введено неверно',0 |
||
664 | disk_filled db 'Диск заполнен',0 |
||
665 | bad_fat_table db 'Таблица FAT разрушена',0 |
||
666 | ac_den db 'Доступ запрещен',0 |
||
667 | device_er db 'Ошибка устройства',0 |
||
668 | not_shooted db 'Сделайте снимок !!!',0 |
||
669 | no_file_name db 'Введите имя файла !!!',0 |
||
307 | Lrz | 670 | invalid_rect db 'Недопустимые размеры области',0 |
310 | heavyiron | 671 | |
672 | else |
||
673 | text: |
||
674 | .2 db 'Screen width:',0 |
||
675 | .1 db 'Screen height:',0 |
||
676 | .3 db 'Enter full path to the file:',0 |
||
677 | .4 db 'Bits per pixel:',0 |
||
678 | .5 db 'Bytes per line:',0 |
||
679 | .6 db '100 = 1 second',0 |
||
680 | ;.7: db 'Enter name of file:',0 |
||
681 | ;.8: db 'Instead of "*" in filename the number will be included.',0 |
||
682 | .9 db 'Current photo number:',0 |
||
683 | .10 db 'Amount of digits in number:',0 |
||
684 | |||
685 | but_text: |
||
686 | .1 db 'Make screen photo',0 |
||
687 | .2 db 'Save screen photo',0 |
||
688 | .3 db 'Show photo now',0 |
||
689 | .4 db 'Apply',0 |
||
690 | .5 db 'Start autoshooting',0 |
||
691 | .6 db 'Stop autoshooting',0 |
||
692 | .7 db 'Set',0 |
||
693 | |||
694 | ch_text: |
||
695 | .1 db 'Minimize window';,0 |
||
696 | .2 db 'Show photo';,0 |
||
697 | .3 db 'then make active';,0 |
||
698 | .4 db 'Delay:';,0 |
||
699 | .5 db 'Autosave';,0 |
||
700 | .6 db 'Start numeration from';,0 |
||
701 | .7 db 'Area' |
||
702 | .8: |
||
703 | |||
704 | no_shoot db 'There is no photo',0 |
||
705 | shooting db 'Photographing...',0 |
||
706 | shooted_ok db 'Photo created',0 |
||
707 | saving db 'Saving...',0 |
||
708 | saved_ok db 'Photo saved',0 |
||
709 | delay_now db 'Delay...',0 |
||
710 | bad_file_name db 'File name is wrong',0 |
||
711 | disk_filled db 'Disk is full',0 |
||
712 | bad_fat_table db 'FAT table destroyed',0 |
||
713 | ac_den db 'Access denied',0 |
||
714 | device_er db 'Device error',0 |
||
1098 | Lrz | 715 | not_shooted db 'Make a photo !!!',0 |
310 | heavyiron | 716 | no_file_name db 'Enter file name !!!',0 |
717 | invalid_rect db 'Wrong area size',0 |
||
718 | |||
205 | heavyiron | 719 | end if |
720 | |||
721 | sign_n_input: |
||
833 | Lrz | 722 | db '2',0 |
205 | heavyiron | 723 | |
724 | app_ipc ipc_buffer 32 |
||
1098 | Lrz | 725 | align 4 |
205 | heavyiron | 726 | |
451 | heavyiron | 727 | mouse_flag: dd 0x0 |
728 | structure_of_potock: |
||
729 | rb 100 |
||
730 | |||
1098 | Lrz | 731 | align 4 |
732 | |||
833 | Lrz | 733 | cur_number dd ? |
205 | heavyiron | 734 | |
833 | Lrz | 735 | sign_n db ? |
205 | heavyiron | 736 | |
833 | Lrz | 737 | slot_n dd ? |
205 | heavyiron | 738 | |
833 | Lrz | 739 | flags dd ? |
205 | heavyiron | 740 | |
741 | scr_buf: |
||
833 | Lrz | 742 | .ptr dd ? |
743 | .end_ptr dd ? |
||
205 | heavyiron | 744 | .size: |
745 | .height dw ? |
||
833 | Lrz | 746 | .width dw ? |
205 | heavyiron | 747 | |
748 | fs_struc: |
||
749 | .funk_n dd ? |
||
833 | Lrz | 750 | dd ? |
751 | dd ? |
||
752 | .bytes_to_write dd ? |
||
753 | .data_ptr dd ?,? |
||
205 | heavyiron | 754 | .fn_ptr dd ? |
755 | |||
756 | sf_buf: |
||
757 | .bmp_header dd ? |
||
758 | .bmp_area dd ? |
||
833 | Lrz | 759 | .end dd ? |
205 | heavyiron | 760 | |
307 | Lrz | 761 | set_rect_window_pid dd ? |
762 | set_rect_window_slot dd ? |
||
763 | |||
1098 | Lrz | 764 | align 4 |
765 | |||
766 | ed_buffer: |
||
767 | .1: db '/sys/*.bmp',0 |
||
768 | rb 287 |
||
769 | .2: db '100',0 |
||
770 | rb 6 |
||
771 | .3: rb 10 |
||
772 | |||
773 | |||
774 | align 4 |
||
307 | Lrz | 775 | rect_input_buffer: |
776 | .left rb 6 |
||
777 | .top rb 6 |
||
833 | Lrz | 778 | .width rb 6 |
307 | Lrz | 779 | .height rb 6 |
780 | |||
205 | heavyiron | 781 | cmdstr rb 257 |
782 | |||
1098 | Lrz | 783 | align 4 |
205 | heavyiron | 784 | |
785 | file_name: |
||
833 | Lrz | 786 | rb 1058 |
205 | heavyiron | 787 | |
788 | scr screen_prop |
||
307 | Lrz | 789 | rect: |
790 | .left dw ? |
||
791 | .top dw ? |
||
792 | .height dw ? |
||
793 | .width dw ? |
||
794 | |||
205 | heavyiron | 795 | sc sys_color_table |
833 | Lrz | 796 | app procinfo ; информация о главном окне |
307 | Lrz | 797 | active_app procinfo ; информация об активном окне |
798 | set_rect_window_procinfo procinfo ; информация об окне области |
||
833 | Lrz | 799 | shoot_esp rb 512 ; стек потока фотканья |
800 | set_rect_window_esp rb 512 ; стек окна области |
||
1098 | Lrz | 801 | ; app_end ; конец программы |
802 | align 4 |
||
803 | cur_dir_path rb 4096 |
||
804 | library_path rb 4096 |
||
805 | i_end_tread: |
||
806 | rb 1024 |
||
807 | align 4 |
||
808 | i_end: |