ΠΠ°ΠΊΡΠΎΡΡΠ΅Π΄ΡΡΠ²Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π² Windows
ΠΠ°ΠΊΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ (ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌ) Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ°ΡΡΠΎΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΎ ΠΈΠΌΡ ΠΈ ΠΊΠΎΡΠΎΡΡΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΡΠ΅ΡΡΡ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π²ΡΡΡΠ΅ΡΠ°Π΅Ρ ΡΡΠΎ ΠΈΠΌΡ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΊΡΠΎΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΎΠΉ MACRO ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ENDM. Π ΡΠ°ΠΊΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ API ΡΡΠ½ΠΊΡΠΈΠΈ SendMessage Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ» Π, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° ANSI-ΡΡΠ°Π½Π΄Π°ΡΡ, ΡΠΈΠΌΠ²ΠΎΠ» @ Π² ΡΠΎΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΈ ΡΠΈΡΠ»ΠΎ N Π² ΠΊΠΎΠ½ΡΠ΅, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΉ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠ°ΠΊΡΠΎΡΡΠ΅Π΄ΡΡΠ²Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π² Windows (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
1. Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
1. Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
2. ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
3. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΠΌΠ°ΠΊΡΠΎΡΡΠ΅Π΄ΡΡΠ².
4. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ API-ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
4.1 Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΈ ΡΡΡΡΠΊΡΡΡ.
4.2 Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ API-ΡΡΠ½ΠΊΡΠΈΠΉ.
4.3 ΠΡΠ½ΠΎΠ²Ρ Π²ΡΠ·ΠΎΠ²Π° API-ΡΡΠ½ΠΊΡΠΈΠΉ
5. ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°
5.1 ΠΠΈΡΡΠΈΠ½Π³
5.2 Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
6. ΠΡΠ²ΠΎΠ΄
2. ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π¦Π΅Π»ΡΡ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° 32-Π±ΠΈΡΠ½ΠΎΠΌ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² ΠΠ‘ WINDOWS.
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΎΡΡΠ΅ΡΠ΅ ΠΎΡΡΠ°ΠΆΠ΅Π½Π° ΡΠ°Π±ΠΎΡΠ° ΠΌΠ°ΠΊΡΠΎΡΡΠ΅Π΄ΡΡΠ² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π² WINDOWS. ΠΠ° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡΡΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΌΠ°ΠΊΡΠΎΡΡΠ΅Π΄ΡΡΠ².
ΠΠ΅ΡΠ²ΡΠΉ Π²ΠΎΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π΄Π°Π΅Ρ ΡΠ΅Π±Π΅ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ, Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠ»ΡΡΠ°Π²ΡΠΈΠΉ ΠΎΠ± Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅, — Π° Π·Π°ΡΠ΅ΠΌ ΠΎΠ½, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, Π½ΡΠΆΠ΅Π½? ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ ΠΏΠΈΡΡΡ Π½Π° C/C++, Delphi ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ? ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π° Π‘, Π½ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠ·ΡΠΊ, Π΄Π°ΠΆΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅ΡΠ΅Π½Π΄ΠΎΠ²Π°ΡΡ Π½Π° ΡΠΎ, ΡΡΠΎΠ±Ρ Π½Π° Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π²ΡΠ΅.
ΠΡΠ°ΠΊ, Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ ΠΏΠΈΡΡΡ:
Β· Π²ΡΠ΅, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ: ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ ΠΈΠ³Ρ, ΡΠ΄ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ°ΡΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ;
Β· Π²ΡΠ΅, ΡΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌΠΈ: Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ Π½Π°ΠΏΡΡΠΌΡΡ Ρ ΠΏΠΎΡΡΠ°ΠΌΠΈ, Π·Π²ΡΠΊΠΎΠ²ΡΠΌΠΈ ΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΏΠ»Π°ΡΠ°ΠΌΠΈ;
Β· Π²ΡΠ΅, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°: ΡΠ΄ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ, DPMI-ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π»ΡΠ±ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π² Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ;
Β· Π²ΡΠ΅, ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ: Π²ΠΈΡΡΡΡ ΠΈ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΡ, Π·Π°ΡΠΈΡΡ ΠΎΡ Π½Π΅ΡΠ°Π½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ°, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΎΠ±Ρ ΠΎΠ΄ΡΡΠΈΠ΅ ΡΡΠΈ Π·Π°ΡΠΈΡΡ, ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π·Π°ΡΠΈΡΠ°ΡΡΠΈΠ΅ΡΡ ΠΎΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ;
Β· ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅. Π‘ΡΠΎΠΈΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠΌ ΠΏΠΎΠ±Π»ΠΈΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΠΈΠ· ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΠΈΡΡΡ Π½Π° ΡΠ·ΡΠΊΠ°Ρ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π»ΡΡΡΠ΅, ΠΏΡΠΎΡΠ΅ ΠΈ Π±ΡΡΡΡΠ΅Π΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅.
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π° ΡΠ·ΡΠΊΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°. ΠΠΎΡΡΠΎΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Windows Π½Π°Π³Π»ΡΠ΄Π½Π΅Π΅ ΠΈΠ·ΡΡΠ°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡ ΡΠ·ΡΠΊ.
ΠΠ΄Π½ΠΎ ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΌΠΎΡΠ½ΡΡ ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΡΡΠ΅Π΄ΡΡΠ² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° — ΠΌΠ°ΠΊΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ.
ΠΠ°ΠΊΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ (ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌ) Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ°ΡΡΠΎΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΎ ΠΈΠΌΡ ΠΈ ΠΊΠΎΡΠΎΡΡΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΡΠ΅ΡΡΡ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π²ΡΡΡΠ΅ΡΠ°Π΅Ρ ΡΡΠΎ ΠΈΠΌΡ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΊΡΠΎΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΎΠΉ MACRO ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ENDM.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: ΠΏΡΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΠΌΠ°ΠΊΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ hex2ascii, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΡΠ΅Π΅ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, Π½Π°Ρ ΠΎΠ΄ΡΡΠ΅Π΅ΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ AL, Π² ASCII-ΠΊΠΎΠ΄ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΉ ΡΠΈΡΡΡ:
hex2ascii macro
cmp al, 10
sbb al, 69h
das
endm
ΠΌΠ°ΠΊΡΠΎΡΡΠ΅Π΄Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ΅ΠΊΡΡ Π‘Π΅ΠΉΡΠ°Ρ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»ΠΎΠ²ΠΎ hex2ascii, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΈΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΈ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ°ΠΊΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ Π½Π° ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ΡΡ Π² ΠΌΠ°ΠΊΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ. Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΎΡΠΌΠΈΡΡ ΡΡΠΎΡ ΠΆΠ΅ ΡΡΠ°ΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° Π² Π²ΠΈΠ΄Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ CALL — Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π°, ΡΡΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°ΠΉΠΌΠ΅Ρ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠ΅ΡΡΠ°, Π½ΠΎ Π²Π°ΡΠΈΠ°Π½Ρ Ρ ΠΌΠ°ΠΊΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ°Π½Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π΅ΠΌ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π»ΠΈΡΠ½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ CALL ΠΈ RET. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ — Π½Π΅ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ². Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΠΌΠ°ΠΊΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ.
Π’ΡΠ°Π½ΡΠ»ΡΡΠΎΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ ΡΠ°ΡΡΠ΅ΠΉ — Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡΠ°, ΡΠΎΡΠΌΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΈ ΠΌΠ°ΠΊΡΠΎΠ°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° (ΡΠΈΡ. 1).
Π ΠΈΡ. 1. ΠΠ°ΠΊΡΠΎΠ°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π² ΠΎΠ±ΡΠ΅ΠΉ ΡΡ Π΅ΠΌΠ΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° TASM
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΎΡΡΠ΅Π΄ΡΡΠ² Π½Π΅ΡΠ²Π½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡΠΎΠΌ Π² Π΄Π²Π΅ ΡΠ°Π·Ρ (ΡΠΈΡ. 1).
ΠΠ° ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°Π·Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠ°Ρ ΠΌΠ°ΠΊΡΠΎΠ°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠΌ.
ΠΠ° Π²ΡΠΎΡΠΎΠΉ ΡΠ°Π·Π΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ, Π·Π°Π΄Π°ΡΠ΅ΠΉ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ ΡΠ΅ΠΊΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.
3. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΠΌΠ°ΠΊΡΠΎΡΡΠ΅Π΄ΡΡΠ²
3.1 ΠΡΠ΅Π²Π΄ΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ equ
ΠΡΠΎΡ ΠΏΡΠ΅Π²Π΄ΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°. ΠΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π² Ρ ΠΎΠ΄Π΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΡΡΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π²ΡΡΡΠ΅ΡΠΈΡΡΡ Π² ΡΠ΅Π»Π΅ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΌΠ°ΠΊΡΠΎΠ°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, ΠΈΠΌΠ΅Π½Π° ΠΌΠ΅ΡΠΎΠΊ, ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΈ ΡΡΡΠΎΠΊΠΈ Π² Π°ΠΏΠΎΡΡΡΠΎΡΠ°Ρ . ΠΠΎΡΠ»Π΅ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ ΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
3.2 Π‘ΡΡΡΠΊΡΡΡΠ° ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Π° STRUC ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π½ΠΎΡΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ Π² ΠΎΠ΄Π½ΠΎ ΡΠ΅Π»ΠΎΠ΅. ΠΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΠΎΠ»ΡΠΌΠΈ. ΠΠ½Π°ΡΠ°Π»Π΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ STRUC ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½ ΡΡΡΡΠΊΡΡΡΡ, Π·Π°ΡΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ < > ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π»ΡΠ±ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΡΠΊΡΡΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ:
STRUC COMPLEX
RE DD ?
IM DD ?
STRUC ENDS
…
;Π² ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ΅ Π΄Π°Π½Π½ΡΡ
COMP1 COMPLEX >
COMP2 COMPLEX >
3.3 Π£ΡΠ»ΠΎΠ²Π½ΠΎΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π£ΡΠ»ΠΎΠ²Π½ΠΎΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡΡ ΡΠΎΡ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΡΡΠ°ΡΡΠΎΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΡΠΈ Π²ΠΈΠ΄Π° ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π°)
IF Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
…
ENDIF
Π±)
IF Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
…
ELSE
…
ENDIF
Π²)
IF Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ 1
…
ELSEIF Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ 2
…
ELSEIF Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ 3
…
ELSE
…
ENDIF
Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ ΡΡΠΈΡΠ°Π΅ΡΡΡ
3.4 ΠΠ°ΠΊΡΠΎΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡ
1. ΠΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠ°Π·. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ°ΠΊΡΠΎΠ΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° REPT. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
A EQU 10
REPT 100
DB A
ENDM
ΠΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΎ 100 Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² DB 10.
2. ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Π° IRP.
IRP ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ,<οΏ½ΡΠΏΠΈΡΠΎΠΊ>
…
ENDM
ΠΠ»ΠΎΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
IRP REG,
PUSH REG
ENDM
ΠΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΡΠΎΠΊ:
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
PUSH ESI
PUSH EDI
4. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ API-ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
4.1 Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΈ ΡΡΡΡΠΊΡΡΡ
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ:
WM_SETFOCUS equ 7h — Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΡΠ»Π°Π΅ΠΌΠΎΠ΅ ΠΎΠΊΠ½Ρ, ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎ ΡΠΎΠΊΡΡ.
WM_DESTROY equ 2 — ΠΠ°Π²Π΅ΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
WM_CREATE equ 1 — Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΠΊΠ½ΠΎ.
WM_PAINT equ 0FH — ΠΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΎΠΊΠ½Π° ΠΈΠ· Π±ΡΡΠ΅ΡΠ°.
WM_COMMAND equ 111h — Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠ΅Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΊΠ½Π°, ΠΏΡΠΈ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΡ Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ, ΠΏΡΠ½ΠΊΡΠΎΠΌ ΠΌΠ΅Π½Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΡ Π°ΠΊΡΠ΅Π»Π΅ΡΠ°ΡΠΎΡΠ°.
WM_SETTEXT equ 0Ch — Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΏΠΎΡΡΠ»ΠΊΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΎΠΊΠ½Ρ ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΠΏΠ° ΠΎΠΊΠ½Π° (ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ — Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΊΠ½ΠΎΠΏΠΊΠ° — Π½Π°Π΄ΠΏΠΈΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅, ΠΎΠΊΠ½ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ — ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈ Ρ. Π΄.).
WM_GETTEXT equ 0Dh — ΠΠΎΡΡΠ»Π°Π΅ΡΡΡ ΠΎΠΊΠ½Ρ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ Π΄Π°Π½Π½ΡΠΌ ΠΎΠΊΠ½ΠΎΠΌ (ΡΡΡΠΎΠΊΠ° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π° ΠΈ Ρ. Π΄.).
Π‘ΡΠΈΠ»ΠΈ ΠΎΠΊΠ½Π°:
CS_VREDRAW equ 1h — ΠΠΎΡΡΠ»ΠΊΠ° WM_PAINT ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ.
CS_HREDRAW equ 2h — Π Π°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠΊΠ½Π°.
CS_GLOBALCLASS equ 4000h — ΠΠ»Π°ΡΡ ΠΎΠΊΠ½Π°.
WS_OVERLAPPEDWINDOW equ 000CF0000H — Π‘ΡΠΈΠ»Ρ ΠΎΠΊΠ½Π°.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ:
IDI_APPLICATION equ 32 512 — ΠΠΊΠΎΠ½ΠΊΠ°
IDC_ARROW equ 32 512 — ΠΡΡΡΠΎΡ
SW_SHOWNORMAL equ 1 — Π Π΅ΠΆΠΈΠΌ
ΠΏΠΎΠΊΠ°Π·Π° ΠΎΠΊΠ½Π°
Π‘ΡΡΡΠΊΡΡΡΡ:
WNDCLASS STRUC — ΠΠ»Π°ΡΡ ΠΎΠΊΠ½Π°
CLSSTYLE DD? -Π‘ΡΠΈΠ»Ρ ΠΎΠΊΠ½Π°
CLWNDPROC DD? — ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΎΠΊΠΎΠ½Π½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°
CLSCBCLSEX DD? — ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π΄Π»Ρ Π΄Π°Π½Π½ΡΡ
CLSCBWNDEX DD? — ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π΄Π»Ρ ΡΡΡΡΠΊΡΡΡ
CLSHINST DD? — ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ°
CLSHICON DD? — ΠΠΊΠΎΠ½ΠΊΠ°
CLSHCURSOR DD? — ΠΡΡΡΠΎΡ
CLBKGROUND DD? — Π€ΠΎΠ½
CLMENNAME DD? -ΠΠΌΡ ΠΎΠΊΠ½Π°
CLNAME DD? — ΠΠΌΡ ΠΊΠ»Π°ΡΡΠ°
WNDCLASS ENDS
PAINTSTR STRUC — ΠΠΊΡΠ°ΡΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ
hdc DD 0 — Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°
fErase DD 0 — Π‘ΡΠΈΡΠ°ΡΡ Π»ΠΈ ΡΠΎΠ½ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ΅?
left DD 0 — ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°
top DD 0 — ΠΠΊΠ½Π° Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
right DD 0 — ΠΡΠ°Π²Π°Ρ Π³ΡΠ°Π½ΠΈΡΠ°
bottom DD 0 — ΠΠΈΠΆΠ½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ°
fRes DD 0 — ΠΠ°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½ΠΎ Windows
fIncUp DD 0 — ΠΠ°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½ΠΎ Windows
Reserv DB 32 dup (0) — ΠΠ°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½ΠΎ Windows
PAINTSTR ENDS
MSGSTRUCT STRUC — Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
MSHWND DD? — Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠΊΠ½ΠΎ
MSMESSAGE DD? — Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
MSWPARAM DD? — ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
MSLPARAM DD? — ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
MSTIME DD? — ΠΡΠ΅ΠΌΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
MSPT DD? — ΠΠΎΠ·ΠΈΡΠΈΡ ΠΊΡΡΡΠΎΡΠ°
MSGSTRUCT ENDS
4.2 Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ API-ΡΡΠ½ΠΊΡΠΈΠΉ
SetFocus — Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΠΊΡΡ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ.
SendMessage — ΠΠΎΡΠ»Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Ρ.
CreateWindow — Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΠΊΠ½ΠΎ.
DefWindowProc — ΠΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΎΠΊΠ½Π°.
DispatchMessage — ΠΠ΅ΡΠ½ΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Windows Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠΌΡ ΠΎΠΊΠ½Ρ.
ExitProcess — ΠΠ°ΠΊΠΎΠ½ΡΠΈΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ (ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ).
GetMessage — ΠΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
GetModuleHandle — ΠΠΎΠ»ΡΡΠΈΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
LoadCursor — ΠΠ°Π³ΡΡΠ·ΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΠΊΡΡΡΠΎΡ ΠΈΠ»ΠΈ ΠΊΡΡΡΠΎΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π² ΡΠ°ΠΉΠ»Π΅ ΡΠ΅ΡΡΡΡΠΎΠ².
LoadIcon — ΠΠ°Π³ΡΡΠ·ΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ ΠΈΠ»ΠΈ ΠΈΠΊΠΎΠ½ΠΊΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π² ΡΠ°ΠΉΠ»Π΅ ΡΠ΅ΡΡΡΡΠΎΠ².
PostQuitMessage — ΠΠΎΡΠ»Π°ΡΡ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_QUIT.
RegisterClass — ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ ΠΎΠΊΠΎΠ½.
ShowWindow — ΠΠΎΠΊΠ°Π·Π°ΡΡ ΠΎΠΊΠ½ΠΎ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΠ°ΡΡΡ ΠΏΠΎΠΊΠ°Π·Π°.
TranslateMessage — Π’ΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ASCII-ΠΊΠΎΠ΄Ρ.
UpdateWindow — ΠΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π±ΠΎΡΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΠΊΠ½Π°.
BeginPaint — ΠΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WM_PAINT
EndPaint — Π£Π΄Π°Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ BeginPaint.
TextOut — ΠΡΠ²Π΅ΡΡΠΈ ΡΠ΅ΠΊΡΡ Π² ΠΎΠΊΠ½ΠΎ.
SetBkColor — Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ²Π΅Ρ ΡΠΎΠ½Π° Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠ΅ΠΊΡΡΠ°.
InvalidateRect — ΠΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠΊΠ½ΠΎ.
4.3 ΠΡΠ½ΠΎΠ²Ρ Π²ΡΠ·ΠΎΠ²Π° API-ΡΡΠ½ΠΊΡΠΈΠΉ
Π€ΡΠ½ΠΊΡΠΈΠΈ API Π² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΡΡ ΠΎΠΆΠΈΠΌ Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ Π² ΡΠ·ΡΠΊΠ°Ρ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² ΡΡΠ΅ΠΊ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ:
SendMessage (
__in HWND hWnd,
__in UINT Msg,
__in WPARAM wParam,
__in LPARAM lParam
);
Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π° Π² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΡΠ°Π±Π»ΠΎΠ½Ρ:
includelibuser32.lib
EXTERNSendMessageA@16:NEAR
TEXT DB 'ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡ', 0
HWNDEDT1 DWORD 0
;
;
PUSH OFFSET TEXT
PUSH 0
PUSH WM_SETTEXT
PUSH HWNDEDT1
CALL SendMessageA@16
Π ΡΠ°ΠΊΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ API ΡΡΠ½ΠΊΡΠΈΠΈ SendMessage Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ» Π, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° ANSI-ΡΡΠ°Π½Π΄Π°ΡΡ, ΡΠΈΠΌΠ²ΠΎΠ» @ Π² ΡΠΎΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΈ ΡΠΈΡΠ»ΠΎ N Π² ΠΊΠΎΠ½ΡΠ΅, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΉ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π°ΠΉΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΡΠ΅ΠΊ.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π΄Π»Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ API-ΡΡΠ½ΠΊΡΠΈΠΈ:
HWND WINAPI SetFocus (
__in_opt HWND hWnd
);
Π’ΠΈΠΏ: HWND
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠΊΠ½Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π²Π²ΠΎΠ΄ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ. ΠΡΠ»ΠΈ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°Π²Π΅Π½ NULL, Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ.
HWND WINAPI CreateWindow (
__in_opt LPCTSTR lpClassName,//ΡΡΡΠΎΠΊΠ°
__in_opt LPCTSTR lpWindowName,//ΠΈΠΌΡ ΠΎΠΊΠ½Π°
__in DWORD dwStyle,//ΡΡΠΈΠ»Ρ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
__in int x,//ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°
__in int y,//ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°
__in int nWidth, //ΡΠΈΡΠΈΠ½Π°
__in int nHeight, //Π²ΡΡΠΎΡΠ°
__in_opt HWND hWndParent, //ΠΎΠΊΠ½ΠΎ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
__in_opt HMENU hMenu, //ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΌΠ΅Π½Ρ
__in_opt HINSTANCE hInstance, //Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ
__in_opt LPVOID lpParam //ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ
);
LRESULT WINAPI DefWindowProc (
__in HWND hWnd, //Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠΊΠ½Π°
__in UINT Msg, //ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
__in WPARAM wParam, //Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
__in LPARAM lParam //Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
);
LRESULT WINAPI DispatchMessage (
__in const MSG *lpmsg //ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
);
VOID WINAPI ExitProcess (
__in UINT uExitCode //ΠΊΠΎΠ΄ Π²ΡΡ ΠΎΠ΄Π°
);
BOOL WINAPI GetMessage (
__out LPMSG lpMsg, //ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° MSG ΡΡΡΡΠΊΡΡΡΡ
__in_opt HWND hWnd, //Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠΊΠ½Π°
__in UINT wMsgFilterMin, // ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΈΠ· ΡΠ°ΠΌΡΡ Π½ΠΈΠ·ΠΊΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°
__in UINT wMsgFilterMax // ΡΠ΅Π»ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Ρ.
);
HMODULE WINAPI GetModuleHandle (
__in_opt LPCTSTR lpModuleName // ΠΈΠΌΡ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ (Π»ΠΈΠ±ΠΎ DLL ΠΈΠ»ΠΈ EXE-ΡΠ°ΠΉΠ»), Π΅ΡΠ»ΠΈ EXE ΡΠ°ΠΉΠ» ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°Π²Π΅Π½ NULL
);
HCURSOR WINAPI LoadCursor (
__in_opt HINSTANCE hInstance, //Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΌΠΎΠ΄ΡΠ»Ρ
__in LPCTSTR lpCursorName //ΠΈΠΌΡ ΡΠ΅ΡΡΡΡΠ° ΠΊΡΡΡΠΎΡΠ° Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ
);
HICON WINAPI LoadIcon (
__in_opt HINSTANCE hInstance,
__in LPCTSTR lpIconName //ΠΈΠΌΡ ΡΠ΅ΡΡΡΡΠ° ΠΈΠΊΠΎΠ½ΠΊΠΈ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ
);
VOID WINAPI PostQuitMessage (
__in int nExitCode //ΠΊΠΎΠ΄ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
);
ATOM WINAPI RegisterClass (
__in const WNDCLASS *lpWndClass //ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° WINDCLASS ΡΡΡΡΠΊΡΡΡΡ
);
BOOL WINAPI ShowWindow (
__in HWND hWnd, //Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠΊΠ½Π°
__in int nCmdShow //ΠΊΠ°ΠΊ ΠΎΠΊΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΊΡΠ°Π½Π΅
);
BOOL WINAPI TranslateMessage (
__in const MSG *lpMsg //ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° MSG ΡΡΡΡΠΊΡΡΡΡ
);
BOOL UpdateWindow (
__in HWND hWnd //ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΠΎΠΊΠ½Ρ, ΡΡΠΎΠ±Ρ Π±ΡΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡΡ
);
HDC BeginPaint (
__in HWND hwnd, //ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΠΎΠΊΠ½Ρ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ
__out LPPAINTSTRUCT lpPaint //ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° PAINTSTRUCT ΡΡΡΡΠΊΡΡΡΡ
);
BOOL EndPaint (
__in HWND hWnd, //Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠΊΠ½Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΎ
__in const PAINTSTRUCT *lpPaint // ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° PAINTSTRUCT ΡΡΡΡΠΊΡΡΡΡ
);
BOOL TextOut (
__in HDC hdc, //Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ²
__in int nXStart, //ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Π₯
__in int nYStart, //ΠΊΠΎΠΎΡΠ΄Π°Π½Π°ΡΠ° Y
__in LPCTSTR lpString, //ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΠΎΠΊΡ
__in int cchString //Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ
);
COLORREF SetBkColor (
__in HDC hdc, //Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ²
__in COLORREF crColor //Π½ΠΎΠ²ΡΠΉ ΡΠ²Π΅Ρ ΡΠΎΠ½Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ RGB ΠΌΠ°ΠΊΡΠΎΡ
);
BOOL InvalidateRect (
__in HWND hWnd, //Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠΊΠ½Π°
__in const RECT *lpRect, //ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° RECT ΡΡΡΡΠΊΡΡΡΡ
__in BOOL bErase //ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΡΠΎΠ½ Π²Π½ΡΡΡΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ
);
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π·Π°Π΄Π°ΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ. Π’Π°ΠΊ, ΡΡΡΡΠΊΡΡΡΠ΅:
typedef struct tagMSG { // msg
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠ΄:
MSGSTRUCT STRUC
MSHWND DD ?
MSMESSAGE DD ?
MSWPARAM DD ?
MSLPARAM DD ?
MSTIME DD ?
MSPT DD ?
MSGSTRUCT ENDS
typedef struct tagWNDCLASS {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS, *PWNDCLASS;
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠ΄:
WNDCLASS STRUC
CLSSTYLE DD ?
CLWNDPROC DD ?
CLSCBCLSEX DD ?
CLSCBWNDEX DD ?
CLSHINST DD ?
CLSHICON DD ?
CLSHCURSOR DD ?
CLBKGROUND DD ?
CLMENNAME DD ?
CLNAME DD ?
WNDCLASS ENDS
typedef struct tagPAINTSTRUCT { // ps
HDC hdc;
BOOL fErase;
RECT rcPaint;
BOOL fRestore;
BOOL fIncUpdate;
BYTE rgbReserved[32];
} PAINTSTRUCT;
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠ΄:
PAINTSTR STRUC
hdc DWORD 0
fErase DWORD 0
left DWORD 0
top DWORD 0
right DWORD 0
bottom DWORD 0
fRes DWORD 0
fIncUp DWORD 0
Reserv DB 32 dup (0)
PAINTSTR ENDS
5. ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°
5.1 ΠΠΈΡΡΠΈΠ½Π³:
Π€Π°ΠΉΠ» edit. inc:
; ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
WM_SETFOCUS equ 7h
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΎΠΊΠ½Π°
WM_DESTROY equ 2
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ ΡΠΎΠ΄Π°Π½ΠΈΠΈ ΠΎΠΊΠ½Π°
WM_CREATE equ 1
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π½Π° ΠΎΠΊΠ½Π΅
WM_COMMAND equ 111h
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π΅ ΠΏΠΎΡΠ»Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΡΠΎΠΊΡ
WM_SETTEXT equ 0Ch
WM_PAINT equ 0FH
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡΠΎΠΊΡ
WM_GETTEXT equ 0Dh
; ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ²Π΅ΡΠΎΠ²
RED equ 49
GREEN equ 106
BLUE equ 197
RGBW equ 195 shl 13
RGBT equ 0; ΡΠ΅ΡΠ½ΡΠΉ
; ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠΊΠ½Π°
CS_VREDRAW equ 1h
CS_HREDRAW equ 2h
CS_GLOBALCLASS equ 4000h
WS_OVERLAPPEDWINDOW equ 000CF0000H
STYLE equ CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS
; CS_HREDRAW equ 2h
BS_DEFPUSHBUTTON equ 1h
WS_VISIBLE equ 1 000 0000h
WS_CHILD equ 4 000 0000h
WS_BORDER equ 80 0000h
WS_TABSTOP equ 1 0000h
STYLBTN equ WS_CHILD + BS_DEFPUSHBUTTON + WS_VISIBLE + WS_TABSTOP
STYLEDT equ WS_CHILD + WS_VISIBLE + WS_BORDER + WS_TABSTOP
; ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΠΈΠΊΠΎΠ½ΠΊΠΈ
IDI_APPLICATION equ 32 512
; ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊΡΡΡΠΎΡΠ°
IDC_ARROW equ 32 512 ;
; ΡΠ΅ΠΆΠΈΠΌ ΠΏΠΎΠΊΠ°Π·Π° ΠΎΠΊΠ½Π° — Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ
SW_SHOWNORMAL equ 1
; ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ
EXTERN SetFocus@4:NEAR
EXTERN SendMessageA@16:NEAR
EXTERN MessageBoxA@16:NEAR
EXTERN CreateWindowExA@48:NEAR
EXTERN DefWindowProcA@16:NEAR
EXTERN DispatchMessageA@4:NEAR
EXTERN ExitProcess@4:NEAR
EXTERN GetMessageA@16:NEAR
EXTERN GetModuleHandleA@4:NEAR
EXTERN LoadCursorA@8:NEAR
EXTERN LoadIconA@8:NEAR
EXTERN PostQuitMessage@4:NEAR
EXTERN RegisterClassA@4:NEAR
EXTERN ShowWindow@8:NEAR
EXTERN TranslateMessage@4:NEAR
EXTERN UpdateWindow@4:NEAR
EXTERN BeginPaint@8:NEAR
EXTERN EndPaint@8:NEAR
EXTERN TextOutA@20:NEAR
EXTERN GetStockObject@4:NEAR
EXTERN CreateSolidBrush@4:NEAR
EXTERN SetBkColor@8:NEAR
EXTERN SetTextColor@8:NEAR
EXTERN InvalidateRect@12:NEAR
; ΡΡΡΡΠΊΡΡΡΡ
; ΡΡΡΡΠΊΡΡΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
MSGSTRUCT STRUC
MSHWND DD ?
MSMESSAGE DD ?
MSWPARAM DD ?
MSLPARAM DD ?
MSTIME DD ?
MSPT DD ?
MSGSTRUCT ENDS
;——ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠ»Π°ΡΡΠ° ΠΎΠΊΠΎΠ½
WNDCLASS STRUC
CLSSTYLE DD ?
CLWNDPROC DD ?
CLSCBCLSEX DD ?
CLSCBWNDEX DD ?
CLSHINST DD ?
CLSHICON DD ?
CLSHCURSOR DD ?
CLBKGROUND DD ?
CLMENNAME DD ?
CLNAME DD ?
WNDCLASS ENDS
PAINTSTR STRUC
hdc DWORD 0
fErase DWORD 0
left DWORD 0
top DWORD 0
right DWORD 0
bottom DWORD 0
fRes DWORD 0
fIncUp DWORD 0
Reserv DB 32 dup (0)
PAINTSTR ENDS
Π€Π°ΠΉΠ» edit. asm:
.386P
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ
.MODEL FLAT, stdcall
include qq. inc
; ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
includelib user32. lib ;ΠΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
includelib kernel32. lib ;ΠΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΄ΡΠΎΠΌ ΠΠ‘
includelib gdi32. lib ;ΠΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
;—————————————————————————————-;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'
NEWHWND DD 0 ;Ρ ΡΠ½Π΄Π»Π΅Ρ ΠΎΠΊΠ½Π°
MSG MSGSTRUCT >
WC WNDCLASS >
PNT PAINTSTR >
HINST DD 0; Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
TITLENAME DB 'Macro Assembler', 0
CLASSNAME DB 'CLASS32', 0
CPBUT DB 'ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ', 0
CPBUT1 DB 'ΠΠΎΠ²ΡΠΎΡΠΈΡΡ 20 ΡΠ°Π· Ρ ΠΏΠΎΠΌΠΎΡΡΡ REPT', 0
CPEDT DB ' ', 0
CLSBUTN DB 'BUTTON', 0
CLSEDIT DB 'EDIT', 0
TMP DB 0
HWNDBTN DWORD 0
HWNDBTN1 DWORD 0
HWNDEDT DWORD 0
HWNDEDT1 DWORD 0
XT DWORD 10
YT DWORD 90
TEXT DB 'ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡ', 0
DB 50 DUP (0); ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΡΠ΅ΡΠ°
TEXTM DB 'Π‘ΡΡΠΎΠΊΠ° Π²ΡΠ²Π΅Π΄Π΅Π½Π° 10 ΡΠ°Π· Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ REPT', 0
DB 50 DUP (0); ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΡΠ΅ΡΠ°
_DATA ENDS
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°
_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'
START:
; ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
PUSH 0
CALL GetModuleHandleA@4; ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ ΡΠΈΠΏ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π΄Π°Π½Π½ΡΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ
MOV [HINST], EAX
REG_CLASS: ;ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° ΠΎΠΊΠ½Π°
; Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΎΠΊΠ½Π°
; ΡΡΠΈΠ»Ρ
MOV [WC.CLSSTYLE], STYLE
; ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
MOV [WC.CLWNDPROC], OFFSET WNDPROC
MOV [WC.CLSCBCLSEX], 0
MOV [WC.CLSCBWNDEX], 0
MOV EAX, [HINST]
MOV [WC.CLSHINST], EAX
;————— ΠΈΠΊΠΎΠ½ΠΊΠ° ΠΎΠΊΠ½Π°
PUSH IDI_APPLICATION
PUSH 0
CALL LoadIconA@8 ;Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΈΠΊΠΎΠ½ΠΊΡ
MOV [WC.CLSHICON], EAX
;————— ΠΊΡΡΡΠΎΡ ΠΎΠΊΠ½Π°
PUSH IDC_ARROW
PUSH 0
CALL LoadCursorA@8 ;Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΊΡΡΡΠΎΡ
MOV [WC.CLSHCURSOR], EAX
;————-;
MOV [WC.CLBKGROUND], 28; ΡΠ²Π΅Ρ ΠΎΠΊΠ½Π°
MOV DWORD PTR [WC.CLMENNAME], 0
MOV DWORD PTR [WC.CLNAME], OFFSET CLASSNAME
PUSH OFFSET WC
CALL RegisterClassA@4 ;Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ ΠΊΠ»Π°ΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ, Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π±Π°Π·ΠΎΠ²ΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΈ ΡΠΈΠΏΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
; ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠΊΠ½ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°
PUSH 0
PUSH [HINST]
PUSH 0
PUSH 0
PUSH 600; DY — Π²ΡΡΠΎΡΠ° ΠΎΠΊΠ½Π°
PUSH 1200; DX — ΡΠΈΡΠΈΠ½Π° ΠΎΠΊΠ½Π°
PUSH 100; Y — ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΠ³Π»Π°
PUSH 100; X — ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΠ³Π»Π°
PUSH WS_OVERLAPPEDWINDOW
PUSH OFFSET TITLENAME; ΠΈΠΌΡ ΠΎΠΊΠ½Π°
PUSH OFFSET CLASSNAME; ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°
PUSH 0
CALL CreateWindowExA@48
; ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΎΡΠΈΠ±ΠΊΡ
CMP EAX, 0
JZ _ERR
MOV [NEWHWND], EAX; Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠΊΠ½Π°
PUSH SW_SHOWNORMAL
PUSH [NEWHWND]
CALL ShowWindow@8; ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ
;—————————————————————————————-;
PUSH [NEWHWND]
CALL UpdateWindow@4; ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΈΠ΄ΠΈΠΌΡΡ
; ΡΠ°ΡΡΡ ΠΎΠΊΠ½Π°, ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_PAINT
; ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
MSG_LOOP:
PUSH 0
PUSH 0
PUSH 0
PUSH OFFSET MSG
CALL GetMessageA@16 ;ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ
CMP EAX, 0 ;Π΅ΡΠ»ΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΡΠΈΡΠ΅Π» Π½ΠΎΠ»Ρ, Π·Π½Π°ΡΠΈΡ Π²ΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
JE END_LOOP
PUSH OFFSET MSG
CALL TranslateMessage@4
PUSH OFFSET MSG
CALL DispatchMessageA@4
JMP MSG_LOOP
END_LOOP:
; Π²ΡΡ ΠΎΠ΄ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Π·Π°ΠΊΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ)
PUSH [MSG.MSWPARAM]
CALL ExitProcess@4
_ERR:
JMP END_LOOP
;—————- ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ ———————————-;
; Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ
; [EBP+08H] - ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΠΎΠΊΡ
LENSTR PROC
PUSH EBP
MOV EBP, ESP
PUSH ESI
MOV ESI, DWORD PTR [EBP+8]
XOR EBX, EBX
LBL1:
CMP BYTE PTR [ESI], 0
JZ LBL2
INC EBX
INC ESI
JMP LBL1
LBL2:
POP ESI
POP EBP
RET 4
LENSTR ENDP
; ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΎΠΊΠ½Π°
; ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² ΡΡΠ΅ΠΊΠ΅
; [EBP+014Π]; LPARAM
; [EBP+10H]; WAPARAM
; [EBP+0CH]; MES
; [EBP+8]; HWND
WNDPROC PROC
PUSH EBP
MOV EBP, ESP
; PUSH EBX
; PUSH ESI
; PUSH EDI
IRP REG,; ΠΌΠ°ΠΊΡΠΎΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ IRP
PUSH REG
ENDM
CMP DWORD PTR [EBP+0CH], WM_DESTROY
JE WMDESTROY
CMP DWORD PTR [EBP+0CH], WM_CREATE
JE WMCREATE
CMP DWORD PTR [EBP+0CH], WM_PAINT
JE WMPAINT
CMP DWORD PTR [EBP+0CH], WM_COMMAND
JE WMCOMMND
JMP DEFWNDPROC
WMCOMMND:
MOV EAX, HWNDBTN
CMP DWORD PTR [EBP+14H], EAX; ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π½Π°ΠΆΠ°ΡΠ° Π»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° «Π‘ΠΎΠ±ΡΡΠΈΠ΅ 1»
JNE BUTT1
; ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ
PUSH OFFSET TEXT
PUSH 150
PUSH WM_GETTEXT
PUSH HWNDEDT
CALL SendMessageA@16; ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΡΡ ΡΡΡΠΎΠΊΡ
; Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ HWNDEDT1
PUSH OFFSET TEXT
PUSH 0
PUSH WM_SETTEXT
PUSH HWNDEDT1
CALL SendMessageA@16
JMP NODESTROY
BUTT1:
MOV EAX, HWNDBTN1
CMP DWORD PTR [EBP+14H], EAX; ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π½Π°ΠΆΠ°ΡΠ° Π»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° «Π‘ΠΎΠ±ΡΡΠΈΠ΅ 2»
JNE NODESTROY
PUSH [NEWHWND]
PUSH 0
PUSH 0
CALL InvalidateRect@12; ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ° ΠΎΠΊΠ½Π°
.IF TMP==0; ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΠΊΠ½Π°
MOV TMP, 1
.ELSE
MOV TMP, 0
.ENDIF
JMP NODESTROY
NODESTROY:
MOV EAX, 0
JMP FINISH
WMPAINT:
PUSH OFFSET PNT
PUSH DWORD PTR [EBP+08H]
CALL BeginPaint@8
PUSH EAX; ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ (Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ)
;———————— ΡΠ²Π΅Ρ ΡΠΎΠ½Π° = ΡΠ²Π΅Ρ ΠΎΠΊΠ½Π°
PUSH RGBW
PUSH EAX
CALL SetBkColor@8
;———————— ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ
POP EAX
PUSH EAX
;———————— ΡΠ²Π΅Ρ ΡΠ΅ΠΊΡΡΠ°
PUSH RGBT
PUSH EAX
CALL SetTextColor@8
POP EAX
.IF TMP==1; ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΏΡΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ΅ΠΊΡΡΠ° ΠΏΠΎ ΡΠΎΠ±ΡΡΠΈΡ 2
REPT 20; ΠΌΠ°ΠΊΡΠΎΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ REPT
PUSH EAX
;———————— Π²ΡΠ²Π΅ΡΡΠΈ ΡΠ΅ΠΊΡΡ
PUSH OFFSET TEXT
CALL LENSTR; Π²ΡΠ·ΠΎΠ² ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄Π»ΠΈΠ½Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
PUSH EBX; Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ
PUSH OFFSET TEXT; Π°Π΄ΡΠ΅Ρ ΡΡΡΠΎΠΊΠΈ
ADD YT, 20
PUSH YT; Y
PUSH XT; X
PUSH EAX; ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΎΠΊΠ½Π°
CALL TextOutA@20
POP EAX
ENDM
.ENDIF
MOV YT, 90
PUSH OFFSET PNT
PUSH DWORD PTR [EBP+08H]
CALL EndPaint@8
MOV EAX, 0
JMP FINISH
WMCREATE:
; ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠΊΠ½ΠΎ-ΠΊΠ½ΠΎΠΏΠΊΡ «Π‘ΠΎΠ±ΡΡΠΈΠ΅1»
PUSH 0
PUSH [HINST]
PUSH 0
PUSH DWORD PTR [EBP+08H]
PUSH 20; DY
PUSH 300; DX
PUSH 10; Y
PUSH 10; X
PUSH STYLBTN
PUSH OFFSET CPBUT; ΠΈΠΌΡ ΠΎΠΊΠ½Π°
PUSH OFFSET CLSBUTN; ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°
PUSH 0
CALL CreateWindowExA@48
MOV HWNDBTN, EAX; Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ
; ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠΊΠ½ΠΎ-ΠΊΠ½ΠΎΠΏΠΊΡ «Π‘ΠΎΠ±ΡΡΠΈΠ΅2»
PUSH 0
PUSH [HINST]
PUSH 0
PUSH DWORD PTR [EBP+08H]
PUSH 20; DY
PUSH 300; DX
PUSH 85; Y
PUSH 10; X
PUSH STYLBTN
PUSH OFFSET CPBUT1; ΠΈΠΌΡ ΠΎΠΊΠ½Π°
PUSH OFFSET CLSBUTN; ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°
PUSH 0
CALL CreateWindowExA@48
MOV HWNDBTN1, EAX; Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ
; ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠΊΠ½ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ1
PUSH 0
PUSH [HINST]
PUSH 0
PUSH DWORD PTR [EBP+08H]
PUSH 20; DY
PUSH 300; DX
PUSH 40; Y
PUSH 10; X
PUSH STYLEDT
PUSH OFFSET CPEDT; ΠΈΠΌΡ ΠΎΠΊΠ½Π°
PUSH OFFSET CLSEDIT; ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°
PUSH 0
CALL CreateWindowExA@48
MOV HWNDEDT, EAX
; ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠΊΠ½ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ 2
PUSH 0
PUSH [HINST]
PUSH 0
PUSH DWORD PTR [EBP+08H]
PUSH 20; DY
PUSH 300; DX
PUSH 60; Y
PUSH 10; X
PUSH STYLEDT
PUSH OFFSET CPEDT; ΠΈΠΌΡ ΠΎΠΊΠ½Π°
PUSH OFFSET CLSEDIT; ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°
PUSH 0
CALL CreateWindowExA@48
MOV HWNDEDT1, EAX
;————- ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΡΡΠΎΠΊΡ Π² ΠΎΠΊΠ½ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
PUSH OFFSET TEXT
PUSH 0
PUSH WM_SETTEXT
PUSH HWNDEDT
CALL SendMessageA@16
;————- ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΠΊΡΡ Π½Π° ΠΎΠΊΠ½Π΅ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
PUSH HWNDEDT
CALL SetFocus@4
;—————————————————————————————-;
MOV EAX, 0
JMP FINISH
DEFWNDPROC:
PUSH DWORD PTR [EBP+14H]
PUSH DWORD PTR [EBP+10H]
PUSH DWORD PTR [EBP+0CH]
PUSH DWORD PTR [EBP+08H]
CALL DefWindowProcA@16; Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ,
;ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠΊΠ½Π°,
;ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ
JMP FINISH
WMDESTROY:
PUSH 0
CALL PostQuitMessage@4; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_QUIT
MOV EAX, 0
FINISH:
POP EDI
POP ESI
POP EBX
POP EBP
RET 16
WNDPROC ENDP
_TEXT ENDS
END START
5.2 Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
6. ΠΡΠ²ΠΎΠ΄
Π Ρ ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΠ»ΠΈ ΠΈΠ·ΡΡΠ΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° 32-Π±ΠΈΡΠ½ΠΎΠΌ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅. ΠΠ·ΡΡΠ΅Π½Ρ ΠΌΠ°ΠΊΡΠΎΡΡΠ΅Π΄ΡΡΠ²Π°. Π‘ΠΎΡΡΠ°Π²Π»Π΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π΄Π»Ρ 32 ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΌΠΈΠΊΡΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° Intel, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡΠ΅Π΄ΡΡΠ² Π² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅.