Fehler in Programm mit MCI (WinAPI-MASM32 Easy Code)



  • Ich habe dieses Programm mit Hilfe von EasyCode MASM erstellt. Für die mciSendString-Funktion "play MyAlias from" habe ich Code aus einem funktionierenden Programm genommen, einem Vorgänger wo jeweils bei Knopfdruck 10 Sek. gesprungen wurde; allerdings funktioniert diese Funktion da nicht... Sollte wie beim Media Player bei Ziehen des Trackbars zu der gewünschten Position springen. Es geschieht allerdings einfach nichts; wenn ich eine MessageBox anzeigen lasse beim Ziehen erscheint diese.

    Ausschnitte:

    forward DB " play MyAlias from ", 0 
    sforward DB 255 Dup(?), 0 
    curpos Proc 
    
    invoke mciSendString, addr cpos, addr spos, 255, 0 
    invoke StrToInt, addr spos 
    mov zahlpos, eax 
    ret 
    curpos EndP 
    setpos Proc 
    Invoke GetWindowItem, winhWnd, IDC_WINDOW1_SLIDER2 
    Invoke SendMessage, Eax, TBM_GETPOS, TRUE, NULL 
    
    Invoke wsprintf, Addr pos, Addr sformat, Eax 
    Invoke mciSendString, Addr forward, Addr pos, 0, 0 
    ;Invoke MessageBox, 0, Addr forward, Addr pos, 0 
    ret 
    setpos EndP 
    
    goback Proc 
    
    Mov Eax, zahlpos 
    sub eax, tensec 
    invoke wsprintf, addr sforward, addr sformat, eax 
    Invoke mciSendString, Addr forward, Addr sforward, 0, 0 
    Invoke MessageBox, 0, Addr forward, Addr sforward, 0 
    ret 
    goback endp 
    
    Window1Slider2 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
    
    .If uMsg == WM_LBUTTONUP 
    
             Call setpos 
    
          .EndIf
    

    und der gesamte Quellcode (Design des Forms ist nicht ersichtlich da mit Formdesigner erstellt)

    Include   comdlg32.inc 
    IncludeLib   Comdlg32.lib 
    
    Include   shell32.inc 
    IncludeLib   shell32.lib 
    
    Include   \masm32\include\winmm.inc 
    includelib \masm32\lib\winmm.lib 
    
    includelib \masm32\lib\shlwapi.lib 
    include \masm32\include\shlwapi.inc 
    
    .Const 
    
    .Data? 
    szFileName DB 255 Dup(?), 0 
    szFehler DB 100 Dup(?), 0 
    winhWnd DD ? 
    
    spos DB 255 Dup (?), 0 
    zahlpos DD ? 
    zahl DD ? 
    laenge DD ? 
    sBuffer DB 255 Dup(?), 0 
    
    volstr DB 4 Dup(?), 0 
    pos DB 255 Dup (?), 0 
    
    sforward DB 255 Dup(?), 0 
    .Data 
    
    inull DD 0 
    status DB "status MyAlias length", 0 
    cpos DB "status MyAlias position ",0 
    fehler DB "Fehler bein Öffnen der Datei/keine kompatible Mediendatei oder von dieser Windows-Version nicht unterstützt", 0 
    sformat DB "%i", 0 
    mcivolstr DB "setaudio MyAlias volume to ", 0 
    infoTitel DB "geöffnete Datei", 0 
    
    tensec DD 10000 
    forward DB " play MyAlias from ", 0 
    
    ofn                  OPENFILENAME   <0> 
    
    open1 DB "open ", 1024 Dup(?), 0 
    open2 DB " type MPEGVideo alias MyAlias",0        
    play DB "play MyAlias",0 
    stop DB "stop MyAlias",0 
    filename DB 1024 dup(?) 
    close DB "close MyAlias", 0 
    mci3 DB 0 
    
    .Code 
    
    Window1Procedure Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
       .If uMsg == WM_CREATE 
     Mov Eax, hWnd 
     Mov winhWnd, Eax 
     Invoke DragAcceptFiles, Eax, 255 
          Return TRUE 
    
          .ElseIf uMsg == WM_VSCROLL 
    
    Call setvolume 
    
    .ElseIf uMsg == WM_TIMER 
     .If wParam == 1 
        Call curpos 
        Invoke GetWindowItem, winhWnd, IDC_WINDOW1_SLIDER2 
        Invoke SendMessage, Eax, TBM_SETPOS, zahlpos, zahlpos 
    
    .EndIf 
    
    .ElseIf uMsg == WM_DROPFILES 
       Mov szFileName, 0 
            Invoke DragQueryFile, wParam, 0, Addr szFileName, SizeOf szFileName 
          invoke mciSendString, ADDR stop, ADDR mci3,0,0 
        Invoke mciSendString, Addr close, Addr mci3, 0, 0 
    
            Jmp abspielen 
    
       .ElseIf uMsg == WM_CLOSE 
          Invoke mciSendString, Addr stop, Addr mci3, 0, 0 
            Invoke mciSendString, Addr close, Addr mci3, 0, 0 
          Invoke IsModal, hWnd 
          .If Eax 
             Invoke EndModal, hWnd, IDCANCEL 
             Return TRUE 
          .EndIf 
    
          .ElseIf uMsg == WM_COMMAND 
             Mov Eax, wParam 
             .If Ax == IDC_WINDOW1_BUTTON1 
                Shr Eax, 16 
    
                .If Ax == BN_CLICKED 
    
    Mov ofn.lStructSize, SizeOf OPENFILENAME 
        ;Push hParent 
         ;Pop ofn.hWndOwner 
        ;Push hInstance 
        ;Pop ofn.hInstance 
        ;Push lpFilter 
        ;Pop ofn.lpstrFilter 
        Push Offset szFileName 
        Pop ofn.lpstrFile 
        Mov ofn.nMaxFile, SizeOf szFileName 
       ; Push lpTitle 
       ; Pop ofn.lpstrTitle 
        Mov ofn.Flags,              OFN_EXPLORER or OFN_FILEMUSTEXIST or \ 
                                    OFN_LONGNAMES 
    
            Invoke GetOpenFileName, Addr ofn 
            Invoke mciSendString, Addr stop, Addr mci3, 0, 0 
            Invoke mciSendString, Addr close, Addr mci3, 0, 0 
    abspielen: Mov open1[5], 0       ;open ,0 und nicht weiter, string leeren 
    Invoke GetShortPathName, Addr szFileName, Addr filename, 255 
    Lea Esi, open1 
     FindLastByte: 
      lodsb 
      Or al, al 
      jnz FindLastByte 
    
      dec esi 
      mov edi, esi 
      lea esi, filename 
      CatStrings: 
      lodsb 
      Or al, al 
      jz Done 
      stosb 
      jmp CatStrings 
    
     Done: 
      mov al, 0 
      stosb 
    
                     ;Start:    
      lea esi, open1 
     FindLastByte2: 
      lodsb 
      Or al, al 
      jnz FindLastByte2 
    
      dec esi 
      mov edi, esi 
      lea esi, open2 
      CatStrings2: 
      lodsb 
      Or al, al 
      jz Done2 
      stosb 
      jmp CatStrings2 
    
     Done2: 
      mov al, 0 
      stosb 
    
                lea eax, open1 
    
                invoke mciSendString, eax, ADDR mci3,0,0 
    
                    lea ebx, mci3 
                    lea eax, play 
                    Invoke mciSendString, Eax, Ebx, 0, 0 
                    Cmp Eax, 0 
                    Je ok 
                    Invoke mciGetErrorString, Eax, Addr szFehler, 100 
                    Invoke MessageBox, winhWnd, Addr szFehler, Addr fehler, MB_OK Or MB_ICONERROR 
    
    ok:  Call setvolume 
         Call getlength 
    
         Invoke GetWindowItem, winhWnd, IDC_WINDOW1_SLIDER2 
    
         Invoke SendMessage, Eax, TBM_SETRANGEMAX, NULL, laenge 
    ;Invoke SetScrollRange, Eax, TBHSCROLL, inull, laenge, FALSE ;ebenfalls falsch 
    
    .EndIf 
    .EndIf 
    
    .If Ax == IDC_WINDOW1_BUTTON2 
                Shr Eax, 16 
    
                .If Ax == BN_CLICKED 
    
                  Invoke mciSendString, Addr stop, Addr mci3, 0, 0 
                  Invoke mciSendString, Addr close, Addr mci3, 0, 0 
                .EndIf 
                .EndIf 
    
    .If Ax == IDC_WINDOW1_BUTTON3 
                Shr Eax, 16 
    
                .If Ax == BN_CLICKED 
    
                  Invoke mciSendString, Addr stop, Addr mci3, 0, 0 
    
                .EndIf 
                .EndIf 
    
                .If Ax == IDC_WINDOW1_BUTTON4 
                Shr Eax, 16 
    
                .If Ax == BN_CLICKED 
    
                  lea ebx, mci3 
                    Lea Eax, play 
                    Invoke mciSendString, Eax, Ebx, 0, 0 
                    Call setvolume 
                .EndIf 
                .EndIf 
    
                .If Ax == IDC_WINDOW1_BUTTON5 
                   Shr Eax, 16 
                   .If Ax == BN_CLICKED 
                      Invoke mciSendString, Addr stop, Addr mci3, 0, 0 
            Invoke mciSendString, Addr close, Addr mci3, 0, 0 
                         Jmp abspielen 
                      .EndIf 
                      .EndIf 
    
                      .If Ax == IDC_WINDOW1_BUTTON6 
                   Shr Eax, 16 
                   .If Ax == BN_CLICKED 
                      Invoke MessageBox, 0, Addr szFileName, Addr infoTitel, MB_ICONINFORMATION 
                      .EndIf 
                      .EndIf 
    
                      .If Ax == IDC_WINDOW1_BUTTON7 
                Shr Eax, 16 
    
                .If Ax == BN_CLICKED 
    
                  Call goback 
                .EndIf 
                .EndIf 
    
                .If Ax == IDC_WINDOW1_BUTTON8 
                Shr Eax, 16 
    
                .If Ax == BN_CLICKED 
    
                .EndIf 
                .EndIf 
    
       .EndIf 
       Return FALSE 
    Window1Procedure EndP 
    setvolume Proc 
       Mov mcivolstr[28], 0 
       Mov volstr, 0000 
    Invoke GetWindowItem, winhWnd, IDC_WINDOW1_SLIDER1 
    Invoke SendMessage, Eax, TBM_GETPOS, TRUE, NULL 
    Invoke wsprintf, Addr volstr, Addr sformat, Eax 
    
    Lea Esi, mcivolstr 
    FindLastByte3: 
      lodsb 
      Or al, al 
      Jnz FindLastByte3 
    
      dec esi 
      mov edi, esi 
      Lea Esi, volstr 
    CatStrings1: 
      lodsb 
      Or al, al 
      Jz Done1 
      stosb 
      Jmp CatStrings1 
    
    Done1: 
      mov al, 0 
      stosb 
    
                     ;Start:    
      lea esi, open1 
     FindLastByte2: 
      lodsb 
      Or al, al 
      jnz FindLastByte2 
    
      dec esi 
      mov edi, esi 
      lea esi, open2 
    CatStrings3: 
      lodsb 
      Or al, al 
      Jz Done3 
      stosb 
      Jmp CatStrings3 
    
    Done3: 
      mov al, 0 
      stosb 
    Lea Eax, mcivolstr 
    
    Invoke mciSendString, Eax, 0, 0, 0 
    Ret 
    setvolume EndP 
    getlength Proc 
    
    invoke mciSendString, addr status, addr sBuffer,255, 0 
    
    invoke StrToInt, addr sBuffer 
    
    mov laenge, eax 
    ret 
    getlength endp 
    
    curpos Proc 
    
    invoke mciSendString, addr cpos, addr spos, 255, 0 
    invoke StrToInt, addr spos 
    mov zahlpos, eax 
    ret 
    curpos EndP 
    setpos Proc 
    Invoke GetWindowItem, winhWnd, IDC_WINDOW1_SLIDER2 
    Invoke SendMessage, Eax, TBM_GETPOS, TRUE, NULL 
    
    Invoke wsprintf, Addr pos, Addr sformat, Eax 
    Invoke mciSendString, Addr forward, Addr pos, 0, 0 
    ;Invoke MessageBox, 0, Addr forward, Addr pos, 0 
    ret 
    setpos EndP 
    
    goback Proc 
    
    Mov Eax, zahlpos 
    sub eax, tensec 
    invoke wsprintf, addr sforward, addr sformat, eax 
    Invoke mciSendString, Addr forward, Addr sforward, 0, 0 
    Invoke MessageBox, 0, Addr forward, Addr sforward, 0 
    ret 
    goback endp 
    
    Window1Button1 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
       Return FALSE 
    Window1Button1 EndP 
    
    Window1Button2 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
    
       Return FALSE 
    Window1Button2 EndP 
    
    Window1Slider1 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
       Return FALSE 
    Window1Slider1 EndP 
    
    Window1Static1 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
       Return FALSE 
    Window1Static1 EndP 
    
    Window1Button3 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
       Return FALSE 
    Window1Button3 EndP 
    
    Window1Button4 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
       Return FALSE 
    Window1Button4 EndP 
    
    Window1Static2 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
       Return FALSE 
    Window1Static2 EndP 
    
    Window1Static3 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
       Return FALSE 
    Window1Static3 EndP 
    
    Window1Slider2 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
    
    .If uMsg == WM_LBUTTONUP 
    
             Call setpos 
    
          .EndIf 
    
       Return FALSE 
    Window1Slider2 EndP 
    
    Window1Button5 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
       Return FALSE 
    Window1Button5 EndP 
    
    Window1Button6 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
       Return FALSE 
    Window1Button6 EndP 
    
    Window1Button7 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
       Return FALSE 
    Window1Button7 EndP 
    
    Window1Button8 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM 
       Return FALSE 
    Window1Button8 EndP
    

Anmelden zum Antworten