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