· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Скрытие окна

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Окт 2, 2004 09:32:00

Не могу понять, почему вот этот вот код не работает?

.386
.model flat,stdcall
option casemap:none

include windows.inc

include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib

.data
lpText db "Text",0
lpCaption db "Caption",0
.code
Main PROC

mov cx, 10000
;jcxz prcEND
Cykl:
invoke ShowWindow,cx,SW_HIDE
loop Cykl
;prcEND:
invoke MessageBox,NULL, addr lpText, addr lpCaption, MB_OK
invoke ExitProcess,0
Main ENDP
end Main



    Дата: Окт 2, 2004 09:59:15

    Уважаемый...

    Это нормальная вещь...

    Когда ты используешь ShowWindow используют handle Window и можно иметь один...

    Ты дольжен (на) создавать окно чтобы иметь его "Эндел"...

    invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
    WS_CAPTION or WS_SYSMENU ,Wtx,Wty,Wwd,Wht,NULL,NULL,\
    hInst,NULL

    mov hwnd,eax
    invoke ShowWindow,hwnd,SW_HIDE



    Я увидел,что Ты используешь только register cx take ecx

    Другая вещь:всё время попробуйте использовать hWnd для MessageBox и не NULL

    Думаю, что Ты смогли бы продолжить...

    Желаю хорошых успехов...

    С уважением,
    Gerard ( Жерар )
    -----------------


    Дата: Окт 2, 2004 09:59:51

    А я не понял, что ты сделать пытаешься?
    BOOL ShowWindow(
        HWND hWnd,	        // handle of window
        int nCmdShow        // show state of window
       );

    Поэтому причем там счетчик первым параметром, я не очень понимаю..


    Дата: Окт 2, 2004 10:07:59

    Пытается простым перебором 10000 хендлов все окна скрыть на удачу :) Не стоит этого делать, в стэк помещается cx - 2 байта, а не ecx - 4 байта. Лучше использовать FindWindow.


    Дата: Окт 2, 2004 10:18:09

    Теперь Я начинаю понять, что ты сделать хотел...

    SteelRat тебе дал хорошый решение...

    API FindWindow есть лучше...и легкий больше чтобы использовать...

    Желаю хорошых успехов...

    С уважением,
    Gerard ( Жерар )
    -----------------


    Дата: Окт 2, 2004 10:23:34

    Я хотел чтобы он сам ответил. Никогда не надо давать ответ на вопрос, если хочешь научить вопрошающего чему-то. Необходимо подвести его к ответу, но так чтобы он сам на вопрос ответил. Это дает стимул к изучению и чувство удовлетворения от своей победы.

    Есть такая наука: Психология. :)


    Дата: Окт 2, 2004 10:24:15

    Нет естественно это не кусок моей программы, стало просто интерестно будет ли рабоать или нет, как оказалось не будет, конечноже лудше использовать FindWindow, но это только тогда когда известен либо класс окна, либо заголовок, а как быть если и заголовка не знаешь и не знаешь класса, мне говорили что надо исплользовать EnumWindow, вот только не могу сделать на масм...?


    Дата: Окт 2, 2004 10:40:19

    freeloader
    попробуй поити загрузить этот Файл для API...( на VisualBasic)...

    http://users.chello.be/cr27630/3.7/agsetup.exe

    http://www.allapi.net/vbtutor/tutmain.shtml

    на программу agsetup.exe ты наиду много примеров для API...

    Желаю хорошых успехов...

    С уважением,
    Gerard ( Жерар )
    -----------------


    Дата: Окт 2, 2004 10:52:19

    n0p
    Согласен - психология. Как-то работал в интернет-кафе. Занимался подобными делишками кроме компа ничего небыло и инет по лимиту :( Сам копал, искал, итог - напишу подобный софт "с закрытыми глазами" :)


    Дата: Окт 2, 2004 11:24:54

    Api Guide у меня есть...,
    что же касается VB, то написал все работает, только код не со скрытием, а просто поменять текст:
    Private Sub Command1_Click()
    Dim i As Integer
    For i = 0 To 10000
    Call SetWindowText(i, "EXAMPLE")
    Next i
    End Sub
    Что же касается, асма, то понятно что cx 2 байта, значить ecx 4 байта?, и такая структура тоже не работает... :( не могу понять принципа, почему на VB все хорошо, а на masm все плохо?
    mov eax,0
    .repeat
    add eax,1
    ;invoke ShowWindow,eax,SW_HIDE
    invoke SetWindowText,eax, addr lpString
    .until eax==10000
    invoke ExitProcess,0
    или может, я что то серьезно недопонимаю?


    Дата: Окт 2, 2004 11:53:30

    Я вижу и пойму твоа прога...

    Это не плохо...и ялик...

    На MASM нормально она дольжна работать...

    Всех мои Окон -- закрыты теперь Я дольжен передавать старт на моём ПК...

    Хорошые успехы для Меня...

    С уважением,
    Gerard ( Жерар )
    -----------------


    Дата: Окт 2, 2004 12:08:09

    freeloader
    Ты не парься, замени cx на ebx, edi или esi ;-)


    Дата: Окт 2, 2004 13:49:21

    freeloader

    Api - функции изменяют состояние eax, edx, ecx. Т.е. твоя переменная цикла после вызова API совсем не та, что была до вызова. И цикл будет работать до тех пор, пока случайным образом после ShowWindow в eax окажется 10000. Вероятность этого оч. близка к нулю.

    И ещё момент: откуда уверенность, что в диапазоне 0 - 10000 найдётся хотя бы один валидный хэндл окна, чтобы вызов ShowWindow мог успешно завершиться? Скорее всего ни одно из окон в системе не будет иметь hWnd в этом диапазоне. Вот и получается, что ты скрываешь окна, которых нет.


    Дата: Окт 2, 2004 14:45:11

    freeloader

    Есть же так какие-то функции для работы с цепочкой
    окон. Одна дает хендл Десктопа и другая ссылку
    на следующее окно. Единственно там надо
    аккуратно идти по цепочке, т.к. она динамически
    меняется. Я на VB это гонял, могу поискать,
    но потом на FindWindow переключился.


    Дата: Окт 2, 2004 15:40:23

    Странно..., я почему то думал, что есил АПИ ничего не возвращает - значит в регист ничего не заноситься, а по поводу того что окна не могут быть в диапозоне от 0 до 10000 то это зря, так как я седня провернул тот вбшный код, который находиться чуть выше, который устанавливает заголовки окон, так результат, почти все...

    Всем просто большое, нет просто огромное спасибо, очень приятно знать, что есть те люди которые могут тебе помочь!!!

    . 1 . 2 . >>


    Powered by miniBB 1.6 © 2001-2002
    Время загрузки страницы (сек.): 0.068