Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Biolog
0 / 0 / 0
Регистрация: 06.09.2006
Сообщений: 5
1

Размер окна консоли (осталось доделать)

16.06.2009, 17:32. Просмотров 1375. Ответов 0
Метки нет (Все метки)

Прошу переделать эту консольную прогу. Чтобы она выводила не сетевые приложения, а размер окна консоли.
Assembler
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
include def32.inc
include kernel32.inc
include mpr.inc
    .386
    .model  flat
    .const
style           equ      BACKGROUND_White +      FOREGROUND_Red 
greet_message   db  "Example win32 console pкogram",0Dh, 0Ah, 0Dh, 0Ah, 0
error1_message  db  0Dh, 0Ah,'Could not get current user name',0Dh, 0Ah, 0
error2_message  db  0Dh, 0Ah,'Could not enumerate', 0Dh, 0Ah, 0
good_exit_msg   db  0Dh, 0Ah,0Dh, 0Ah, 'Normal termination',0Dh, 0Ah, 0
enum_msg1   db  0Dh, 0Ah, 'Local', 0
enum_msg2   db  " remote - ", 0
    .data
user_name   db  "List of connected resources for user", 0
user_buff   db  64 dup (?)  ; буфер для WNetGetUser
user_buff_l dd  $-user_buff ; размер буфера для WNetGetUser
enum_buf_l  dd  1056        ; длина enum_buf в байтах
enum_entries    dd  1       ; число ресурсов, которые в нём помещаются
    .data?
enum_buf NETRESOURCE <?,?,?,?,?,?,?,?>  ; буфер для WNetEnumResource
        dd  256 dup (?) ; 1024 байта для строк
message_l   dd  ?       ; переменная для WriteConsole
enum_handle dd  ?       ; идентификатор для WNetEnumResource
    .code
_start:
        call AllocConsole
; получить от системы индетификатор буфера вывода STDOUT
    push    STD_OUTPUT_HANDLE
    call    GetStdHandle        ; возвращает идентификатор STDOUT в eax,
    mov ebx,eax         ; а мы будем хранить его в ebx
        push    style
        push    ebx
        call    SetConsoleTextAttribute
; вывести строку greet_message на экран
    mov esi,offset greet_message
    call    output_string
; определить имя пользователя, которому принадлежит наш процесс
    mov esi,offset user_buff
    push    offset user_buff_l  ; адрес переменной с длиной буфера
    push    esi         ; адрес буфера
    push    0           ; 
    call    WNetGetUser
    cmp eax,NO_ERROR            ; если произошла ошибка,
    jne error_exit1     ; выйти,
    mov esi,offset user_name    ; иначе - вывести строку на экран
    call    output_string
; начать перечисление сетевых ресурсов
    push    offset enum_handle  ; идентификатор для WNetEnumResource
    push    0
    push    RESOURCEUSAGE_CONNECTABLE  ; все присоединяемые ресурсы
    push    RESOURCETYPE_ANY    ; ресурсы любого типа
    push    RESOURCEUSAGE_CONTAINER ; все ресурсы сети
    call    WNetOpenEnum        ; начать перечисление,
    cmp eax,NO_ERROR        ; если произошла ошибка,
    jne error_exit2     ; выйти
; цикл перечисления ресурсов
enumeration_loop:
    push    offset enum_buf_l   ; длина буфера в байтах
    push    offset enum_buf         ; адрес буфера
    push    offset enum_entries ; число ресурсов
    push    enum_handle         ; идентификатор от WNetOpenEnum
    call    WNetEnumResource
    cmp eax,ERROR_NO_MORE_ITEMS ; если они закончались,
    je  end_enumeration     ; завершить перечисление,
    cmp eax,NO_ERROR        ; если произошла ошибка,
    jne error_exit2     ; выйти с сообщением об ошибке
; вывод информации о ресурсе на экран
    mov esi,offset enum_msg1    ; первая часть строки
    call    output_string       ; на консоль
    mov esi,dword ptr enum_buf.lpLocalName ; локальное имя устройства
    call    output_string       ; на консоль
    mov esi,offset enum_msg2    ; вторая часть строки
    call    output_string       ; на консоль
    mov esi,dword ptr enum_buf.lpRemoteName ; удалённое имя устройства
    call    output_string       ; на консоль
    jmp short enumeration_loop  ; продолжить перечисление
; конец цикла
end_enumeration:
    push    dword ptr enum_handle
    call    WNetCloseEnum           ; конец перечисления
    mov esi,offset good_exit_msg
exit_program:
    call    output_string       ; вывести строку
        push    10000
        call Sleep
        call FreeConsole
    push    0           ; код выхода        
    call    ExitProcess     ; конец программы
; выходы после ошибок
error_exit1:
    mov esi,offset error1_message
    jmp short exit_program
error_exit2:
    mov esi,offset error2_message
    jmp short exit_program
 
; процедура output_string
; выводит строку на экран
; ввод esi - адрес строки
;      ebx - идентификатор stdout или другого консольного буфера
output_string proc near
; определить длину строки
    cld
    xor eax,eax
    cmp esi, 0
        je ee
    mov edi,esi
    repne   scasb
    dec edi
    sub edi,esi
; послать её на консоль
    push    0
    push    offset message_l    ; сколько байт выведено на консоль
    push    edi         ; сколько байт надо вывести на консоль
    push    esi         ; адрес строки для вывода на консоль
    push    ebx         ; идентификатор буфера вывода
    call    WriteConsole        ; WriteConsole
                    ; (hConsoleOutput, lpvBuffer,
                    ; cchToWrite, lpcchWritten, lpvReserved)
ee: 
        ret
output_string   endp
 
end _start
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2009, 17:32
Ответы с готовыми решениями:

Как зафиксировать размер окна в консоли ?
По иксам вроде зафиксирован, а игрик стягивается =( может какие то стили есть...

Изменить размер экранного буфера и окна консоли
Собственно, вопрос. Как изменить размер и окна консоли, и экранного буфера....

Как задать размер окна консоли (Windows)?
Хочу что-бы при запуске кода в консоли, окно консоли принимало статичный...

Осталось доделать одно условие. Не могу понять
Здравствуйте, задали задачу, но не могу сделать чтоб выводило какой город...

Размер колонки изменился, а видео осталось прежнего размера
Поменял шаблон на сайте на стандартную тему &quot;Twenty Ten&quot;. Раньше ширина колонки...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2009, 17:32

Найти слово в строке, осталось чуть чуть доделать
Выделить в предложении слово минимальной длины, если их несколько то вывести на...

помогите доделать до конца в делфи. Задание:дан текст определить сколько в нем предложений,теперь мне осталось сделать только исключения
var Form1: TForm1; a:string; k,i:integer; implementation {$R...

Как ограничить размер ListBox размером окна (расползается на весь размер)?
Вроде простой вопрос, а что то закопался. Есть Page, в ней Grid, в нем...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru