Warum funktioniert das unter NT4.0 aber nicht unter XP Pro?



  • Hallo,

    Ich habe unter Win NT4.0 ein Taskbar Programm geschrieben das wunderbar funktioniert.
    Es sitzt am oberen Bildschirmrand und erscheint wenn man mit der Maus ganz nach oben fährt.
    Wirklich simpel.

    Leider erscheint unter Windows XP Pro schon bei Programm Start ein GPF. Kann das aber nicht näher verfolgen, da
    ich nur unter Win NT4.0 arbeite.
    Vielleicht kann mir jemand helfen?

    Hier ist der code:

    .data?
    
    hInstance			dd ?
    CommandLine			dd ?
    hWnd				dd ?
    
    hIcon		dd ?
    hTimer		dd ?
    hMenu		dd ?
    hBOOL		dd ?
    lngWidth		dd ?
    
    .code
    WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    	;/* Local variables */
    	LOCAL point:POINT
    	LOCAL rect:RECT
    
    	;/*Note:  used  the style-manager addin (Radasm != default ) */
    
    	mov		eax,uMsg
    	.if eax==WM_INITDIALOG
    		push		hWin
    		pop		hWnd
    
    		;/* our application icon */
    		invoke LoadIcon,hInstance,500
    		mov hIcon,eax
    		invoke SendMessage,hWin,WM_SETICON,NULL,hIcon
    
    		;/* creating the timer, every half-second */
    		invoke SetTimer,hWin,hTimer,100, NULL	
    
    		;/* Get the screen width */
    		invoke GetWindowRect,NULL,addr rect
    		mov edx,rect.right
    		mov lngWidth,edx		;/* Screenwidth now stored in our variable */
    		;/* Set our dialog position and width */
    		invoke SetWindowPos,hWin,HWND_TOPMOST,0,0,addr lngWidth,35,SWP_SHOWWINDOW or SWP_NOACTIVATE
    
    		;/* creating our simple menu  */
    		invoke CreatePopupMenu
    		mov hMenu,eax
    		invoke AppendMenu, hMenu, MF_STRING, IDM_SETTINGS, SADD("Settings")
    		invoke AppendMenu, hMenu, MF_STRING, IDM_ABOUT, SADD("About")
    		invoke AppendMenu, hMenu, MF_SEPARATOR, 0, 0
    		invoke AppendMenu, hMenu, MF_STRING, IDM_QUIT, SADD("Quit")
    
    	.elseif eax==WM_TIMER
    		;/* Get user mouse position */
    		invoke GetCursorPos,addr point
    		mov ebx, point.y	
    		.if ebx == 0 	;/*if user mouse is on Screentop then show our taskbar */
    			invoke SetWindowPos,hWin,HWND_TOPMOST,0,0,addr lngWidth,35,SWP_SHOWWINDOW or SWP_NOACTIVATE
    			mov hBOOL, 0
    		.elseif ebx>35 ;/* else we hide the taskbar */
    			.if hBOOL != 1		;/* using a simple boolean as a trick to prevent infinite loop */
    				invoke SetWindowPos,hWin,HWND_TOPMOST,0,0,addr lngWidth,35,SWP_HIDEWINDOW
    				mov hBOOL, 1
    			.endif
    		.endif	
    
    	.elseif eax==WM_COMMAND
    		mov		eax,wParam
    		and		eax,0FFFFh
    		.if eax==IDM_SETTINGS	
    		.elseif eax==IDM_ABOUT
    			fn MessageBox,hWin,"This is a little taskbar demo - created for fun.","ASMbar by Me",MB_OK or MB_ICONINFORMATION
    		.elseif eax==IDM_QUIT
    			invoke SendMessage,hWin,WM_CLOSE,0,0
    		.endif
    
    	.elseif eax==WM_LBUTTONDOWN
    		;/* drag taskbar */
            	mov eax,lParam
            	invoke PostMessage,hWin,WM_NCLBUTTONDOWN,HTCAPTION,eax
    
        	.elseif eax==WM_CONTEXTMENU   
        		;/* user right clicks somewhere on the taskbar --> popupmenu */ 
            	mov eax, lParam
            	and eax, 0FFFFh
            	mov ebx, lParam
            	shr ebx, 16
            	invoke TrackPopupMenu, hMenu, TPM_LEFTALIGN, eax, ebx, 0, hWin, 0
    
    	.elseif eax==WM_CLOSE
    		;/* kill timer on exit */
    		invoke KillTimer, hWin, hTimer
    		invoke DestroyWindow,hWin
    	.elseif uMsg==WM_DESTROY
    		invoke PostQuitMessage,NULL
    	.else
    		invoke DefWindowProc,hWin,uMsg,wParam,lParam
    		ret
    	.endif
    	xor    eax,eax
    	ret
    
    WndProc endp
    

Anmelden zum Antworten