标题:高手帮忙看下这简单的代码~
只看楼主
honker
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-6-30
 问题点数:0 回复次数:7 
高手帮忙看下这简单的代码~
这个是打开和关闭光驱的打开后1面关闭光驱`我想加个定时器进去让他每过1秒反复的执行打开和关闭代码`可是不知道那里错了`高手帮忙看下~


        .386
        .model flat, stdcall
        option casemap :none   ; case sensitive

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;    Include 数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

include        windows.inc
include        kernel32.inc
include        user32.inc
include        winmm.inc

includelib    kernel32.lib
includelib    user32.lib
includelib    winmm.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;    数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

        .data

szOpen        db    'set CDAudio door open',0
szClose        db    'set CDAudio door closed',0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;    代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

        .code
                _timeproc proc _hWnd,uMsg,_idEvent,_dwTime
                   pushad
                   jmp start:
           _timeproc endp
    start:        invoke    mciSendString,offset szOpen,NULL,0,0
        invoke    Sleep,1000
        invoke    mciSendString,offset szClose,NULL,0,0
            invoke SetTimer,NULL,IDC_TIME,1000,addr _timeproc
                    




        invoke    ExitProcess,NULL

        invoke KillTimer,NULL,IDC_TIME
          end start:
搜索更多相关主题的帖子: 代码 光驱 lib 
2008-07-29 12:07
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
.386
.Model Flat, StdCall
Option Casemap :None

Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
include winmm.inc

includelib winmm.lib
includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
include macro.asm
    
    WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
    WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
    
.DATA
    szClassName db "MASMPlus_Class",0
    szOpen db 'set CDAudio door open',0
    szClose db 'set CDAudio door closed',0

.DATA?
    hInstance    dd ?
    
.CODE
START:

    invoke GetModuleHandle,NULL
    mov hInstance,eax
    invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT
    invoke ExitProcess,0

WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
    LOCAL wc   :WNDCLASSEX
    LOCAL msg  :MSG
    local hWnd :HWND
    
    mov wc.cbSize,sizeof WNDCLASSEX
    mov wc.style,CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
    mov wc.lpfnWndProc,offset WndProc
    mov wc.cbClsExtra,NULL
    mov wc.cbWndExtra,NULL
    push hInst
    pop wc.hInstance
    mov wc.hbrBackground,COLOR_BTNFACE+1
    mov wc.lpszMenuName,NULL
    mov wc.lpszClassName,offset szClassName
    invoke LoadIcon,hInst,100
    mov wc.hIcon,eax
    invoke LoadCursor,NULL,IDC_ARROW
    mov wc.hCursor,eax
    mov wc.hIconSm,0
    invoke RegisterClassEx, ADDR wc
    invoke CreateWindowEx,NULL,ADDR szClassName,CTXT("http://www.),WS_OVERLAPPEDWINDOW,200,200,400,200,NULL,NULL,hInst,NULL
    mov hWnd,eax
    invoke ShowWindow,hWnd,SW_HIDE
    invoke UpdateWindow,hWnd
    
    StartLoop:
        invoke GetMessage,ADDR msg,NULL,0,0
            cmp eax, 0
            je ExitLoop
                invoke TranslateMessage, ADDR msg
                invoke DispatchMessage, ADDR msg
            jmp StartLoop
    ExitLoop:
    
mov eax,msg.wParam
ret
WinMain endp

_timeproc proc _hWnd,uMsg,_idEvent,_dwTime
    invoke mciSendString,offset szOpen,NULL,0,0
    invoke Sleep,1000
    invoke mciSendString,offset szClose,NULL,0,0
_timeproc endp

WndProc proc hWin:DWORD,uMsg:DWORD,wParam :DWORD,lParam :DWORD
    .if uMsg==WM_CREATE
        invoke SetTimer,NULL,0,1000,offset _timeproc
    .elseif uMsg == WM_DESTROY
        invoke PostQuitMessage,NULL
    .else
        invoke DefWindowProc,hWin,uMsg,wParam,lParam
    .endif
    ret
WndProc endp

END START
2008-07-29 13:39
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
[bo][un]zklhp[/un] 在 2008-7-29 13:39 的发言:[/bo]

.386
.Model Flat, StdCall
Option Casemap :None

Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
include winmm.inc

includelib winmm.lib
includelib gdi32.lib
I ...


偶都给你传上来好了

test001.rar (6.72 KB)


我说 你那个原来的程序 连消息循环都没有 怎么能用 定时器消息 呢

最简单的写法 就是直接在 masmplus 或其他的 模板里加个定时器 再让他不出窗口就是了 偶感觉是这样

ps 你是不是要干什么坏事  偶可不负责呀
2008-07-29 13:45
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
得分:0 
LZ,你的程序问题太多了,简直就是个死循环啊
3#的朋友,你太恐怖了吧,还不让窗口显示?要是放到人家电脑上,再来个自动运行,唉。。。
我也写了一个,是用对话框的:

;定时打开和关闭光驱,请不要频繁使用,会损坏您的硬件!
;==================================================
        .386
        .model flat,stdcall
        option casemap:none

include        windows.inc
include        user32.inc
include        kernel32.inc
include        winmm.inc
includelib    kernel32.lib
includelib    user32.lib
includelib    winmm.lib

IDD_DIALOG    equ    1

        .data?
hInstance    dd    ?
idTimer        dd    ?

        .const
szOpen         db    'set CDAudio door open',0
szClose        db    'set CDAudio door closed',0

        .code
_TimeProc    proc
        
        pushad
        invoke    mciSendString,offset szOpen,NULL,0,0
            invoke    Sleep,1000
            invoke    mciSendString,offset szClose,NULL,0,0
        popad
        ret
_TimeProc    endp

_ProcDlgMain    proc    uses ebx edi esi,hWnd,uMsg,wParam,IParam

        mov    eax,uMsg
        
        .if    eax == WM_INITDIALOG
            invoke    SetTimer,NULL,NULL,3000,addr _TimeProc  ;隔3秒执行一次
            mov    idTimer,eax                ;如果是1秒,间隔太短了.
        
        .elseif    eax == WM_COMMAND
            mov    eax,wParam
            .if    ax == IDCANCEL
            invoke    KillTimer,NULL,idTimer
            invoke    EndDialog,hWnd,NULL
            .endif
            
        .elseif    eax == WM_CLOSE
            invoke    KillTimer,NULL,idTimer
            invoke    EndDialog,hWnd,NULL
            
        .else
            mov    eax,FALSE
            ret
        .endif
        mov    eax,TRUE
        ret
_ProcDlgMain    endp

start:
        invoke    GetModuleHandle,NULL
        mov    hInstance,eax
        invoke    DialogBoxParam,hInstance,IDD_DIALOG,NULL,offset _ProcDlgMain,NULL
        invoke    ExitProcess,NULL
        
        end    start
;=============================================================================================

楼主参考一下。也可下载的。

OpenCD.rar (2.69 KB) 2.50kb

2008-07-29 14:36
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
[bo][un]ONEPROBLEM[/un] 在 2008-7-29 14:36 的发言:[/bo]

LZ,你的程序问题太多了,简直就是个死循环啊
3#的朋友,你太恐怖了吧,还不让窗口显示?要是放到人家电脑上,再来个自动运行,唉。。。
我也写了一个,是用对话框的:

;定时打开和关闭光驱,请 ...


原理一样啦  偶偷懒 直接在那个摸板里加几句就是了

这种程序 一般都是吓唬人的 还有关显示器的  搞蓝屏的呢
2008-07-29 15:19
honker
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-6-30
得分:0 
哎``高手太多了`
  看下这个吧
.data
szOpen        db    'set CDAudio door open',0
szClose        db    'set CDAudio door closed',0
        .code
        
    start:        
            invokemciSendString,offsetszOpen,NULL,0,0
        invoke    Sleep,1000
        invoke    mciSendString,offset szClose,NULL,0,0
                  JMP start
                  end start
2008-07-29 21:47
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
[bo][un]honker[/un] 在 2008-7-29 21:47 的发言:[/bo]

哎``高手太多了`
  看下这个吧
.data
szOpen        db    'set CDAudio door open',0
szClose        db    'set CDAudio door closed',0
        .code
        
    start:        
            invokemciSendString,offsetszOpen,NULL,0,0
        in ...


你说让用定时器的…………

当然直接跳转最容易  我写的就有点脱裤子放屁了  呵呵
2008-07-31 13:54
阳小子
Rank: 1
等 级:新手上路
帖 子:26
专家分:6
注 册:2008-8-19
得分:0 
汗。。。

[[it] 本帖最后由 阳小子 于 2008-8-19 21:57 编辑 [/it]]
2008-08-19 21:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-225693-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.740232 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved