<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Windows - Kommandozeilenparameter unter Windows NT-Versionen]]></title><description><![CDATA[<p>Bei meinem Programm wird nur unter Windows98 und ME korrekt eine Datei geöffnet wenn sie direkt mit dem Programm geöffnet werden soll (Kommandozeilenparameter übergeben). Bei 2000 und XP gibt es die Fehlermeldung aus (wenn mciSendString FALSE zurückgibt); die NT-Versionen geben ja in einem ersten Parameter den Programmnamen aus? Jedenfalls wenn das &quot;i&quot; angeklickt wird steht dort doch der korrekte Dateiname!<br />
Was muss ich an dem Code ändern? Unter Win98/ME sollte es dennoch auch laufen.<br />
Das Programm wurde mit MASM32 erstellt und Prostart, daher sind einige Routinen ausgelagert.</p>
<p>Vielen Dank!</p>
<pre><code>.486                      ; create 32 bit code
      .model flat, stdcall      ; 32 bit memory model
      option casemap :none      ; case sensitive

      include mp3Player.inc        ; local includes for this file
      include dbmacros.asm
      include errormac.asm
      include \masm32\include\winmm.inc
includelib \masm32\lib\winmm.lib

includelib \masm32\lib\shlwapi.lib
include \masm32\include\shlwapi.inc

.data

ButtonText1 db &quot;&gt;&gt;&quot;,0
ButtonText2 db &quot;&lt;&lt;&quot;,0
ButtonText3 db &quot;Stop&quot;,0
ButtonText4 db &quot;&lt;&lt;&lt;&quot;,0
ButtonClassName db &quot;button&quot;,0
ButtonClassName2 db &quot;button&quot;,0
ButtonClassName3 db &quot;button&quot;,0
ButtonClassName4 db &quot;button&quot;,0

TrackBarClassName db &quot;msctls_trackbar32&quot;,0

sspielzeit db &quot;Spielzeit:&quot;,0
smin db &quot;min.&quot;,0

open1 db &quot;open &quot;, 1024 dup(?),0
open2 db &quot; type MPEGVideo alias MyAlias&quot;,0        
play db &quot;play MyAlias&quot;,0
stop db &quot;stop MyAlias&quot;,0
filename db 1024 dup(?)
close db &quot;close MyAlias&quot;,0
vol100 db &quot;setaudio MyAlias volume to 1000&quot;,0
vol90 db &quot;setaudio MyAlias volume to 900&quot;,0
vol80 db &quot;setaudio MyAlias volume to 800&quot;,0
vol70 db &quot;setaudio MyAlias volume to 700&quot;,0
vol60 db &quot;setaudio MyAlias volume to 600&quot;,0
vol50 db &quot;setaudio MyAlias volume to 500&quot;,0
vol40 db &quot;setaudio MyAlias volume to 400&quot;,0
vol30 db &quot;setaudio MyAlias volume to 300&quot;,0
vol20 db &quot;setaudio MyAlias volume to 200&quot;,0
vol10 db &quot;setaudio MyAlias volume to 100&quot;,0
vol0 db &quot;setaudio MyAlias volume to 0&quot;,0

status db &quot;status MyAlias length&quot;,0
sBuffer db 255 DUP(?),0
zeitstr db 255 dup (?),0
basis dd 1000
minuten dd 60
sformat db &quot;%i&quot;,0
spos db 255 dup (?),0
cpos db &quot;status MyAlias position &quot;,0
forward db &quot; play MyAlias from &quot;
sforward db 255 dup(?),0
lautst db &quot;Lautst.&quot;,0

tensec dd 10000
sec dd 1000
tbnull db 0
tbhundert dd 100
tbsiebzig dd 70
svol db 255 dup (?),0

mci3 db 0

fehler db &quot;Fehler bein Öffnen der Datei/keine kompatible Mediendatei oder von dieser Windows-Version nicht unterstützt&quot;,0

.data?
hwndButton HWND ?
hwndTrack HWND ?
zahl dd ?
laenge dd ?
zahlpos dd ?
devicecontext dd ?
printcurpos dd ?
strlength dd ?

ivol dd ?

.const
ButtonID equ 1
ButtonID2 equ 2
ButtonID3 equ 3
ButtonID4 equ 4
TrackBarID equ 5

.code

; #########################################################################

start:

      invoke InitCommonControls

    ; ------------------
    ; set global values
    ; ------------------
      invoke GetModuleHandle, NULL
      mov hInstance, eax

      invoke GetCommandLine
      mov CommandLine, eax

      invoke LoadIcon,hInstance,500    ; icon ID
      mov hIcon, eax

      invoke LoadCursor,NULL,IDC_ARROW
      mov hCursor, eax

      invoke GetSystemMetrics,SM_CXSCREEN
      mov sWid, eax

      invoke GetSystemMetrics,SM_CYSCREEN
      mov sHgt, eax

      call Main

      invoke ExitProcess,eax

; #########################################################################

Main proc

    LOCAL Wwd:DWORD,Wht:DWORD,Wtx:DWORD,Wty:DWORD

    STRING szClassName,&quot;Prostart_Class&quot;

    SingleInstanceOnly ADDR szClassName

  ; --------------------------------------------
  ; register class name for CreateWindowEx call
  ; --------------------------------------------
    invoke RegisterWinClass,ADDR WndProc,ADDR szClassName,
                       hIcon,hCursor,COLOR_BTNFACE+1

    mov Wwd, 300
    mov Wht, 200
    invoke TopXY,Wwd,sWid
    mov Wtx, eax
    invoke TopXY,Wht,sHgt
    mov Wty, eax

    invoke CreateWindowEx,WS_EX_LEFT or WS_EX_ACCEPTFILES,
                          ADDR szClassName,
                          ADDR szDisplayName,
                          WS_OVERLAPPED or WS_SYSMENU,
                          Wtx,Wty,Wwd,Wht,
                          NULL,NULL,
                          hInstance,NULL
    mov hWnd,eax

  ; ---------------------------
  ; macros for unchanging code
  ; ---------------------------
    DisplayMenu hWnd,600
    DisplayWindow hWnd,SW_SHOWNORMAL

    call MsgLoop
    ret

Main endp

; #########################################################################

RegisterWinClass proc lpWndProc:DWORD, lpClassName:DWORD,
                      Icon:DWORD, Cursor:DWORD, bColor:DWORD

    LOCAL wc:WNDCLASSEX

    mov wc.cbSize,         sizeof WNDCLASSEX
    mov wc.style,          CS_BYTEALIGNCLIENT or \
                           CS_BYTEALIGNWINDOW
    m2m wc.lpfnWndProc,    lpWndProc
    mov wc.cbClsExtra,     NULL
    mov wc.cbWndExtra,     NULL
    m2m wc.hInstance,      hInstance
    m2m wc.hbrBackground,  bColor
    mov wc.lpszMenuName,   NULL
    m2m wc.lpszClassName,  lpClassName
    m2m wc.hIcon,          Icon
    m2m wc.hCursor,        Cursor
    m2m wc.hIconSm,        Icon

    invoke RegisterClassEx, ADDR wc

    ret

RegisterWinClass endp

; ########################################################################

MsgLoop proc

  ; ------------------------------------------
  ; The following 4 equates are available for
  ; processing messages directly in the loop.
  ; m_hWnd - m_Msg - m_wParam - m_lParam
  ; ------------------------------------------

    LOCAL msg:MSG

    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

MsgLoop endp

; #########################################################################

WndProc proc hWin   :DWORD,
             uMsg   :DWORD,
             wParam :DWORD,
             lParam :DWORD

    LOCAL var    :DWORD
    LOCAL caW    :DWORD
    LOCAL caH    :DWORD
    LOCAL Rct    :RECT
    LOCAL buffer1[128]:BYTE  ; these are two spare buffers
    LOCAL buffer2[128]:BYTE  ; for text manipulation etc..
    LOCAL szDropFileName[260]:BYTE

    .if uMsg == WM_COMMAND
    ;======== toolbar commands ========
        .if wParam == 50
            jmp b1

        .elseif wParam == 51
            invoke mciSendString, ADDR play, ADDR mci3,0,0
        .elseif wParam == 52
            invoke mciSendString, ADDR stop, ADDR mci3,0,0

        .elseif wParam == 53
            lea eax, szFileName
            invoke MessageBox,hWin,eax,
                              ADDR szDisplayName,MB_OK

;------------

.elseif wParam==ButtonID
invoke InvalidateRect, hWin, NULL, TRUE
call curpos
call goforward

.elseif wParam==ButtonID2
invoke InvalidateRect, hWin, NULL, TRUE
call curpos
call goback

;------------

.elseif wParam==ButtonID3

invoke mciSendString, ADDR stop, ADDR mci3,0,0
invoke mciSendString, ADDR close, ADDR mci3,0,0
invoke KillTimer, hWin, 1

.elseif wParam==ButtonID4
invoke mciSendString, ADDR stop, ADDR mci3,0,0
invoke mciSendString, ADDR close, ADDR mci3,0,0
invoke InvalidateRect, hWin, NULL, TRUE
jmp abspielen
        .endif

    ;======== menu commands ========

        .if wParam == 1001

   b1: invoke mciSendString, ADDR stop, ADDR mci3,0,0
    invoke mciSendString, ADDR close, ADDR mci3,0,0

          ; --------------------------------------
          ; szFileName is defined in Filedlgs.asm
          ; --------------------------------------
            mov szFileName[0],0     ; set 1st byte to zero
            invoke GetFileName,hWin,SADD(&quot;Open A File&quot;),
                                    SADD(&quot;mp3 Audioformat&quot;,0,&quot;*.mp3&quot;,0,&quot;wma Audioformat&quot;,0,&quot;*.wma&quot;,0,&quot;PCM/wave-Audio .wav&quot;,0,&quot;*.wav&quot;,0,&quot;MIDI-Dateien .mid&quot;,0,&quot;*.mid&quot;,0, &quot;MPG-Filme&quot;,0,&quot;*.mpg&quot;,0,&quot;AVI-Filme&quot;,0,&quot;*.avi&quot;,0,&quot;alle Dateien&quot;,0,&quot;*.*&quot;,0) ; 
            cmp szFileName[0],0     ; zero if cancel pressed in dlgbox
            je @F

abspielen:  
            mov open1[5],0       ;open ,0 und nicht weiter, string leeren
            invoke GetShortPathName, ADDR szFileName, ADDR filename, 255

Start: invoke InvalidateRect, hWin, NULL, TRUE

  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 MessageBox,hWin,ADDR fehler,ADDR szDisplayName,MB_OK or MB_ICONERROR

               ok: invoke SetTimer, hWin, 1,sec, 0
               call getlength

            @@:
.elseif wParam == 1002
          ; --------------------------------------
          ; szFileName is defined in Filedlgs.asm
          ; --------------------------------------
            mov szFileName[0],0     ; set 1st byte to zero
            invoke SaveFileName,hWin,SADD(&quot;Save File As ...&quot;),
                                     SADD(&quot;All files&quot;,0,&quot;*.*&quot;,0,0)
            cmp szFileName[0],0     ; zero if cancel pressed in dlgbox
            je @F
          ; ---------------------------------
          ; perform your file save code here
          ; ---------------------------------
            invoke MessageBox,hWin,ADDR fehler,ADDR szDisplayName,MB_OK
            @@:

        .endif

        .if wParam == 1010
            invoke SendMessage,hWin,WM_SYSCOMMAND,SC_CLOSE,NULL

        .elseif wParam == 1900
            ShellAboutBox hWin,hIcon,\
                &quot;About nativeConny#Windows Application&quot;,\
                &quot;nativeConny Medienplayer&quot;,13,10,&quot;Copyright © C. M. Obrecht, 2007&quot;, 13,10,13,10,&quot;100% native opcodes /win32API, 100% Assembler pure and symply (-:&quot;
        .endif
;====== end menu commands ======

    .elseif uMsg == WM_DROPFILES
        invoke DragQueryFile,wParam,0,ADDR szFileName,sizeof szFileName  ; war szDropFileName
      invoke mciSendString, ADDR stop, ADDR mci3,0,0
    invoke mciSendString, ADDR close, ADDR mci3,0,0

        jmp abspielen

;------------trackbar messages--------------
.elseif uMsg==WM_HSCROLL                      

invoke SendMessage, hwndTrack, TBM_GETPOS, TRUE, NULL

cmp eax, 100
je v100
cmp eax, 91
je v90
cmp eax, 80
je v80
cmp eax, 81
je v80
cmp eax, 82
je v80
cmp eax, 71
je v70
cmp eax, 69
je v70
cmp eax, 72
je v70
cmp eax, 60
je v60
cmp eax, 59
je v60
cmp eax, 58
je v60
cmp eax, 52
je v50
cmp eax, 54
je v50
cmp eax, 40
je v40
cmp eax, 30
je v30
cmp eax, 31
je v30
cmp eax, 32
je v30
cmp eax, 20
je v20
cmp eax, 10
je v10
cmp eax, 0
je v0
jmp vkein
v100: invoke mciSendString, addr vol100, 0, 0, 0
jmp vkein
v90: invoke mciSendString, addr vol90, 0, 0, 0
jmp vkein
v80: invoke mciSendString, addr vol80, 0, 0, 0
jmp vkein
v70: invoke mciSendString, addr vol70, 0, 0, 0
jmp vkein
v60: invoke mciSendString, addr vol60, 0, 0, 0
jmp vkein
v50: invoke mciSendString, addr vol50, 0, 0, 0
jmp vkein
v40: invoke mciSendString, addr vol40, 0, 0, 0
jmp vkein
v30: invoke mciSendString, addr vol30, 0, 0, 0
jmp vkein
v20: invoke mciSendString, addr vol20, 0, 0, 0
jmp vkein
v10: invoke mciSendString, addr vol10, 0, 0, 0
jmp vkein
v0: invoke mciSendString, addr vol0, 0, 0, 0
vkein: nop

;---------------/trackbar messages-----------

    .elseif uMsg == WM_CREATE
            invoke Do_ToolBar,hWin

;-----------------------------------------------

invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR ButtonText1,\
                        WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,\
                        250,120,30,20,hWin,ButtonID,hInstance,NULL
		mov  hwndButton,eax

invoke CreateWindowEx,NULL, ADDR ButtonClassName2,ADDR ButtonText2,\
                        WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,\
                        8,120,30,20,hWin,ButtonID2,hInstance,NULL
		mov  hwndButton,eax

invoke CreateWindowEx,NULL, ADDR ButtonClassName3,ADDR ButtonText3,\
                        WS_CHILD or WS_VISIBLE or BS_PUSHBUTTON,\
                        8,30,32,20,hWin,ButtonID3,hInstance,NULL
		mov  hwndButton,eax

invoke CreateWindowEx,NULL, ADDR ButtonClassName4,ADDR ButtonText4,\
                        WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,\
                        47,120,30,20,hWin,ButtonID4,hInstance,NULL
		mov  hwndButton,eax

;------------------------trackbar-----------------------

invoke CreateWindowEx,NULL,addr TrackBarClassName, NULL, WS_CHILD or WS_VISIBLE,220,60,70,20,hWin, TrackBarID, hInstance, NULL
mov hwndTrack, eax
invoke SendMessage, hwndTrack, TBM_SETRANGE, tbnull, tbhundert
invoke SendMessage, hwndTrack, TBM_SETPOS, TRUE, tbsiebzig

;-------------------------------------------------------

invoke GetCL,1, ADDR szFileName
cmp szFileName, 0
je nocmd
jmp abspielen
nocmd:
    .elseif uMsg == WM_SYSCOLORCHANGE
        invoke Do_ToolBar,hWin

    .elseif uMsg == WM_SIZE
        invoke SendMessage,hToolBar,TB_AUTOSIZE,0,0

    .elseif uMsg == WM_PAINT
        invoke Paint_Proc,hWin

        return 0

    .elseif uMsg == WM_CLOSE

    .elseif uMsg == WM_DESTROY
    invoke mciSendString, ADDR stop, ADDR mci3,0,0
    invoke mciSendString, ADDR close, ADDR mci3,0,0
    invoke KillTimer, hWin, 1
        invoke PostQuitMessage,NULL
        return 0

.elseif uMsg==WM_TIMER
 .if wParam == 1

call curpos
mov zahlpos, eax
fild zahlpos
fidiv sec
fistp zahlpos                                       
invoke wsprintf, addr printcurpos, addr sformat, zahlpos
mov strlength, eax
invoke GetDC, hWin
mov devicecontext, eax
invoke TextOut,eax, 250, 100, addr printcurpos, strlength
;---------- length

            invoke TextOut,devicecontext, 90, 100, addr zeitstr, laenge

            invoke TextOut,devicecontext, 20, 100, addr sspielzeit, 10

            invoke TextOut,devicecontext, 120, 100, addr smin, 4

            invoke ReleaseDC, hWin, devicecontext
                                   ;--------- /length

.endif
    .endif

    invoke DefWindowProc,hWin,uMsg,wParam,lParam

    ret

WndProc endp

; ########################################################################

TopXY proc wDim:DWORD, sDim:DWORD

    shr sDim, 1      ; divide screen dimension by 2
    shr wDim, 1      ; divide window dimension by 2
    mov eax, wDim    ; copy window dimension into eax
    sub sDim, eax    ; sub half win dimension from half screen dimension

    return sDim

TopXY endp

; #########################################################################

Paint_Proc proc hWin:DWORD

    LOCAL hDC      :DWORD
    LOCAL btn_hi   :DWORD
    LOCAL btn_lo   :DWORD
    LOCAL Rct      :RECT
    LOCAL Ps       :PAINTSTRUCT

    invoke BeginPaint,hWin,ADDR Ps
    mov hDC, eax

            invoke TextOut,hDC, 175, 62, addr lautst, 7

  ; ----------------------------------------

    invoke GetSysColor,COLOR_BTNHIGHLIGHT
    mov btn_hi, eax

    invoke GetSysColor,COLOR_BTNSHADOW
    mov btn_lo, eax

  ; ----------------------------------------

    invoke EndPaint,hWin,ADDR Ps

    ret

Paint_Proc endp

; ########################################################################

getlength proc

invoke mciSendString, addr status, addr sBuffer,255, 0

invoke StrToInt, addr sBuffer
mov zahl, eax
fild zahl
fidiv basis
fidiv minuten
fist zahl
invoke wsprintf, addr zeitstr, addr sformat, zahl 
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

goforward proc
add eax, tensec
invoke wsprintf, addr sforward, addr sformat, eax
invoke mciSendString, addr forward, addr sforward,0,0
ret
goforward endp

goback proc
mov eax, zahlpos
sub eax, tensec
invoke wsprintf, addr sforward, addr sformat, eax
invoke mciSendString, addr forward, addr sforward,0,0
ret
goback endp

end start
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/205335/windows-kommandozeilenparameter-unter-windows-nt-versionen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 15:40:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205335.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Feb 2008 07:02:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Windows - Kommandozeilenparameter unter Windows NT-Versionen on Wed, 13 Feb 2008 07:02:54 GMT]]></title><description><![CDATA[<p>Bei meinem Programm wird nur unter Windows98 und ME korrekt eine Datei geöffnet wenn sie direkt mit dem Programm geöffnet werden soll (Kommandozeilenparameter übergeben). Bei 2000 und XP gibt es die Fehlermeldung aus (wenn mciSendString FALSE zurückgibt); die NT-Versionen geben ja in einem ersten Parameter den Programmnamen aus? Jedenfalls wenn das &quot;i&quot; angeklickt wird steht dort doch der korrekte Dateiname!<br />
Was muss ich an dem Code ändern? Unter Win98/ME sollte es dennoch auch laufen.<br />
Das Programm wurde mit MASM32 erstellt und Prostart, daher sind einige Routinen ausgelagert.</p>
<p>Vielen Dank!</p>
<pre><code>.486                      ; create 32 bit code
      .model flat, stdcall      ; 32 bit memory model
      option casemap :none      ; case sensitive

      include mp3Player.inc        ; local includes for this file
      include dbmacros.asm
      include errormac.asm
      include \masm32\include\winmm.inc
includelib \masm32\lib\winmm.lib

includelib \masm32\lib\shlwapi.lib
include \masm32\include\shlwapi.inc

.data

ButtonText1 db &quot;&gt;&gt;&quot;,0
ButtonText2 db &quot;&lt;&lt;&quot;,0
ButtonText3 db &quot;Stop&quot;,0
ButtonText4 db &quot;&lt;&lt;&lt;&quot;,0
ButtonClassName db &quot;button&quot;,0
ButtonClassName2 db &quot;button&quot;,0
ButtonClassName3 db &quot;button&quot;,0
ButtonClassName4 db &quot;button&quot;,0

TrackBarClassName db &quot;msctls_trackbar32&quot;,0

sspielzeit db &quot;Spielzeit:&quot;,0
smin db &quot;min.&quot;,0

open1 db &quot;open &quot;, 1024 dup(?),0
open2 db &quot; type MPEGVideo alias MyAlias&quot;,0        
play db &quot;play MyAlias&quot;,0
stop db &quot;stop MyAlias&quot;,0
filename db 1024 dup(?)
close db &quot;close MyAlias&quot;,0
vol100 db &quot;setaudio MyAlias volume to 1000&quot;,0
vol90 db &quot;setaudio MyAlias volume to 900&quot;,0
vol80 db &quot;setaudio MyAlias volume to 800&quot;,0
vol70 db &quot;setaudio MyAlias volume to 700&quot;,0
vol60 db &quot;setaudio MyAlias volume to 600&quot;,0
vol50 db &quot;setaudio MyAlias volume to 500&quot;,0
vol40 db &quot;setaudio MyAlias volume to 400&quot;,0
vol30 db &quot;setaudio MyAlias volume to 300&quot;,0
vol20 db &quot;setaudio MyAlias volume to 200&quot;,0
vol10 db &quot;setaudio MyAlias volume to 100&quot;,0
vol0 db &quot;setaudio MyAlias volume to 0&quot;,0

status db &quot;status MyAlias length&quot;,0
sBuffer db 255 DUP(?),0
zeitstr db 255 dup (?),0
basis dd 1000
minuten dd 60
sformat db &quot;%i&quot;,0
spos db 255 dup (?),0
cpos db &quot;status MyAlias position &quot;,0
forward db &quot; play MyAlias from &quot;
sforward db 255 dup(?),0
lautst db &quot;Lautst.&quot;,0

tensec dd 10000
sec dd 1000
tbnull db 0
tbhundert dd 100
tbsiebzig dd 70
svol db 255 dup (?),0

mci3 db 0

fehler db &quot;Fehler bein Öffnen der Datei/keine kompatible Mediendatei oder von dieser Windows-Version nicht unterstützt&quot;,0

.data?
hwndButton HWND ?
hwndTrack HWND ?
zahl dd ?
laenge dd ?
zahlpos dd ?
devicecontext dd ?
printcurpos dd ?
strlength dd ?

ivol dd ?

.const
ButtonID equ 1
ButtonID2 equ 2
ButtonID3 equ 3
ButtonID4 equ 4
TrackBarID equ 5

.code

; #########################################################################

start:

      invoke InitCommonControls

    ; ------------------
    ; set global values
    ; ------------------
      invoke GetModuleHandle, NULL
      mov hInstance, eax

      invoke GetCommandLine
      mov CommandLine, eax

      invoke LoadIcon,hInstance,500    ; icon ID
      mov hIcon, eax

      invoke LoadCursor,NULL,IDC_ARROW
      mov hCursor, eax

      invoke GetSystemMetrics,SM_CXSCREEN
      mov sWid, eax

      invoke GetSystemMetrics,SM_CYSCREEN
      mov sHgt, eax

      call Main

      invoke ExitProcess,eax

; #########################################################################

Main proc

    LOCAL Wwd:DWORD,Wht:DWORD,Wtx:DWORD,Wty:DWORD

    STRING szClassName,&quot;Prostart_Class&quot;

    SingleInstanceOnly ADDR szClassName

  ; --------------------------------------------
  ; register class name for CreateWindowEx call
  ; --------------------------------------------
    invoke RegisterWinClass,ADDR WndProc,ADDR szClassName,
                       hIcon,hCursor,COLOR_BTNFACE+1

    mov Wwd, 300
    mov Wht, 200
    invoke TopXY,Wwd,sWid
    mov Wtx, eax
    invoke TopXY,Wht,sHgt
    mov Wty, eax

    invoke CreateWindowEx,WS_EX_LEFT or WS_EX_ACCEPTFILES,
                          ADDR szClassName,
                          ADDR szDisplayName,
                          WS_OVERLAPPED or WS_SYSMENU,
                          Wtx,Wty,Wwd,Wht,
                          NULL,NULL,
                          hInstance,NULL
    mov hWnd,eax

  ; ---------------------------
  ; macros for unchanging code
  ; ---------------------------
    DisplayMenu hWnd,600
    DisplayWindow hWnd,SW_SHOWNORMAL

    call MsgLoop
    ret

Main endp

; #########################################################################

RegisterWinClass proc lpWndProc:DWORD, lpClassName:DWORD,
                      Icon:DWORD, Cursor:DWORD, bColor:DWORD

    LOCAL wc:WNDCLASSEX

    mov wc.cbSize,         sizeof WNDCLASSEX
    mov wc.style,          CS_BYTEALIGNCLIENT or \
                           CS_BYTEALIGNWINDOW
    m2m wc.lpfnWndProc,    lpWndProc
    mov wc.cbClsExtra,     NULL
    mov wc.cbWndExtra,     NULL
    m2m wc.hInstance,      hInstance
    m2m wc.hbrBackground,  bColor
    mov wc.lpszMenuName,   NULL
    m2m wc.lpszClassName,  lpClassName
    m2m wc.hIcon,          Icon
    m2m wc.hCursor,        Cursor
    m2m wc.hIconSm,        Icon

    invoke RegisterClassEx, ADDR wc

    ret

RegisterWinClass endp

; ########################################################################

MsgLoop proc

  ; ------------------------------------------
  ; The following 4 equates are available for
  ; processing messages directly in the loop.
  ; m_hWnd - m_Msg - m_wParam - m_lParam
  ; ------------------------------------------

    LOCAL msg:MSG

    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

MsgLoop endp

; #########################################################################

WndProc proc hWin   :DWORD,
             uMsg   :DWORD,
             wParam :DWORD,
             lParam :DWORD

    LOCAL var    :DWORD
    LOCAL caW    :DWORD
    LOCAL caH    :DWORD
    LOCAL Rct    :RECT
    LOCAL buffer1[128]:BYTE  ; these are two spare buffers
    LOCAL buffer2[128]:BYTE  ; for text manipulation etc..
    LOCAL szDropFileName[260]:BYTE

    .if uMsg == WM_COMMAND
    ;======== toolbar commands ========
        .if wParam == 50
            jmp b1

        .elseif wParam == 51
            invoke mciSendString, ADDR play, ADDR mci3,0,0
        .elseif wParam == 52
            invoke mciSendString, ADDR stop, ADDR mci3,0,0

        .elseif wParam == 53
            lea eax, szFileName
            invoke MessageBox,hWin,eax,
                              ADDR szDisplayName,MB_OK

;------------

.elseif wParam==ButtonID
invoke InvalidateRect, hWin, NULL, TRUE
call curpos
call goforward

.elseif wParam==ButtonID2
invoke InvalidateRect, hWin, NULL, TRUE
call curpos
call goback

;------------

.elseif wParam==ButtonID3

invoke mciSendString, ADDR stop, ADDR mci3,0,0
invoke mciSendString, ADDR close, ADDR mci3,0,0
invoke KillTimer, hWin, 1

.elseif wParam==ButtonID4
invoke mciSendString, ADDR stop, ADDR mci3,0,0
invoke mciSendString, ADDR close, ADDR mci3,0,0
invoke InvalidateRect, hWin, NULL, TRUE
jmp abspielen
        .endif

    ;======== menu commands ========

        .if wParam == 1001

   b1: invoke mciSendString, ADDR stop, ADDR mci3,0,0
    invoke mciSendString, ADDR close, ADDR mci3,0,0

          ; --------------------------------------
          ; szFileName is defined in Filedlgs.asm
          ; --------------------------------------
            mov szFileName[0],0     ; set 1st byte to zero
            invoke GetFileName,hWin,SADD(&quot;Open A File&quot;),
                                    SADD(&quot;mp3 Audioformat&quot;,0,&quot;*.mp3&quot;,0,&quot;wma Audioformat&quot;,0,&quot;*.wma&quot;,0,&quot;PCM/wave-Audio .wav&quot;,0,&quot;*.wav&quot;,0,&quot;MIDI-Dateien .mid&quot;,0,&quot;*.mid&quot;,0, &quot;MPG-Filme&quot;,0,&quot;*.mpg&quot;,0,&quot;AVI-Filme&quot;,0,&quot;*.avi&quot;,0,&quot;alle Dateien&quot;,0,&quot;*.*&quot;,0) ; 
            cmp szFileName[0],0     ; zero if cancel pressed in dlgbox
            je @F

abspielen:  
            mov open1[5],0       ;open ,0 und nicht weiter, string leeren
            invoke GetShortPathName, ADDR szFileName, ADDR filename, 255

Start: invoke InvalidateRect, hWin, NULL, TRUE

  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 MessageBox,hWin,ADDR fehler,ADDR szDisplayName,MB_OK or MB_ICONERROR

               ok: invoke SetTimer, hWin, 1,sec, 0
               call getlength

            @@:
.elseif wParam == 1002
          ; --------------------------------------
          ; szFileName is defined in Filedlgs.asm
          ; --------------------------------------
            mov szFileName[0],0     ; set 1st byte to zero
            invoke SaveFileName,hWin,SADD(&quot;Save File As ...&quot;),
                                     SADD(&quot;All files&quot;,0,&quot;*.*&quot;,0,0)
            cmp szFileName[0],0     ; zero if cancel pressed in dlgbox
            je @F
          ; ---------------------------------
          ; perform your file save code here
          ; ---------------------------------
            invoke MessageBox,hWin,ADDR fehler,ADDR szDisplayName,MB_OK
            @@:

        .endif

        .if wParam == 1010
            invoke SendMessage,hWin,WM_SYSCOMMAND,SC_CLOSE,NULL

        .elseif wParam == 1900
            ShellAboutBox hWin,hIcon,\
                &quot;About nativeConny#Windows Application&quot;,\
                &quot;nativeConny Medienplayer&quot;,13,10,&quot;Copyright © C. M. Obrecht, 2007&quot;, 13,10,13,10,&quot;100% native opcodes /win32API, 100% Assembler pure and symply (-:&quot;
        .endif
;====== end menu commands ======

    .elseif uMsg == WM_DROPFILES
        invoke DragQueryFile,wParam,0,ADDR szFileName,sizeof szFileName  ; war szDropFileName
      invoke mciSendString, ADDR stop, ADDR mci3,0,0
    invoke mciSendString, ADDR close, ADDR mci3,0,0

        jmp abspielen

;------------trackbar messages--------------
.elseif uMsg==WM_HSCROLL                      

invoke SendMessage, hwndTrack, TBM_GETPOS, TRUE, NULL

cmp eax, 100
je v100
cmp eax, 91
je v90
cmp eax, 80
je v80
cmp eax, 81
je v80
cmp eax, 82
je v80
cmp eax, 71
je v70
cmp eax, 69
je v70
cmp eax, 72
je v70
cmp eax, 60
je v60
cmp eax, 59
je v60
cmp eax, 58
je v60
cmp eax, 52
je v50
cmp eax, 54
je v50
cmp eax, 40
je v40
cmp eax, 30
je v30
cmp eax, 31
je v30
cmp eax, 32
je v30
cmp eax, 20
je v20
cmp eax, 10
je v10
cmp eax, 0
je v0
jmp vkein
v100: invoke mciSendString, addr vol100, 0, 0, 0
jmp vkein
v90: invoke mciSendString, addr vol90, 0, 0, 0
jmp vkein
v80: invoke mciSendString, addr vol80, 0, 0, 0
jmp vkein
v70: invoke mciSendString, addr vol70, 0, 0, 0
jmp vkein
v60: invoke mciSendString, addr vol60, 0, 0, 0
jmp vkein
v50: invoke mciSendString, addr vol50, 0, 0, 0
jmp vkein
v40: invoke mciSendString, addr vol40, 0, 0, 0
jmp vkein
v30: invoke mciSendString, addr vol30, 0, 0, 0
jmp vkein
v20: invoke mciSendString, addr vol20, 0, 0, 0
jmp vkein
v10: invoke mciSendString, addr vol10, 0, 0, 0
jmp vkein
v0: invoke mciSendString, addr vol0, 0, 0, 0
vkein: nop

;---------------/trackbar messages-----------

    .elseif uMsg == WM_CREATE
            invoke Do_ToolBar,hWin

;-----------------------------------------------

invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR ButtonText1,\
                        WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,\
                        250,120,30,20,hWin,ButtonID,hInstance,NULL
		mov  hwndButton,eax

invoke CreateWindowEx,NULL, ADDR ButtonClassName2,ADDR ButtonText2,\
                        WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,\
                        8,120,30,20,hWin,ButtonID2,hInstance,NULL
		mov  hwndButton,eax

invoke CreateWindowEx,NULL, ADDR ButtonClassName3,ADDR ButtonText3,\
                        WS_CHILD or WS_VISIBLE or BS_PUSHBUTTON,\
                        8,30,32,20,hWin,ButtonID3,hInstance,NULL
		mov  hwndButton,eax

invoke CreateWindowEx,NULL, ADDR ButtonClassName4,ADDR ButtonText4,\
                        WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,\
                        47,120,30,20,hWin,ButtonID4,hInstance,NULL
		mov  hwndButton,eax

;------------------------trackbar-----------------------

invoke CreateWindowEx,NULL,addr TrackBarClassName, NULL, WS_CHILD or WS_VISIBLE,220,60,70,20,hWin, TrackBarID, hInstance, NULL
mov hwndTrack, eax
invoke SendMessage, hwndTrack, TBM_SETRANGE, tbnull, tbhundert
invoke SendMessage, hwndTrack, TBM_SETPOS, TRUE, tbsiebzig

;-------------------------------------------------------

invoke GetCL,1, ADDR szFileName
cmp szFileName, 0
je nocmd
jmp abspielen
nocmd:
    .elseif uMsg == WM_SYSCOLORCHANGE
        invoke Do_ToolBar,hWin

    .elseif uMsg == WM_SIZE
        invoke SendMessage,hToolBar,TB_AUTOSIZE,0,0

    .elseif uMsg == WM_PAINT
        invoke Paint_Proc,hWin

        return 0

    .elseif uMsg == WM_CLOSE

    .elseif uMsg == WM_DESTROY
    invoke mciSendString, ADDR stop, ADDR mci3,0,0
    invoke mciSendString, ADDR close, ADDR mci3,0,0
    invoke KillTimer, hWin, 1
        invoke PostQuitMessage,NULL
        return 0

.elseif uMsg==WM_TIMER
 .if wParam == 1

call curpos
mov zahlpos, eax
fild zahlpos
fidiv sec
fistp zahlpos                                       
invoke wsprintf, addr printcurpos, addr sformat, zahlpos
mov strlength, eax
invoke GetDC, hWin
mov devicecontext, eax
invoke TextOut,eax, 250, 100, addr printcurpos, strlength
;---------- length

            invoke TextOut,devicecontext, 90, 100, addr zeitstr, laenge

            invoke TextOut,devicecontext, 20, 100, addr sspielzeit, 10

            invoke TextOut,devicecontext, 120, 100, addr smin, 4

            invoke ReleaseDC, hWin, devicecontext
                                   ;--------- /length

.endif
    .endif

    invoke DefWindowProc,hWin,uMsg,wParam,lParam

    ret

WndProc endp

; ########################################################################

TopXY proc wDim:DWORD, sDim:DWORD

    shr sDim, 1      ; divide screen dimension by 2
    shr wDim, 1      ; divide window dimension by 2
    mov eax, wDim    ; copy window dimension into eax
    sub sDim, eax    ; sub half win dimension from half screen dimension

    return sDim

TopXY endp

; #########################################################################

Paint_Proc proc hWin:DWORD

    LOCAL hDC      :DWORD
    LOCAL btn_hi   :DWORD
    LOCAL btn_lo   :DWORD
    LOCAL Rct      :RECT
    LOCAL Ps       :PAINTSTRUCT

    invoke BeginPaint,hWin,ADDR Ps
    mov hDC, eax

            invoke TextOut,hDC, 175, 62, addr lautst, 7

  ; ----------------------------------------

    invoke GetSysColor,COLOR_BTNHIGHLIGHT
    mov btn_hi, eax

    invoke GetSysColor,COLOR_BTNSHADOW
    mov btn_lo, eax

  ; ----------------------------------------

    invoke EndPaint,hWin,ADDR Ps

    ret

Paint_Proc endp

; ########################################################################

getlength proc

invoke mciSendString, addr status, addr sBuffer,255, 0

invoke StrToInt, addr sBuffer
mov zahl, eax
fild zahl
fidiv basis
fidiv minuten
fist zahl
invoke wsprintf, addr zeitstr, addr sformat, zahl 
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

goforward proc
add eax, tensec
invoke wsprintf, addr sforward, addr sformat, eax
invoke mciSendString, addr forward, addr sforward,0,0
ret
goforward endp

goback proc
mov eax, zahlpos
sub eax, tensec
invoke wsprintf, addr sforward, addr sformat, eax
invoke mciSendString, addr forward, addr sforward,0,0
ret
goback endp

end start
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1454859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1454859</guid><dc:creator><![CDATA[c.m.obrecht]]></dc:creator><pubDate>Wed, 13 Feb 2008 07:02:54 GMT</pubDate></item><item><title><![CDATA[Reply to Windows - Kommandozeilenparameter unter Windows NT-Versionen on Wed, 13 Feb 2008 09:29:17 GMT]]></title><description><![CDATA[<p>Kenn mich mit ASM nicht aus, deshalb kann Dir nur ein Stichwort als Hilfestellung geben:<br />
Kann es sein, daß Du Unicode-Text unter WinNT/2k/XP bekommst statt ASCII unter Win98/Me? Und es deshalb Probleme gibt?</p>
<p>Ein weiterer Stichwort: GetCommandLine()</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1454924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1454924</guid><dc:creator><![CDATA[Mmacher]]></dc:creator><pubDate>Wed, 13 Feb 2008 09:29:17 GMT</pubDate></item><item><title><![CDATA[Reply to Windows - Kommandozeilenparameter unter Windows NT-Versionen on Wed, 13 Feb 2008 16:52:48 GMT]]></title><description><![CDATA[<p>Ach ja Unicode, daran habe ich jetzt gar nicht gedacht...Danke. Habe ein ähnliches Programm zuerst mit VB5 geschrieben, dort funktioniert es auf allen Versionen problemlos (wenn ich wüsste die das dort gelöst wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1455225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1455225</guid><dc:creator><![CDATA[c.m.obrecht]]></dc:creator><pubDate>Wed, 13 Feb 2008 16:52:48 GMT</pubDate></item><item><title><![CDATA[Reply to Windows - Kommandozeilenparameter unter Windows NT-Versionen on Fri, 15 Feb 2008 08:47:21 GMT]]></title><description><![CDATA[<p>...Unicode kann fast nicht sein, ist mir eingefallen; die MessageBox welche den Dateinamen der geöffneten Datei enthält zeigt ganz normal den Dateinamen, offensichtlich wird er schon übergeben (denke nicht dass ohne Unicode-Kompilierung automatisch die Unicode-Messagebox erscheinen kann?).<br />
Die exe ist hier zu finden: [url]<a href="http://rebenstudio-it.ch/downloads/nativeConnyASM.exe" rel="nofollow">http://rebenstudio-it.ch/downloads/nativeConnyASM.exe</a> [/url]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456312</guid><dc:creator><![CDATA[C. M. Obrecht]]></dc:creator><pubDate>Fri, 15 Feb 2008 08:47:21 GMT</pubDate></item><item><title><![CDATA[Reply to Windows - Kommandozeilenparameter unter Windows NT-Versionen on Fri, 15 Feb 2008 10:54:20 GMT]]></title><description><![CDATA[<p>Ist das ein GUI-Programm mit WinMain() oder ein Konsolen-Programm main()?</p>
<p>Für WinMain() <a href="http://msdn2.microsoft.com/en-us/library/ms633559.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms633559.aspx</a> gibts den Übergabeparameter <em>LPSTR lpCmdLine</em>. Gemäß Doku ist das ganz eindeutig ANSI-Text und kein Unicode (hab mich also geirrt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> ).</p>
<p>Da ich kein WinMain() in Deinem Source gefunden habe (sorry, bin kein ASM-Freak), muß ich davon ausgehen, daß Du main() mit den Übergabeparametern argc und argv verwenden müßtest.<br />
Andererseits finde ich diese Variablennamen auch nicht Ihrem Source <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Ist es so? Wenn ja, was liefern diese für Werte?</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456401</guid><dc:creator><![CDATA[Mmacher]]></dc:creator><pubDate>Fri, 15 Feb 2008 10:54:20 GMT</pubDate></item><item><title><![CDATA[Reply to Windows - Kommandozeilenparameter unter Windows NT-Versionen on Sat, 16 Feb 2008 19:09:19 GMT]]></title><description><![CDATA[<p>Es ist ein GUI-Programm; in ASM gibt es keine WinMain-Funktion, die Parameter werden mit Funktionen (und einem Makro glaube ich, wie der funktioniert weiss ich nicht) geholt. Kannst ja die .exe runterladen.<br />
Komischerweise wird der Dateiname ja übergeben da er in der MessageBox steht, doch wieso wird er von der mciSendString oder GetShortPathName nicht richtig bearbeitet? Komisch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457233</guid><dc:creator><![CDATA[C.m.obrecht]]></dc:creator><pubDate>Sat, 16 Feb 2008 19:09:19 GMT</pubDate></item><item><title><![CDATA[Reply to Windows - Kommandozeilenparameter unter Windows NT-Versionen on Fri, 22 Feb 2008 08:22:40 GMT]]></title><description><![CDATA[<p>Nun habe ich getMciErrorString ausgewertet, in der MessageBox erscheint nun die Meldung der MCI. Beim Versuch eine Datei mit dem Programm zu öffnen erscheint nun &quot;Fehler beim Öffnen von MCI&quot; (und danach lässt sich auch keine Datei abspielen, erscheint immer &quot;Gerät ist nicht geöffnet oder wird von MCI nicht erkannt). Nicht sehr aussagekräftige Mitteilung aber vieleicht hilft es etwas weiter?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1460720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1460720</guid><dc:creator><![CDATA[C.M.Obrecht]]></dc:creator><pubDate>Fri, 22 Feb 2008 08:22:40 GMT</pubDate></item></channel></rss>