Часики [ASM]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by yeti, 17 Aug 2007.

  1. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    Установить таймер (например, на 1 секунду) и по сообщению WM_TIMER получать время с помощью GetLocalTime и отображать его.
     
  2. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Имхо это не универсально) хотя хз. вообщемто без разницы.. просто не долюблюваю эти таймеры почемуто хз)
     
    1 person likes this.
  3. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    > Shnurovka, KEZ, inv, Alexsize - выяснения отношений в ПМ. В следующий раз модераторы, которые оффтопят, получат минус - в основном это касается Alexsize.

    о, грит типа понтанулся как следует
    так чего ты сегодня мне говорил около супермаркета, обдолбавшись растворителем? : D
     
    2 people like this.
  4. Zulf

    Zulf Elder - Старейшина

    Joined:
    12 Feb 2007
    Messages:
    128
    Likes Received:
    42
    Reputations:
    4
    Грит из ГНК, ему можно лишний раз ширнуться :)
     
  5. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Ну понтанулся, кез, молодец, молодец )) Типа видел крутого кодера под растворителем :d
    А говорил я тебе про Pe формат :p
    Ладно, заканчиваем оффтопить)
     
    3 people like this.
  6. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    Почему неуниверсально? За что не долюбливаешь?
    Смотрим здесь часики...
     
    2 people like this.
  7. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,189
    Reputations:
    327
    напиши с использованием системного таймера в плоть до учета микросекунд, добавь будильник при помощи системного динамика, длина волны и период выщитываются в 2 цикла
     
    1 person likes this.
  8. yeti

    yeti Elder - Старейшина

    Joined:
    27 Dec 2006
    Messages:
    179
    Likes Received:
    234
    Reputations:
    346
    Жжошь... ыы.. мне б такой сначала написать)) уже начала кстати

    in process.....................
     
    5 people like this.
  9. yeti

    yeti Elder - Старейшина

    Joined:
    27 Dec 2006
    Messages:
    179
    Likes Received:
    234
    Reputations:
    346
    ипусь, ипусь..

    Мля... я уже сколько долблюсь.. наверное мало знаю..

    Вот код выкладываю. сильно не ржать, он очень и очень кривой... Посмотрите. Кому не лень может кто подскажет и доработает сам.. Если уж у меня не выйдет...

    Code:
    .TITLE 4ase (.ASM)
    .386
    .model flat, stdcall
    
    includelib c:\masm32\lib\user32.lib
    includelib c:\masm32\lib\kernel32.lib
    includelib c:\masm32\lib\gdi32.lib
    include c:\masm32\include\windows.inc
    include c:\masm32\include\user32.inc
    include c:\masm32\include\kernel32.inc
    
    WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
    
    .data
    
    
    ClassName db "SimpleWinClass",0 							; Имя нашего класса окна
    AppName db "Our First Window",0 							; Имя нашего окна
    hInstance HINSTANCE ?										;получае хэндл программы
    CommandLine LPSTR ?
    SetWindowPos PROTO	
    GetActiveWindow PROTO
    SetWindowPos PROTO
    
    .code
    	
    start:	
    	
    	mov eax, 0												;забываю помещать в регистр исходные значения. мля.. =\\
    	
    GetModuleHandle PROTO
    GetLocalTime PROTO
     		
    			
    hmodule==hinstance mov hInstance,eax						;берем хэндл программы
    invoke GetCommandLine										;берем командную строку. ноги в руки. и вперед.. 		
    mov CommandLine,eax											;тут все ясно.. 
    invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT	;вызов основных ф-ций
    
    	invoke ExitProcess, eax									;корректное завершение программы
    	
    
    WinMain PROC												;мы взяли отсюда возвращаемое значение для eax
    
    Inst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    
    LOCAL wc:WNDCLASSEX											;создаем в стеке локальные переменные
    LOCAL msg:MSG
    LOCAL hwnd:HWND
    
    mov   wc.cbSize,SIZEOF WNDCLASSEX
    
    mov    wc.style, CS_HREDRAW or CS_VREDRAW					;заполнение структуры
    mov    wc.lpfnWndProc, OFFSET WndProc						;вообще это станжартная процедура. поэтому потом запихну в библиотеку
    mov    wc.cbClsExtra,NULL
    mov    wc.cbWndExtra,NULL
    
    push   hInstance											
    pop    wc.hInstance											
    mov    wc.hbrBackground,COLOR_WINDOW+1
    mov    wc.lpszMenuName,NULL
    
    mov    wc.lpszClassName,OFFSET ClassName
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov    wc.hIcon,eax
    mov    wc.hIconSm,eax
    
    invoke LoadCursor,NULL,IDC_ARROW
    mov    wc.hCursor,eax
    invoke RegisterClassEx, addr wc
    
    	invoke GetModuleHandle, 0
    	
    	
    invoke CreateWindowEx, 0									;регистрация классов окна.. 
    				hWnd dd ?									;хэндл окна
    				szWindowName db 'Часики',0					;имя окна
                    ADDR ClassName,\							
                    ADDR AppName,\							
                    WS_OVERLAPPEDWINDOW,\
                    CW_USEDEFAULT,\
                    CW_USEDEFAULT,\
                    CW_USEDEFAULT,\
                    CW_USEDEFAULT,\
                    0,\
                    0,\
                    hInst,\
                    0
        mov   hwnd,eax
    	
    msg_loop:
    	invoke GetMessage, offset msg, 0, 0, 0
    	cmp eax, 0
    	jz loop_end
    	invoke DispatchMessage, offset msg
    	jmp msg_loop	
    	
    loop_end:
    	 
    	
      invoke ShowWindow, hwnd,CmdShow 						; отобpажение окна на десктопе
      invoke UpdateWindow, hwnd 							; обновить клиентскую область
    
      
    
    
    ;----------------------------------------------------------------------------------------------	
    	.elseif uMsg==WM_NCHITTEST      
    	invoke DefWindowProc,hWnd,uMsg,wParam,lParam  
            .if eax==HTCLIENT    
    mov eax,HTCAPTION
            .endif 
    	ret 
    ;перемещение окна.. надо обрисовать само окно
    ;----------------------------------------------------------------------------------------------		
    
    INVOKE GetLocalTime 
    
    .data
    SYSTEMTIME STRUCT
    	wYear WORD ?
    	wMonth WORD ?
    	wDayOfWeek WORD ?
    	wDay WORD ?
    	wHour WORD ?
    	wMinute WORD ?
    	wSecond WORD ?
    SYSTEMTIME ENDS	
    time SYSTEMTIME <0,0,0,0,0,0,0>
    
    	end start 
    Вот.. стоило пытаться блин.. =\
    ПС: синтаксис масма
     
    1 person likes this.
  10. GoreMaster

    GoreMaster Elder - Старейшина

    Joined:
    28 May 2007
    Messages:
    119
    Likes Received:
    32
    Reputations:
    4
    Для переносимсоти пишут так includelib \masm32\lib\gdi32.lib
    SYSTEMTIME
    Ксати эта структура уже определена хутчем,так что заново описывать думаю не стоит в своих прогах...
    И еще я чет не понял,че делает .data в сегменте кода? О_о
    Качни себе Chrome IDE на васме есть и создай window program (assembler) и посмотри как оформлен проект ;)
    Для данных, значения которых не определы изначально,а определяются воремя исполнения программы используй сегмент .data?
    Code:
    .data?
    hInstance HINSTANCE ?								
    CommandLine LPSTR ?
    
    Вот так будет
    GetLocalTime PROTO
    Эт зачем
    Функция стандартная для винда и прототип не нужен...
    Code:
    invoke RegisterClassEx, addr wc
    invoke GetModuleHandle, 0
    GetModuleHandle здесь лишниё
    http://wasm.ru/article.php?article=1001003
    почитай...урок как раз на твою тему ;)
     
    #30 GoreMaster, 24 Aug 2007
    Last edited: 25 Aug 2007
    2 people like this.
  11. yeti

    yeti Elder - Старейшина

    Joined:
    27 Dec 2006
    Messages:
    179
    Likes Received:
    234
    Reputations:
    346
    GoreMaster, о, спасибо. ЧЕт я невнимательная какая-то...

    Так... окно дописано полностью.. осталось часы отобразить там... не думала, что это будет так для меня сложно..
     
    2 people like this.
  12. Ro$k-0

    Ro$k-0 Member

    Joined:
    29 Mar 2007
    Messages:
    16
    Likes Received:
    7
    Reputations:
    0
    А ты создай в окне editbox и там часы отображай
    и для смены времени используй тамеры,как сказал NetMan.

    Just 4 help:
    вот пример программы:
    _http://rapidshare.com/files/51191471/clock.exe
    и её исходник:
    _http://rapidshare.com/files/51191428/clock.asm
     
    2 people like this.
  13. yeti

    yeti Elder - Старейшина

    Joined:
    27 Dec 2006
    Messages:
    179
    Likes Received:
    234
    Reputations:
    346
    Ro$k-0, НЕЕТ!!! хыы... я столько писала эту муть.. и уже осталось часики отобразить, что идея с эдитбоксом мне кажется не очень хорошей.. )))
     
  14. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Пиши аналоговые часы со сменой скинов, а-то ежесекундный вывод текста на пустое окно ИМХО слишком просто( сплошные АПИ и никакого Ассемблерного кода ;) ), заодно математический сопроцессор освоишь)))

    Система не сложная, всего 5 слоёв и 3 буфера.
    Каждый час выводишь на буфер1 подложку и часовою стрелку под определённым углом(с использованием GDI+ или своим алгоритмом), каждую минуту выводишь на буфер2 буфер1 и минутную стрелку под соответствующим углом, а каждую секунду выводишь на буфер3 буфер2, секундную стрелку и верхнее стекло и выводишь его на окно через UpdateLayeredWindow
    Я как-то делал такое, если использовать картинки PNG( с Alpha-каналом ) получается очень даже неплохо правда GDI+ отедает 10% процессорного времени, а сторонние алгоритмы вставлять не хотелось, как вариант, для стрелок можно использовать векторную графику, тогда будет работать намного быстрее.

    Просто в твоём варианте, разницы почти нет на каком языке пишешь, всё-равно просто передаёшь аргументы из одной АПИ в другую :/
     
    #34 hidden, 25 Aug 2007
    Last edited: 25 Aug 2007
  15. Ro$k-0

    Ro$k-0 Member

    Joined:
    29 Mar 2007
    Messages:
    16
    Likes Received:
    7
    Reputations:
    0
    ну всё,C кодеры отпадают:)
    я просто написал прогу на си и перевел на асм
    (сплошные АПИ и никакого Ассемблерного кода)-ты прав
    2hidden,ты предложил что-то по типу:
    http://www.wasm.ru/src/3/Aclock.zip
     
  16. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Типа этого, только не лайнами рисовать, а картинки поворачивать + с Alpha-каналом.
     
  17. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Да вы ребят извращенцы=\
     
  18. yeti

    yeti Elder - Старейшина

    Joined:
    27 Dec 2006
    Messages:
    179
    Likes Received:
    234
    Reputations:
    346
    мля... я с теми трахаться даже особо не стала.. у меня почему-то компилятор даже инклюдить ничего не хочет... =\ что очень и очень странно.. Мде.. просто пишет что-то типа:
    Code:
    \masm32\include\windows.inc(115) : error A2004: symbol type conflict : bool
    \masm32\include\windows.inc(8052) : error A2179: structure improperly initialized
    \masm32\include\windows.inc(8052) : error A2008: syntax error : in structure
    \masm32\include\windows.inc(8064) : error A2179: structure improperly initialized
    \masm32\include\windows.inc(8064) : error A2008: syntax error : in structure
    \masm32\include\windows.inc(8082) : error A2005: symbol redefinition : hinst
    \masm32\include\windows.inc(8772) : error A2179: structure improperly initialized
    \masm32\include\windows.inc(8772) : error A2008: syntax error : in structure
    \masm32\include\windows.inc(8779) : error A2179: structure improperly initialized
    \masm32\include\windows.inc(8779) : error A2008: syntax error : in structure
    \masm32\include\windows.inc(8784) : error A2179: structure improperly initialized
    \masm32\include\windows.inc(8784) : error A2008: syntax error : in structure
    \masm32\include\windows.inc(8790) : error A2179: structure improperly initialized
    \masm32\include\windows.inc(8790) : error A2008: syntax error : in structure
    \masm32\include\windows.inc(8797) : error A2179: structure improperly initialized
    \masm32\include\windows.inc(8797) : error A2008: syntax error : in structure
    \masm32\include\windows.inc(8807) : error A2179: structure improperly initialized
    \masm32\include\windows.inc(8807) : error A2008: syntax error : in structure
    \masm32\include\windows.inc(8813) : error A2179: structure improperly initialized
    \masm32\include\windows.inc(8813) : error A2008: syntax error : in structure
    
    и так еще дофига раз.. а если добавлять option casemap :none, то половину переделывть придется... кароч я нуб =(

    Походу я взяла просто достаточно шаблонную ф-цию с диалоговыми окнами.. и переписала.. просто под себя..

    выложила все тут

    ПС: я писала все это не сама, а просто ПЕРЕПИСАЛА код немного и все.. адаптировала под данный процессор...

    а те.. я уже хз блин... псц заебалась..
    В общем, ловите трояшку.. )

    /me пошла кушать мороженое..


    Добавлено:
    Говорили же мне не с этого начинать) а фига ли я кого послушала)) мде.. зря..
     
    #38 yeti, 26 Aug 2007
    Last edited: 26 Aug 2007
    1 person likes this.