| |
|
|
| ¡Hola Personas...
Lo va en [...] . Hier es folgendes:
The fix added a check to see if the address specified en the WM_TIMER mensaje qué registered as a call-back before taking the branch.
Keine Idea, si Yo en el Artikel algo falso verstanden oder überlesen habe, aber para mich heißt el folgendes: Der Callback se por SetTimer registriert. Beim Aufruf de SetTimer merkt se el Aufrufende Prozess el Adresse el Callbackfunktion. Trifft una Timmermessage una, se nun simplemente nahgesehen, si el Prozess el el Callback ausführen se se vorher el Adresse gemerkt ha - es esto no es el Fall, kommt el Timernachricht de una otro Prozess. ¿Por qué funktioniert entonces aber el no? KompilierenMarcaSeparaciónDef @SetTimer(4) !USER32,SetTimer
Def @KillTimer(2) !USER32,KillTimer
DEF @GetDlgCtrlID(1) !USER32,GetDlgCtrlID
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
Declare Button&,TIMER_ID&,Zähler&
Clear TIMER_ID&
Windowstyle 31+512
WindowTitle Timer empfangen
Window 0,0-640,440
Usermessages $10
Let Button&=@CreateButton(%HWND,Timer setzen,20,200,200,30)
Print Handle des Hauptfensters: +@STR$(%HWND)
Print Adresse der Prozedur: +@STR$(@ProcAddr(TimerProc,4))
While %UMESSAGE<>$10
Waitinput
IF @ButtonClicked(Button&)
Enablewindow Button&,0
LET TIMER_ID&=999
@SetTimer(%HWND,TIMER_ID&,60000,@ProcAddr(TimerProc,4))
endif
wend
IF TIMER_ID&<>0
@KillTimer(%HWND,TIMER_ID&)
endif
End
Proc TimerProc
Parameters FensterHandle&,T_Message&,T_ID&,SYS_TIME&
Color 12,15
Locate 3,0
LET Zähler&=Zähler&+1
Print Timer angekommen: +@STR$(T_ID&)+ +@STR$(SYS_TIME&)+ +@STR$(Zähler&)+@Space$(20)
ENDPROC
KompilierenMarcaSeparaciónDef @SetTimer(4) !USER32,SetTimer
Def @KillTimer(2) !USER32,KillTimer
DEF @GetDlgCtrlID(1) !USER32,GetDlgCtrlID
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
Def @GetLastError(0) !KERNEL32,GetLastError
Def @SetLastError(1) !KERNEL32,SetLastError
DEF @AHFormatMessage(7) !KERNEL32,FormatMessageA
Declarar Button&,TIMER_ID&,Button2&,Fenster&,Ventana$,PR_ADDR&,PR_ADDR$,Rück&,FH&
Declarar AHRückgabe&,AHGETERROR_Buffer#,AHGETERROR_Buffer$,Zähler&
Claro TIMER_ID&
Windowstyle 31+512
Título de la ventana Temporizador senden
Ventana 0,0-640,440
Usermessages $10
Let Button&=@CreateButton(%HWND,Temporizador conjunto,20,200,200,30)
Let Button2&=@CreateButton(%HWND,Temporizador puesto,20,250,200,30)
LET FH&=@FindWindow(Temporizador empfangen)
Let Ventana$=@Entrada$(Fensterhandle eingeben:,Handle uno Fensters?,@STR$(FH&))
LEt Fenster&=@VAL(Ventana$)
IF Ventana$<>
LET PR_ADDR$=@Entrada$(Prozeduradresse eingeben:,Adresse el TimerProc?,@STR$(@ProcAddr(TimerProc,4)))
IF PR_ADDR$<>
LET PR_ADDR&=@VAL(PR_ADDR$)
Mientras que %UMESSAGE<>$10
Waitinput
LET TIMER_ID&=999
IF @ButtonClicked(Button&)
CLS
Localizar 0,0
@SetLastError(0)
LET RÜCK&=@SetTimer(%HWND,TIMER_ID&,60000,PR_ADDR&)
Let AHRückgabe&=@GetLastError()
Fehlercode_bestimmen
Imprimir AHGETERROR_Buffer$
@SetLastError(0)
LET RÜCK&=@SetTimer(Fenster&,TIMER_ID&,1000,PR_ADDR&)
Let AHRückgabe&=@GetLastError()
Fehlercode_bestimmen
Imprimir AHGETERROR_Buffer$
Elseif @ButtonClicked(Button&)
@PostMessage(Fenster&,$113,TIMER_ID&,PR_ADDR&)
endif
wend
IF TIMER_ID&<>0
@KillTimer(Fenster&,TIMER_ID&)
@KillTimer(%HWND,TIMER_ID&)
endif
Endif
endif
End
Proc TimerProc
Parámetros FensterHandle&,T_Message&,T_ID&,SYS_TIME&
LET T_ID&=TIMER_ID&
Color 12,15
Localizar 3,0
LET Zähler&=Zähler&+1
Imprimir Temporizador angekommen: +@STR$(FensterHandle&)+ +@STR$(T_ID&)+ +@STR$(SYS_TIME&)+ +@STR$(Zähler&)+@Espacio$(20)
ENDPROC
Proc Fehlercode_bestimmen
DIM AHGETERROR_Buffer#,32000
@AHFormatMessage($1000,0,AHRückgabe&,0,AHGETERROR_Buffer#,32000,0) Wandelt Fehlercode en Landesspezifische Message en.
Let AHGETERROR_Buffer$=@TRIM$(@STRING$(AHGETERROR_Buffer#,0))
Disponer AHGETERROR_Buffer#
ENDPROC
Verschweigt como Microsoft qué? (gilt para WindowsXP SP2, Windows2000 SP4) |
|
|
| |
|
|