Français
Stammtisch & le café

Frage: seulement qui Callback gemerkt - stimmt cela wirklich?

 
allô gens...

und dir um [...] .
ici steht folgendes:



The fix added a check to lac si le address specified dans le WM_TIMER message quoi registered as a call-back before taking le branch.


je n'en sais rien, si je dans dem Artikel quelque chose faux verstanden ou bien überlesen habe, mais pour mich est cela folgendes:
qui Callback wird par SetTimer registriert. Beim Aufruf de SetTimer merkt sich qui Aufrufende Prozess qui Adresse qui Callbackfunktion. Trifft une Timmermessage un, wird eh bien simple nahgesehen, si qui Prozess qui den Callback effectuer soll sich auparavant qui Adresse gemerkt hat - ist ca pas qui le cas, venez qui Timernachricht de einem anderen Prozess.
pourquoi funktioniert ensuite mais cela pas?
KompilierenMarqueSéparation
Def @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


KompilierenMarqueSéparation
Def @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
Déclarer Button&,TIMER_ID&,Button2&,Fenster&,la fenêtre$,PR_ADDR&,PR_ADDR$,Rück&,FH&
Déclarer AHRückgabe&,AHGETERROR_Buffer#,AHGETERROR_Buffer$,Zähler&
Claire TIMER_ID&
Windowstyle 31+512
Titre de la fenêtre Minuteur senden
Fenêtre 0,0-640,440
Usermessages $10
Laisser Button&=@CreateButton(%HWND,Minuteur mettons,20,200,200,30)
Laisser Button2&=@CreateButton(%HWND,Minuteur posten,20,250,200,30)
LET FH&=@FindWindow(Minuteur empfangen)
Laisser la fenêtre$=@Contribution$(Fensterhandle eingeben:,Handle eines Fensters?,@STR$(FH&))
LEt Fenster&=@VAL(la fenêtre$)

IF la fenêtre$<>

    LET PR_ADDR$=@Contribution$(Prozeduradresse eingeben:,Adresse qui TimerProc?,@STR$(@ProcAddr(TimerProc,4)))

    IF PR_ADDR$<>

        LET PR_ADDR&=@VAL(PR_ADDR$)

        Tandis que %UMESSAGE<>$10

            Waitinput
            LET TIMER_ID&=999

            IF @ButtonClicked(Button&)

                CLS
                Localiser 0,0
                @SetLastError(0)
                LET RÜCK&=@SetTimer(%HWND,TIMER_ID&,60000,PR_ADDR&)
                Laisser AHRückgabe&=@GetLastError()
                Fehlercode_bestimmen
                Imprimer AHGETERROR_Buffer$
                @SetLastError(0)
                LET RÜCK&=@SetTimer(Fenster&,TIMER_ID&,1000,PR_ADDR&)
                Laisser AHRückgabe&=@GetLastError()
                Fehlercode_bestimmen
                Imprimer AHGETERROR_Buffer$

            Elseif @ButtonClicked(Button&)

                @Poster un message(Fenster&,$113,TIMER_ID&,PR_ADDR&)

            endif

        Wend

        IF TIMER_ID&<>0

            @KillTimer(Fenster&,TIMER_ID&)
            @KillTimer(%HWND,TIMER_ID&)

        endif

    Endif

endif

Fin

Proc TimerProc

    Paramètres FensterHandle&,T_Message&,T_ID&,SYS_TIME&
    LET T_ID&=TIMER_ID&
    Color 12,15
    Localiser 3,0
    LET Zähler&=Zähler&+1
    Imprimer Minuteur arrivé: +@STR$(FensterHandle&)+    +@STR$(T_ID&)+    +@STR$(SYS_TIME&)+    +@STR$(Zähler&)+@Space$(20)

ENDPROC

Proc Fehlercode_bestimmen

    DIM AHGETERROR_Buffer#,32000
    @AHFormatMessage($1000,0,AHRückgabe&,0,AHGETERROR_Buffer#,32000,0) Wandelt Fehlercode dans Landesspezifische Message um.
    Laisser AHGETERROR_Buffer$=@TRIM$(@STRING$(AHGETERROR_Buffer#,0))
    Dispose AHGETERROR_Buffer#

ENDPROC


Verschweigt là Microsoft quoi? (gilt pour WindowsXP SP2, Windows2000 SP4)
 
09.09.2006  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

780 Views

Untitledvor 0 min.
Axel Berse07.11.2023
H.Brill26.01.2023
Ernst02.03.2015
gerd12.01.2013

Themeninformationen

cet Thema hat 1 participant:

unbekannt (1x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie