textfiles/magazines/SWEDISH/outlaw-09.txt

1651 lines
67 KiB
Plaintext
Raw Normal View History

2021-04-15 13:31:59 -05:00
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Heretics Inc. presenterar....
[ Outlaw Informativa ]
issue 9, 99-12-18
___________________
O U T L A W 9
18 December, 1999
___________________
- A Heretics Inc. Production -
"Cryptography products may be declared illegal, but
the information will never be"
- Bruce Schneier
<20>nnu ett nummer sl<73>ppt av Heretics. Mitt hum<75>r <20>r ganska hyffsat nu, vilket
det oftast inte brukar vara. Snart kommer Dreamhack ocks<6B>, jag <20>r tyv<79>rr
ganska orolig <20>ver hur det kommer att bli, antagligen kommer det bara vara en
massa gAmE gEeKs d<>r som k<>r Quake turnering, det tycker jag <20>r j<>vligt tr<74>k-
igt. Men det finns ju stora f<>rdelar ocks<6B>: Man f<>r tr<74>ffa polare p<> IRC,
diskutera med andra Data intresserade om S<>kerhet, Unix osv och byta ut
kunskaper <20>verhuvudtaget. Jag kommer dit helt ensam s<> det blir en liten
utmaning faktiskt, det <20>r ju trevligt och s<>. Jaja, <20>ver till numret. Detta
nummer kommer inneh<65>lla lite blandat information om Linux, Nya attacker, Lite
fula mobil tips och lite annat tjafs.
-----------------------------------------------------------------------------
Disclaimer
-----------------------------------------------------------------------------
All information <20>r helt skrivet i utbildnings syfte och vi har inga budskap
eller uppmaningar att ni ska beg<65> brott. Seri<72>st, jag bryr mig inte vad ni
g<>r med informationen. Om du skulle beg<65> brott s<> <20>r ansvaret helt riktat <20>t
din sida.
-----------------------------------------------------------------------------
Medverkande
-----------------------------------------------------------------------------
En enkel lista med folk som skrivit f<>r detta nummer och hur du kan komma i
kontakt med personen.
Alias: diox1de Contact: keytrace@usa.net
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Alias: crazy-train Contact: crazy-train@telia.se
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Alias: Gazzaud Contact: gazzaud@operamail.com
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
-----------------------------------------------------------------------------
I N N E H <20> L L S F <20> T E C K N I N G
$ Staff
1:1. Editor
1:2. Disclaimer
1:3. Medverkande
1:4. Inneh<65>llsf<73>rteckning
1:5. Aktuellt
1:8. Filosofi och tankar
$ Nyheter
2:1. Sun Microsystems konkurrerar inte med Linux
2:3. S<>krare SIM kort genom ny allians
2:4. Amazon sponsrar Krypto-t<>vling
$ Phreaking och Telefoni
3:1. Hur du buggar ett rum med en mobil av: diox1de
3:2. Ett papper om GSM Systemet, del #1 av: diox1de
$ Hacking, N<>tverk, S<>kerhet, Unix etc.
4:1. Buffer overflow i amd av: crazy-train
4:2. Linux f<>r dumma, del #2 av: diox1de
4:3. Hur du Crackar Tolken97 av: diox1de
4:4. Andv<64>nd Doom vid System Administration av: diox1de
4:5. Windows peer-to-peer Networking av: diox1de
4:6. Hur vi hade det p<> Dreamhack av: diox1de
$ Programmering
5.1. Windows Programmering i C++ av: gazzaud
$ Ins<6E>ndare
5:1. Netscape 4.05 (Messenger) kryptering
5:2. CuteFTP 3.0.2 krypterings metoder av: diox1de
$ N<>gra ord innan slutet
6:1 . Copyright
6:2 . kill -9 666
"It is insufficient to protect outselves with laws;
we need to protect outseves with mathematics"
- Bruce Schneier
-----------------------------------------------------------------------------
Aktuellt []
-----------------------------------------------------------------------------
| --> Outlaw Informativa l<>ggs i vilol<6F>ge |
|---------------------------------------------------------------------------+
| Outlaw Informativa kommer l<>gga sig i vilo l<>ge, vi kommer ett tag fram |
| <20>ver inte satsa s<> mkt p<> sj<73>lv zinet utan mer <20>tenskilda textfiler.Detta |
| leder till att det tar ett tag innan n<>sta nummer av Outlaw Informativa |
| kommer ut. |
+---------------------------------------------------------------------------+
| --> Kunskapsplanen fors<72>tter |
|---------------------------------------------------------------------------+
| Jag diox1de forts<74>tter med kunskapsplanen jag lagt upp som jag ber<65>ttade |
| om i f<>rra numret (#8). |
+---------------------------------------------------------------------------+
| --> Serie #2 av textfilen om abbonent v<>xeln a345 har p<>b<EFBFBD>rjats |
|---------------------------------------------------------------------------+
| crazy-train b<>rjade skriva serie #2 i textfil serien om a345 |
+---------------------------------------------------------------------------+
-----------------------------------------------------------------------------
Filosofi och tankar []
-----------------------------------------------------------------------------
Jag har f<>rst<73>tt att m<>nga gillar Heretics men tycker inte att det <20>r en
seri<72>s satsning. Men egentligen varf<72>r skulle det vara en ?...jag kommer ju
inte sl<73>ppa den h<>r gruppen i f<>rsta taget. Ingen vet vad som kommer att h<>n-
da med Heretics egentligen. Vi kan bli en framtida f<>retag som utvecklar
s<>kra krypterings algoritmer eller rent av utveckla s<>kra telefonv<6E>xlar.
Det va n<>gon p<> IRC som fr<66>gada varf<72>r vi har mer Hacking och Datalogi <20>n vad
vi har Phreaking eftersom vi <20>r en Phreaking grupp. Jag svarade att vi inte
va en Phreakin grupp, vi <20>r helt enkelt en grupp data/tele intresserade
ungdomar. Det mesta av v<>ran information <20>r huvudsak inte skriven f<>r er som
ska l<>sa det utan f<>r oss sj<73>lva, dels f<>r att det <20>r kul och f<>r att man l<>r
sig och kommer ih<69>g det b<>ttre som kan underl<72>tta senare i andra fall.
-----------------------------------------------------------------------------
Sun Microsystems konkurrerar inte med Linux []
-----------------------------------------------------------------------------
Sun Microsystems tillbakavisar vad f<>retaget kallar "spekulationer" om att de
vill konkurrera direkt med Linux.
Dagen efter att nyheten spridits <20>ver v<>rlden om att Sun Microsystems
beslutat sl<73>ppa k<>llkoden f<>r sitt flaggskepp, operativsystemet Solaris,
fritt f<>r utvecklare (med vissa restriktioner, naturligtvis) tillbakavisar
de nu att deras avsikt med planerna <20>r att konkurrera direkt med Linux.
"Linux kan ha kompabilitetsproblem att v<>nta i framtiden, och oavsett vilken
distribution av Linux man v<>ljer s<> ligger den mycket n<>ra Sun:s teknologi"
s<>ger George Paolini, vice-VD f<>r Sun Microsystems marknadsavdelning.
Paolini avsl<73>jade ocks<6B> att f<>retaget <20>ven planerade att sl<73>ppa k<>llkoden f<>r
Java enligt samma modell som Solaris, men n<>gon tidsplan f<>r detta finns
enligt Paolini inte.
K<>lla: linux.idg.se
-----------------------------------------------------------------------------
S<>krare SIM kort genom ny allians []
-----------------------------------------------------------------------------
Schlumberger, v<>rldens st<73>rsta SIM-kortstillverkare har inlett ett samarbete
med Certicom, ett av v<>rldens ledande krypteringsf<73>retag. I och med samarbet-
et kan Schlumberger bygga in Certicoms senaste krypteringsteknologi ECC
(Elliptic Curve Cryptography) i sina kommande SIM-kort. ECC <20>r en kryptering
som utvecklats f<>r att passa till handdatorer, mobiltelefoner och s<> kallade
smart cards. F<>rdelen med systemet <20>r att det <20>r energisn<73>lt och inte heller
kr<6B>ver s<> mycket bandbredd f<>r att h<>lla h<>g s<>kerhet. H<>gre s<>kerhet <20>r ett
krav b<>de fr<66>n operat<61>rer och anv<6E>ndare nu n<>r WAP-teknologin med m<>jlighete-
rna att handla till exempel aktier och utf<74>ra bank<6E>renden direkt fr<66>n mobilt-
elefonen komemer.
K<>lla: Veckans notiser om Mobil
-----------------------------------------------------------------------------
Amazon sponsrar Krypto-t<>vling []
-----------------------------------------------------------------------------
Amazon sponsrar en krypto-t<>vling som g<>r ut p<> att kn<6B>cka ett Krypterat
meddelande och priserna blir grymma b<>cker s<> som Cryptonomicon, Applied Cry-
ptography, The Code Book, och Between Silk and Cyanide.
L<>s mer om b<>ckerna p<>:
[The CODE book]
http://www.amazon.com/exec/obidos/ASIN/0385495315/002-2655284-3468228
[Applied Cryptography]
http://www.amazon.com/exec/obidos/ASIN/0471117099/002-2655284-3468228
[Between Silk and Cyanide]
http://www.amazon.com/exec/obidos/ASIN/0684864223/002-2655284-3468228
[Cryptonomicon]
http://www.amazon.com/exec/obidos/ASIN/0380973464/002-2655284-3468228
Meddelandet som ska kn<6B>ckas ser ut s<> h<>r:
-106
047-111-70-99-24-21-25-12-53-22-56-8
038-097-34-64-242-335-51-377-183-168
038-097-34-64-380-330-115-289-273-189-56
068-486-42-23-87-434-10-468-151-345-150-494-376-415-426
038-549-53-15-1-193-121-29-109-66-28-160
Hur du g<>r f<>r att vara med:
Tyv<79>rr det g<>r inte om du inte bor eller befinner dig i USA, tr<74>kigt tycker
jag.
K<>lla: www.amazon.com
-----------------------------------------------------------------------------
Hur du buggar ett rum med en mobil []
-----------------------------------------------------------------------------
Detta <20>r s<> enkelt s<> jag vill inte ha n<>gra klagom<6F>l helst. Hela grejen g<>r
ut p<> att bugga ett rum. Bla. Nokia och Ericsson <20>r mycket bra f<>r a tt g<>ra
detta. Du utrustar mobiltelefonen med handsfree och st<73>ller in s<> att den
ska svara automatiskt och st<73>ller den i rummet du villa avlyssna och ringer
upp mobilen. Huvudsyftet med det h<>r <20>r att enkelt kunna prata n<>r man sitt-
er i bilen osv. Men det har visats sig kunna andv<64>ndas i andra syften ocks<6B>.
-----------------------------------------------------------------------------
Ett papper om GSM Systemet, del #3 []
-----------------------------------------------------------------------------
[F<>rord]
Eftersom jag skrev en artikel serie om S<>kerhet i GSM Systemet s<> t<>nkte jag
skriva <20>nnu en artikel serie om hur sj<73>lv GSM Systemet <20>r uppbyggt och hur
det fungerar. Denna artikel serie <20>r mycket bra att komplettera med min tidi-
gare serie om S<>kerhet i GSM systemet, som du kan hitta i nummer #6, #7 och
#8.
[Inledning]
Egentligen borde alla veta vad GSM <20>r, men jag t<>nker end<6E> f<>rklara vad det
<20>r f<>r det finns m<>nga som saknar det som kallas i allm<6C>nbildning. GSM
st<73>r f<>rst och fr<66>mst f<>r Global System for Mobile Communications. GSM <20>r
ett helt digitalt n<>tverk f<>r Cellul<75>r Mobiltelefoni. Sj<53>lva mobilens
abonemang <20>r <20>r knutet till ett kort som sitter i mobilen, ser ut som ett
litet chip och kallas f<>r SIM kort. GSM <20>r en ers<72>ttare f<>r de gamla analoga
systemet NMT (Nordisk Mobil Telefon) GSM har f<>rb<72>ttrat tekniken och gjort
b<>de hastigheten snabbare och ljudkvaliteten b<>ttre. Sj<53>vla GSM Systemet
bygger p<> CME20 som kommer diskuteras senare.
[CME20]
CME20 <20>r utvecklat av Ericsson. Den <20>r uppbyggd enligt ETSI/GSM Tekniska
Specifikationer f<>r ett Digitalt Cellul<75>rt Radio N<>tverk. CME20 inkluderar
v<>xelcentraler, basstaions controllers, basmottagare, lokaliseringsregister
och funtkioner f<>r centralicerad andv<64>nding och underh<72>ll.
Vilka N<>tversk element best<73>r d<> CME20 av ?
--> V<>xelsystemet : The Switching System (SS)
V<>xlar och handlar alla mobiltelefon samtal.
--> Basstation Systemet: The Base Station System (BSS)
H<>r koncentreras alla radiobeslektade funktioner
--> Drift och underh<72>ll: The Operation and Support System (OSS)
Drift och Underh<72>lls funktioner vilket kr<6B>vs av
N<>tverket.
Nedan ska jag f<>rklara vad de olika elementen har f<>r uppgifter och hur de
arbetar.
[The Switching System (SS)]
V<>xelsystemet best<73>r av 5 f<>ljande delar:
<20> The Mobile services Switching Centre (MSC)
<20> The Home Location Register (HLR)
<20> The Visitor Location Register (VLR)
<20> The Authentication Centre (AUC)
<20> Equipment Identity Register (EIR)
--> The Mobile services Switching Centre (MSC)
MSC tar hand om alla telefonv<6E>xelrelaterade funktioner i systemet. En Gateway
funktion (GMSC) koordinerar trafik<69>verf<72>ringen med de fasta n<>tet Public Swi-
tched telepone network (PSTN). MSC handlar allt som har med kanalsignalering,
v<>xelfunktioner, n<>tinterface och avgiftsdebitering att g<>ra. Hela MSC <20>r
byggd i samma f<>ljd som en AXE v<>xel.
--> The Home Location Register (HLR)
-----------------------------------------------------------------------------
Buffer overflow i amd []
-----------------------------------------------------------------------------
Automounter daemon (amd) har en buffer overflow i mount koden som skadar
Linux och n<>gra BSD plattformer. Amd mountar automatiskt fil system i svar
till f<>rs<72>k att komma <20>t filer som finns i filsystemet. Att g<>ra en l<>ng
string till AMQPROC_MOUNT proceduren, kan g<>ra att attackeraren kan f<> root
access.
Dessa plattformer har detta problem:
FreeBSD
Linux Red Hat 4.2
Linux Caldera
Linux Red Hat 5.2
Linux Red Hat 6.0
BSD/OS 4.0.1
BSD/OS 3.1
BSD/OS 4.0
Konsekvenser:
F<>r rootuid
Fix: Ladda hem patchen, info eller nyaste versionen av amd h<>r:
http://www.redhat.com/corp/support/errata/RHSA1999032_O1.html <RedHat>
(Ladda bara hem am-utils.rpm senaste versionen ifr<66>n t.ex Sunet p<>
RedHat updates f<>r ovanst<73>ende versioner.
ftp://ftp.calderasystems.com/pub/info/security/CSSA-1999:024.0.txt <Caladera>
http://www.bsdi.com/services/support/patches/patches-4.0.1/ <BSDi>
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-99:06.amd.asc <FreeBSD>
ftp://info.cert.org/vert_advisories/CA-99-12-amd.html
Nyhets k<>lla: http://xforce.iis.net
-----------------------------------------------------------------------------
Linux f<>r dumma, del #2 []
-----------------------------------------------------------------------------
I dag hade jag t<>nkt att ta upp hur man andv<64>nder kill f<>r att st<73>nga program
som stannat och ta upp kommandona chmod, chown och vad Multitasking <20>r och
hur det fungerar
[+] Kill samt ps [+]
====================
ps <20>r ett komando f<>r att lista program processer som <20>r ig<69>ng, ps st<73>r f<>r
Process Status.
[+] Filr<6C>ttigheter samt Fil<69>gare [+]
====================================
Det finns m<>nga olika anledningar till att du vill <20>ndra <20>gare p<> en fil
eller <20>ndra <20>gare.
4 elr. r--: read-only
2 elr. -w-: write-only
1 elr. --x: execute
6 elr. rw-: read/write
5 elr. r-x: read/execute
3 elr. -wx: write/execute
7 elr rwx: read/write/execute
[+] Hur <20>ndrar man r<>ttigheter p<> en fil d<> ? [+]
=================================================
Som du ser s<> st<73>r det b<>de en siffra och en bokstav. Siffrorna andv<64>nds n<>r
du ska <20>ndra r<>ttigheter p<> en fil och bokst<73>verna n<>r du visar r<>ttigheter
p<> en fil.
# chmod 345 <fil>
# ls -l <fil>
--wxr--r-x 1 g1mp users 114 Oct 15 15.11 trashfile
[+] Multitasking [+]
====================
Ni har s<>kert h<>rt m<>nga g<>nger d<> sett folk fr<66>gat Varf<72>r Linux <20>r s<> bra
och dom svarar multitasking, opensource osv.
Nu ska jag f<>rklara vad Multitasking (Multik<69>rning) <20>r. Man kan j<>mnf<6E>ra
Linux med MSDOS (Microsoft Disk Operating System). Visst har DOS en del
program f<>r n<>tverk, bla. netuse, tracert, ping osv. Om du ska k<>ra
Internet i DOS s<> m<>ste du ladda ner en massa program f<>r att f<> ett
komplett N<>tverks system. Linux <20>r ocks<6B> ett operativsystem som best<73>r av
en kommando prompt som andv<64>nds av en kommandotolk (shell) bla. csh, ksh,
bash. I DOS andv<64>nds skalet command.com.
Ok, l<>t oss s<>ga att du f<>tt
ig<69>ng en Internet anslutning laddad ner en IRC klient f <20>r DOS osv. Det <20>r
h<>r Linux kommer in i bilden. Du vill oftast kunna g<>ra flera saker <20>n att
sitta p<> IRC och dega. I Linux finns det n<>got som kallas Multitasking, <20>ven
kallat Multik<69>rning. Vad som menas med Multitasking <20>r att du kan k<>ra flera
Program Processer p<> samma g<>ng, det <20>r en f<>rdel med Linux. Sen finns det
redan N<>tverks applikationer till Linux som kan installeras vid Linux Setup.
Du kan <20>ven l<>gga till dem med pkgtool (Package Tool).
Hur fungerar Multitasking d<>?
Multitasking delar upp Program Processerna i sm<73> processer och som med en
viss prioritetsindelning f<>r andv<64>nda processorn under en viss tid. Det g<>r
s<> pass snabbt s<> att vi uppfattar det som de k<>rs sammtidigt.
Denna uppdelning av Processor kraft sker med en sk. scheduler och som <20>r en
special process som ser till att processerna delas upp r<>ttvist mellan syste-
mets olika processer.
-----------------------------------------------------------------------------
Hur du Crackar Tolken97 []
-----------------------------------------------------------------------------
F<>rst och fr<66>mst s<> <20>r Tolken97 ett <20>vers<72>ttningsprogram som kan vara andv<64>n-
dbart om man skulle vilja <20>vers<72>tta ord/texter osv. Tolken <20>r programmerat av
B<>rje Hagsten. I denna artikel hade jag t<>nkt f<>rklara hur du Crackar Tolken.
Ok, jag vill inte kalla det f<>r ett Crack eftersom det <20>r s<> otroligt l<>tt
och att det inte beh<65>vs n<>gra kunskaper inom Cracking <20>verhuvudtaget.
Den filen vi ska editera <20>r "Tolken97.ini" och det <20>r tv<74> rader vi ska edite-
ra, n<>rmare best<73>mt tv<74> rader under [Program], dvs. Reg och UserName.
Nedan kommer ett urklipp fr<66>n en oregistrerad version av Tolken97.ini. Notera
att det bara <20>r raderna under [Program] som visas.
[Program]
Reg=00100 # H<>r kommer den f<>rsta raden som ska <20>ndras.
Signal=1
LoadBas=1
LangVal=6
LangText=Engelska till Svenska
FrasFil=fras0001.dat
LangFile=ord0001.dat
TransStyle=0
DosText=47690
MenyRad=0
StatusRad=1
RadBryt=0
Undos=250
ProgStart=0
Bubble=-1
ShowTip=0
WhatTip=0
MakeList=-1
PanelColor=8421440
ShowList=-1
CountWords=-1
CapsLocked=0
SelectLang=0
SeLang=1
UserName= # H<>r kommer den andra raden som ska <20>ndras.
Du ska l<>gga till 329716 ist<73>llet f<>r 00100 under "Regname" och sedan l<>gga
till ett valfritt username under UserName. N<>r den <20>r "Crackad" s<> ska den se
ut n<>got i den h<>r stilen:
[Program]
Reg=329716
Signal=1
LoadBas=1
LangVal=6
LangText=Engelska till Svenska
FrasFil=fras0001.dat
LangFile=ord0001.dat
TransStyle=0
DosText=47690
MenyRad=0
StatusRad=1
RadBryt=0
Undos=250
ProgStart=0
Bubble=-1
ShowTip=0
WhatTip=0
MakeList=-1
PanelColor=8421440
ShowList=-1
CountWords=-1
CapsLocked=0
SelectLang=0
SeLang=1
UserName=Apocalyptica
Ok, jag f<>r urs<72>kta f<>r en lam artikel. Men jag <20>r inte den enda som hatar en
massa fula f<>nster som s<>ger att man ska registrera. Det <20>r h<>r Linux kommer
in i bilden =)
-----------------------------------------------------------------------------
Andv<64>nd Doom vid System Administration []
-----------------------------------------------------------------------------
Fick en sida av en snubbe och t<>nkte skriva lite om det jag s<>g. Jag <20>r helt
emot spel, men det <20>r <20>nd<6E> en kul grej.
Ett program f<>r Linux som d<>dar processer genom att springa omkring med ett
vapen och d<>da dem helt enkelt ist<73>llet f<>r att andv<64>nda kill -9.
1981, Vernor Vinge filosoferar mycket om virtuella v<>rldar och fantasiser, i
hans novell beskrivs bla. att vandra genom ett sv<73>rthittat tr<74>sk skulle kunn-
a vara att g<> f<>rbi en Firewall. Detta skulle kunna vara <20>nnu ett steg, f<>r
<20>ven datorn, typ bash <20>r ju bara en fantasi rm -r <bibbla> skulle kunna vara
100101001010010101010 egentligen, men n<>sta steg skulle typ rm -r vara ett
monster i ett spel som du ska d<>da.
Hmm, mer t<>nker jag inte skriva. T<>nkte bara meddela er om en liten rolig sak
, om ni vill veta mer s<> kan ni g<> till k<>llan.
K<>lla:
-----------------------------------------------------------------------------
Windows peer-to-peer Networking []
-----------------------------------------------------------------------------
Nedan f<>ljer en artikel om hur du s<>tter upp ett "peer-to-peer" n<>tverk.
peer-to-peer <20>r allts<74> ett n<>tverk utan server. Det kan tyckas vara lamt att
skriva om Windows. Men sj<73>lv tycker jag att allt som har med N<>tverk att
g<>ra <20>r intressant.
<20> Koppla upp de Fysiska N<>tverket
<20> L<>gg till Tj<54>nster och Protokoll
<20> S<>tt ett f<>rbest<73>mt lokalt IP
<20> S<>tt ett domainname ist<73>llet f<>r IP
<20> Dela ut mappar och skrivare
<20> Testa om det fungerar
<20> Efterord
[- Koppla upp de Fysiska N<>tverket -]
Det h<>r kommer jag inte skriva om s<> djupg<70>ende.Men det <20>r det f<>rsta steget.
H<>r utg<74>r jag ifr<66>n att du ska koppla ihop tv<74> datorer, det <20>r bara koppla
kablarna f<>rst fr<66>n dator 1 till hubben sen fr<66>n dator 2 till hubben. Printe-
rn beh<65>ver inte kopplas till hubben. Du installerar en n<>tverksskrivare sen
end<6E>.
--> En enkel skiss:
______
|<7C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>| ______ | |
|Dator1|-------|EthHub|--------|Dator2|
| | <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | |]----. _______
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | |Printer|
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[- L<>gg till Tj<54>nster och Protokoll -]
I ett Windows peer-to-peer n<>tverk andv<64>nds fr<66>mst netbios och TCP/IP, men
<20>ven andra protokoll beh<65>vs. Jag vill ju inte att artikeln ska bli allt f<>r
grundl<64>ggande och detaljerad, men jag kan s<>ga att du <20>ppnar N<>tverk i
Kontrollpanelen f<>r att l<>gga till Protokoll och Tj<54>nster. Det som ska l<>ggas
till om det redan inte finns <20>r:
<20> Fil- och skrivardelning f<>r Microsoft Network
<20> IPX/SPX Kompatibelt-protokoll
<20> NetBEUI
<20> TCP/IP
L<>gg till tj<74>nsterna och protokollen ovan p<> alla datorer som ska inkludera i
N<>tverket.
[- S<>tt ett f<>rbest<73>mt lokalt IP -]
F<>r att datorerna ska kunna kommunicera med varandra s<> kr<6B>vs det att man
s<>tter en slags identifikation p<> varje dator, dvs. IP nummer.
Ta egenskaper f<>r N<>tverk, sedan Egenskaper f<>r TCP > Namn p<> n<>tverkskort.
V<>lj IP Address och klicka lite p<> Specify an IP Address. Skriv in en IP Add-
ers, t.ex. 192.168.0.2 som <20>r en standard f<>r N<>tverk. Om du vill veta mer
kan du s<>ka efter info om Class N<>tverk. Subnet Mask ska du s<>tta till
255.255.255.0.
[- S<>tt ett domainname ist<73>llet f<>r IP -]
kan du s<>ka efter info om Class N<>tverk. Subnet Mask ska du s<>tta till
Det kan tyckas jobbigt att skriva in en ip address s<> for t man ska connecta
till en dator. <20>ppna filen c:/Windows/hosts eller hosts.sam. Bl<42>ddra f<>rbi
alla kommentarer (#). Du kommer se 127.0.0.1 localhost. L<>gg till dina egna
IP addresser och hitta p<> n<>t coolt domainname. t.ex.
127.0.0.1 localhost
192.168.0.3 bad_s1n
192.168.0.2 hypocrisy
192.168.0.1 mortal
[- Dela ut mappar och skrivare -]
F<>r att du ska kunna ge tillg<6C>ng fr<66>n andra datorer att se vissa bibliotek
eller devices s<> beh<65>ver du dela ut dem ocks<6B>. H<>gerklicka p<> t.ex. C
enheten och v<>lj "Dela ut" och tryck f<>r Delad. D<>r kan du namnge dem och
kommentera och st<73>lla in vilken <20>tkomsttyp + s<>tta passwd p<> dem.
Om du ska dela p<> en skrivare s<> g<>r du i princip samma sak. Du vandrar <20>ver
till den datorn d<>r skrivaren <20>r inkopplad och h<>gerklickar p<> den och v<>ljer
dela ut.
[- Testa om det fungerar -]
G<> ut i DOS och k<>r ping <ipnummer>. Exempel f<>ljer nedan:
C:\> ping syrgas
Pinging syrgas [192.168.0.2] with 32 bytes of data:
Reply from 192.168.0.2: bytes=32 time=1ms TTL=32
Reply from 192.168.0.2: bytes=32 time<10ms TTL=32
Reply from 192.168.0.2: bytes=32 time<10ms TTL=32
Reply from 192.168.0.2: bytes=32 time<10ms TTL=32
Jaupp, det funkade.
[- Efterord -]
Mer var det inte. Det kanske kommer eventuella tutorials d<>r du kan l<>ra dig
IP addressering, arp och mer om tcp/ip och p<> ett roligt praktiskt s<>tt :)
Har du n<>gra fr<66>gor s<> finns jag p<> DALnet (#swehack)
Just det!, en sak till var det..Jag brukar inte h<>lla mina l<>ften, men den
h<>r g<>ngen ska jag f<>rs<72>ka s<> gott jag kan. Jag t<>nker n<>mligen skriva en
tutorial eller en artikel om N<>tverk och N<>tverkss<73>kerhet i Linux. Den
kompletta guiden kommer allts<74> inneh<65>lla hur du s<>tter upp en n<>tverk
mellan flera Linux datorer och hur du s<>tter upp samba f<>r att koppla ihop
Windows klienter i N<>tverket och till sist hur du s<>tter upp en dator som
Firewall f<>r att skydda ditt n<>tverk.
-----------------------------------------------------------------------------
Hur vi hade det p<> Dreamhack []
-----------------------------------------------------------------------------
Jag kom dit b<>rande med mina grejer och lastade upp dom p<> ett bord
och kopplade ihop alla kablar, n<>tverket var inte kopplat <20>n p<>grund av
att dom inte hade f<>tt h<>rdvaran till N<>tverket.
Men iafs, jag satt och
pillade med Linux ett tag och s<>g att klockan tickade runt 13 tiden s<>d<EFBFBD>r,jag
begav mig till informationen f<>r att ropa upp axxezz, han kom inte f<>rsta g<>-
ngen jag ropade upp han men d<>remot andra, jag flyttade bort till honom och
startade Linux och b<>rjade pilla igen. Sneglade mig omkring och s<>g att jag
befann mig d<>r folk i alla fall k<>rde n<>got Unix system, vilket var ganska
l<>ttande.
Flera timmars v<>ntade, inte mkt hade h<>nt. Jag k<>kade en pizza p<>
kv<6B>llen och fortsatte pilla. Klockan slog runt 5:00 och d<> b<>rjade switcharna
komma upp p<> borden. Jag sprang med TP kabeln i handen och kopplade in den i
switchen, precis som manslemen i vaginan :P. F<>rst funkade det inte, och det
var p<>grund av att dom inte f<>tt upp routern <20>n. Men n<>r den kom upp s<>
funkade allt fint i n<>n timme sen pajade switchen, n<>gra timmars v<>ntade sen
funkade det igen. Klockan slog 14.00 och jag gick och sov i en timme och gick
upp och ircare lite, och b<>rjade tr<74>ffa folk.
Den f<>rsta jag tr<74>ffade d<> var
dizze aka philtre som kom f<>rbi och h<>lsade trevligt. Jag som tyckte synd om
mig sj<73>lv fick d<> h<>ra hur d<>ligt han hade det. Han hade inget n<>tverkskort
<20>verhuvudtaget. Vad gjorde axxezz d<> ? .. han installerade om Linux 25 grr
p<> rad och uppt<70>ckte att hans n<>tverksskort inte funkade, jag l<>nade han
lite deg s<> ha n k<>pte sig ett litet fint ne2000 kort. Han kopplade in
kortet och installerade Slackware (igen) och uppt<70>ckte att Lilo hade skrivit
<20>ver hans boot parametrar. Han va fast i Linux!, som iofs inte var n<>got att
lida med, snarare tv<74>rt om. Han fick dhcp att funka sen var han redan d<>
framf<6D>r IRC klienten.
Jag kom ett par timmar senare. Jag k<>pt e ocks<6B> ett nytt n<>tverksskort.
Anledning vill ni inte vet :) Tillslut var korte t och dhcp klienten fullt
fungerande i mitt fina Linux system. Jag satt och pilla lite, fick <20>ven
ljudet att fungera. phreedom kom <20>ver med en cd metal mp3. S<> jag kopierade
<20>ver lite till /dev/hda7 och b<>rjade digga lite. Sen begav jag mig till
kiosken och k<>pte en platta cola till. Tillslut, vad gjorde man p<> dreamhack?
Man drack cola, pillade med Linux och tr<74>ffade IRC folk. Den h<>r lilla l<>t
oss kalla historien <20>r inte komplett, men jag hoppas att ni <20>verlever ?
-----------------------------------------------------------------------------
Windows Programmering i C++ []
-----------------------------------------------------------------------------
CCC
C
C + +
C +++ +++
C + +
CCC Windows Programmering / [#Define Version 1]
[Inledning]
Orsaken till den h<>r artikeln <20>r tristess och hos skribenten en allm<6C>n
avsaknad av programmeringsdiskussioner, s<> ta inte alltihop p<> blodigt
allvar. Det kan verka seri<72>st fr<66>n en b<>rjan, men allting <20>r objektivt. Jag
vet att intresset f<>r Windoze-programmering <20>r ganska l<>gt, men jag ska om
jag f<>r tid/ork skriva n<>gonting om X11/GDK/QT-programmering ist<73>llet. Den
h<>r artikeln, kan jag redan nu p<>peka, kommer inte inneh<65>lla n<>got om VC++'s
klasser/metodik eller Builder. I min <20>sikt <20>r det b<>ttre att l<>ra sig
fr<66>n grunden och *sedan* l<>ra sig att anv<6E>nda f<>renklingar och eventuella
ut<75>kningar. Innan vi b<>rjar s<> ska jag bara dra en v<>ldigt grundl<64>ggande
sak: variablers storlek. Dessa varierar som ni s<>kert vet, beroende p<>
platform. S<> jag tar upp de som g<>ller f<>r Windows (dvs 32-bit).
unsigned CHAR 8 bits 0 till 255
CHAR 8 bits -128 127
short INT 16 bits -32,768 till 32,767
unsigned INT 32 bits 0 till 4,294,967,295
INT 32 bits -2,147,483,648 till 2,147,483,647
unsigned LONG 32 bits 0 till 4,294,967,295
ENUM 32 bits -2,147,483,648 till 2,147,483,647
LONG 32 bits -2,147,483,648 till 2,147,483,647
Dessa anv<6E>nds uteslutande, men det finns fler. Windows har en (o)vana att
anv<6E>nda andra variabler, allt f<>r att kompilatorn ska kunna kontrollera att
korrekt data anv<6E>nds. Dessa faller dock tillbaks p<> ovanst<73>ende variablers
(eller i andra fall tex float, double och dom andra) storlek. Innan vi g<>r
vidare vill jag bara p<>peka att variablers storlek <20>r ganska viktig,speciellt
om ni t<>nker anv<6E>nda f<>ljande exempel, eller programmera Win32, i assembler.
D<>rf<72>r ska ni akta er f<>r p<>st<73>enden som tex att en char och en int <20>r lika.
S<>dana p<>st<73>ende m<> vara sanna n<>nstans, men inte h<>r, och skulle det
implementeras s<> kan man f<>rv<72>nta sig en massa on<6F>digt kr<6B>ngel. Jag ska
f<>rs<72>ka att vara s<> detaljerad som det bara g<>r,men k<>nner du att det saknas
n<>got, eller vill p<>peka n<>got s<> g<>r g<>rna det. <20>ven kritik, <20>ven om jag
sj<73>lvklart kommer att ignorera alla personangrepp. S<> f<>r att ta det riktigt
fr<66>n b<>rjan.
[Hur <20>r Windows uppbyggt?]
Jag har f<>r mig att jag tagit upp det tidigare, men en repetition skadar
aldrig :-).
Windows <20>r uppbyggt f<>r en klient-server milj<6C>. F<>rv<72>xla inte det h<>r med
n<>gon kommunikationsmodell, <20>ven om det finns likheter. Tanken <20>r s<>dan att
servern (sj<73>lva operativsystemet i det h<>r fallet) ska tillhandah<61>lla med
resurser (grafiska ytor, medel f<>r kommunikation med enheter osv) som sedan
klienter (enskilda program) ska kunna anv<6E>nda. Denna implementering <20>r
f<>r att skilja operativsystemet fr<66>n programmen. Teoretiskt ska det betyda
att n<>r en klient kraschar s<> ska servern vara ober<65>rd. Det funkar inget
vidare i Windoze, men det funkar desto b<>ttre i tex X11. Vad detta betyder
<20>r att programmet <20>r uppbyggt annorlunda fr<66>n program i DOS eller Windows
3.x.
---* Windows Multi-Tasking
Windows <20>r Multi-tasking vilket vi under l<>ng tid blivit varse. Medan DOS
program var ganska statiska (om programmet inte gjorde n<>gonting, s<>
h<>nde ingenting och skulle det h<>nda n<>gonting s<> var det upp till program-
met att se till att det h<>nde) s<> <20>r Windows program dynamiska. <20>ven om
programmet inte g<>r n<>got, skickas data till det, andra program utf<74>r
saker och s<> vidare. Vad betyder detta programmeringsm<73>ssigt? Jo det betyder
att Windows m<>ste hela tiden ha en m<>jlighet att <20>terge h<>ndelser till ditt
program, detta sker igenom en sk Message-Queue. N<>r Windows vill kommunicera
med ditt program, skickar den ett message, vilket placeras i en k<>, och som
sedan Windows f<>rv<72>ntar sig att programmet ska behandla. Meddelanden <20>r helt
enkelt en struktur, kanske ska till<6C>ggas. Jag g<>r n<>rmare in p<> detta utbyte
l<>ngre fram.
---* Windows API (Application Programming Interface)
enkelt en struktur, kanske ska till<6C>ggas. Jag g<>r n<>rmare in p<> detta utbyte
Det interface som anv<6E>nds f<>r att kommunicera med Windows och andra program.
Lite grovt skulle man kunna s<>ga att det <20>r en vidareutveckling av INT's.
S<> eftersom ni nu genast skaffat denna felaktiga uppfattning, ska jag dra
skillnaderna. Medan INT's var deklarerade i operativsystemet sj<73>lvt <20>r
API en samling funktioner i olika .DLL's, Dynamic Link Libraries. Sj<53>lva
samlingen kan d<>rf<72>r enkelt expanderas med funktioner som inte operativsyst-
operativsystemet sj<73>lv handhar, utan som <20>r fr<66>n olika program. Den
grundl<64>ggande kommunikationen med enheter (som INT's hade hand om) ligger
inte hos API, utan dessa <20>r ist<73>llet ytterligare ett lager, allt f<>r att
underl<72>tta kommunikationen, och s<>kert <20>ven utvecklingen av program. Ska
ocks<6B> p<>pekas att Windows anv<6E>nder en 32-bit flat memory model till skillnad
fr<66>n DOS, men det har jag tagit upp tidigare och en repition <20>r <20>verfl<66>dig.
S<> f<>r att ni inte ska d<> av tristess innan artikeln ens b<>rjat s<> ska jag
skriva ett litet HelloWorld program. Dom brukar vara popul<75>ra :-).
NOTeringar innan exemplet: Alla variabler som b<>rjar p<> h <20>r generellt
handles, f<>r en beskrivning av variabel-prefix se slutet.
#include <windows.h> /* Sj<53>lvklart */
LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);
/*Funktionsdefinition f<>r att vi ska slippa errors pga att vi placerar
funktionen sist. */
char szWinName[] = "MinWinKlass"; /* Vad v<>ran
Window-klass ska heta. Mer om det under genomg<6D>ngen */
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs,
int nWinMode) {
HWND hwnd;
MSG msg;
WNDCLASS wcl;
/* En titt p<> ovanst<73>ende skadar inte. */
/* Okey, s<> l<>tom oss tala om hur v<>ran f<>nster-klass ska vara. Det g<>r vi
igenom att manipulera medlemmarna i den (WNDCLASS) wcl vi just deklarerat. */
wcl.hInstance = hThisInst; /* handle till v<>ran instans. */
wcl.lpszClassName = szWinName; /* Namnet p<> v<>ran klass */
wcl.lpfnWndProc = WindowFunc; /* Den CallBack window-funktion som sedan ska
ta hand om de meddelanden (messages) som Windows skickar till v<>rt program
*/ wcl.style = 0; wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION); /*
standardikon h<>mtas med LoadIcon */ wcl.hCursor = LoadCursor(NULL,
IDC_ARROW); /* ditto (fast pekare givetvis ;-) */ wcl.lpszMenuName = NULL; /*
ingen meny den h<>r g<>ngen */
wcl.cbClsExtra = 0;
wcl.cbWndExtra = 0;
/* Det var dom grundl<64>ggande medlemmarna det. Uhm. Just det, kanske ska
tala om f<>rg p<> bakgrunden ocks<6B> */
wcl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
/* detta g<>r vi igenom att l<>mna tillbaks handle'n till en vit pensel med GetStockObject(). */
if(!RegisterClass(&wcl)) return 0; /* s<> f<>rs<72>ker vi registrera v<>r f<>nsterklass s<> att
Windows ska veta vad vi pratar om sedan n<>r vi kommer att referera till den. Skiter det
sig h<>r <20>r det allvarligt och det <20>r stort sett bara att avlsuta. */
/* s<>d<EFBFBD>rja men eftersom att mickla med en klass inte <20>stadkommer n<>nting (mer <20>n att
se till att det h<>r programmet funkar ;-) s<> ska vi ocks<6B> skapa ett f<>nster (wheee)... */
hwnd CreateWindow(
szWinName, /* Vilken window-klass vi ska anv<6E>nda */
"HelloWorld Example", /* vad som ska st<73> i title-bar'en */
WS_OVERLAPPEDWINDOW, /* vilken stil vi ska ha p<> v<>rat f<>nster */
CW_USEDEFAULT, /* X koordinat, l<>t windows best<73>mma */
CW_USEDEFAULT, /* Y koordinat, ditto */
CW_USEDEFAULT, /* bredd, ditto */
CW_USEDEFAULT, /* h<>jd, ditto */
HWND_DESKTOP, /* F<>r<EFBFBD>lder? Skrivbordet. Mer om det senare. */
NULL, /* ingen meny */
hThisInst, /* vilken instans av programmet */
NULL); /* inga extra parametrar */
/* S<>d<EFBFBD>r ja. Ett f<>nster. Men eftersom vi inte angett WS_VISIBLE som stil, s<>
syns det inte <20>nnu. D<>rf<72>r s<> visar vi det, och passar p<> att uppdatera */
ShowWindow(hwnd, nWinMode);
UpdateWindow(hwnd);
/* Nu, ytterligare en viktig del, v<>ran messageloop. Den kommer att f<>nga upp alla
messages som kommer att riktas till v<>rat program och sedan skicka dom till v<>ran
Window CallBack funktion (WindowFunc). Loopen avslutas n<>r 0 l<>mnas, vilket
betyder att programmet ska avslutas. */
while(GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg); /* l<>mna tillbaks kontrollen till Windows */
}
return msg.wParam;
}
/* Dags f<>r v<>ran CallBack funktion. */
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch(message) {
case WM_DESTROY :
PostQuitMessage(0); /* kommer g<>ra s<> att v<>ran MessageLoop f<>r 0 och
hela programmet avslutas */
break;
default : /* alla andra meddelanden hamnar h<>r men det <20>r ju logiskt */
return DefWindowProc(hwnd, message, wParam, lParam);
/* L<>t Windows avg<76>ra hur meddelandet ska hanteras, slags standardbehandling */
}
return 0;
}
K<>nner ni igen programmet BTW? Bra, d<> har ni l<>st min tidigare, lite
spartanare text om grundl<64>ggande Windows programmering. Jag <20>r hemskt ledsen
om det blir n<>got av en upprepning. Det f<>r ni t<>la.Jag f<>ruts<74>tter att alla
vet hur man anv<6E>nder klasser, switch-satser och liknande eftersom det <20>r
grundl<64>ggande C++. Annars f<>r ni v<>l sk<73>lla p<> mig :-). Programmets
exekvering b<>rjar vid WinMain() och f<>r fr<66>n Windows lite data som kan vara
anv<6E>ndbart. hThisInst refererar till nuvarande instans, och hPrevInst till
den f<>rra. Anv<6E>nds om man tex vill f<>rhindra att flera instanser av ens
program finns samtidigt. lpszArgs <20>r en pekare till en str<74>ng som inneh<65>ller
all command-line data.nWinMode inneh<65>ller en parameter som s<>ger hur Windows
vill att ditt program f<>rst ska visas. G<>r att bortse ifr<66>n.
szWinClassName[] inneh<65>ller vad <20>n vi m<>nde vilja kalla v<>ran Window-klass
(WNDCLASS). Str<74>ngen anv<6E>nds sedan f<>r att referera till just denna klass.
hwnd eller hWnd om ni hellre vill det, <20>r en handle till v<>rat f<>nster. Vid
alla operationer igentemot det m<>ste vi ha denna handle. <20>ven f<>r att kunna
p<>verka andra f<>nster m<>ste vi ha deras handle's, men mer om hur man f<>r fram
dessa senare. Grundl<64>ggande faktum: Ingen handle, ingen p<>verkan. wcl beh<65>ver
jag v<>l inte g<> igenom, eller hur? Bra. D<>remot kan vi titta lite n<>rmare p<>
LoadIcon & LoadCursor. HICON LoadIcon(HINSTANCE hInst, LPCSTR lpszName);
HCURSOR LoadCursor(HINSTANCE hInst, LPCSTR lpszName); hInst anger instansen
f<>r den modul som inneh<65>ller resursen, eftersom vi h<>mtar en standardresurs
anger vi NULL. lpszName identifierar resursen.
Exempel p<> standardikoner (\include\windows.inc)
IDI_APPLICATION 32512
IDI_ASTERISK 32516
IDI_EXCLAMATION 32515
IDI_HAND 32513
IDI_QUESTION 32514
Exempel p<> standardpekare (\include\windows.inc)
IDC_ARROW 32512
IDC_CROSS 32515
IDC_IBEAM 32513
IDC_WAIT 32514
Som tidigare p<>pekats skaffar vi oss en vit bakgrund igenom att l<>mna en
handle till en pensel (brush) som <20>r vit. Detta g<>rs med GetStockObject() som
anv<6E>nds f<>r att h<>mta standardresurser. Orsaken till (HBRUSH) konverteringen
<20>r f<>r att GetStockObject() ser ut s<>h<EFBFBD>r:
HGDIOBJ GetStockObject(int object);
Exempel p<> standardpenslar (\include\windows.inc)
BLACK_BRUSH 4
DKGRAY_BRUSH 3
HOLLOW_BRUSH 5
LTGRAY_BRUSH 1
WHITE_BRUSH 0
N<>r vi skapade v<>rat f<>nster anv<6E>nde vi en ganska extensiv stil,
WS_OVERLAPPEDWINDOW, men vi kan vara mycket petigare om vi vill. F<>ljande
stilar kan OR'as ihop f<>r att <20>stadkomma en mer anv<6E>ndardefinierat f<>nster.
Exempel p<> f<>nsterstilar (\include\win32\winuser.h)
WS_BORDER(0x80) -- Enkel ram
WS_OVERLAPPED(0x00) -- F<>nster med border.
WS_MAXIMIZEBOX(0x01) -- F<>nster med Maximize-ruta
WS_MINIMIZEBOX(0x02) -- F<>nster med Minimize-ruta
WS_SYSMENU(0x08) -- System meny
WS_CAPTION(0xC0) -- Alt WS_BORDER | WS_DLGFRAME
WS_THICKFRAME(0x04) -- Fet border
WS_OVERLAPPEDWINDOW(WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME |
WS_MINIMIZEBOX | WS_MAXIMIZEBOX)
<20>n s<> l<>nge har jag inte bidragit med s<> mycket nytt, men ha lite t<>lamod,
det kommer. F<>rst bara en snabb f<>rklaring av WM_DESTROY. Detta <20>r ett
meddelande som skickas av Windows n<>r din applikation h<>ller p<> att avslut-
as. S<> inom denna case s<> ska f<>rslagvis all upprensning ske s<> att
programmet kan avslutas 'rent'. Sl<53>pp l<>sta resurser, frig<69>r minne och
snygga upp efter programmet. Observera att WM_DESTROY postas *efter* det att
f<>nstret redan tagits bort, avslutning har p<> detta vis redan p<>b<EFBFBD>rjats.Vill
man ingripa tidigare i avslutningsprocessen (som tex fr<66>ga om anv<6E>ndaren
verkligen vill avsluta) ska man anv<6E>nda sig av WM_CLOSE. I DefWndProc()
anropar WM_CLOSE helt enkelt DestroyWindow() som i sin tur genererar ett
WM_DESTROY meddelande, som anropar PostQuitMessage() som i sin tur genererar
ett WM_QUIT meddelande.
WM_CLOSE -> DestroyWindow() -> WM_DESTROY -> PostQuitMessage() -> WM_QUIT
Program har ocks<6B> s<> att dom fr<66>gar 'Vill du verkligen avsluta?'. Det kan vi
l<>gga till. D<> ska vi anv<6E>nda oss av MessageBox() som ser ut p<> detta vis:
int MessageBox(HWND hWnd, LPTCTSTR lpText, LPTCTSTR lpCaption, UINT uType);
Exempel p<> typer f<>r MessageBox'es:
MB_ABORTRETRYIGNORE
MB_ICONASTERISK
MB_ICONERROR
MB_ICONEXCLAMATION
MB_ICONHAND
MB_ICONSTOP
MB_ICONINFORMATION
MB_ICONQUESTION
MB_ICONWARNING
MB_OK
MB_OKCANCEL
MB_RETRYCANCEL
MB_YESNO
MB_YESNOCANCEL
Det g<>r i den m<>n det <20>r praktiskt att anv<6E>nda fler typer. Tex:
MessageBox(hwnd,"Vill du verkligen avsluta?","Avsluta",MB_YESNO |
MB_ICONQUESTION); f<>r v<>ran avslutningsfr<66>gare. Return-v<>rden <20>r: IDABORT,
IDCANCEL, IDIGNORE, IDNO, IDYES, IDRETRY och IDOK, med reservation f<>r att
jag kan ha gl<67>mt n<>gon.
case WM_DESTROY :
PostQuitMessage(0);
break;
case WM_SYSCOMMAND :
if(wParam == SC_CLOSE){ if(MessageBox(hwnd,"Vill du verkligen avsluta?", "Avsluta",MB_YESNO) == IDYES)
PostQuitMessage(0);
}
else return
DefWinProc(hwnd,message,wParam,lParam);
break;
En kort f<>rklaring av
MB_YESNOCANCEL
Det g<>r i den m<>n det <20>r praktiskt att anv<6E>nda fler typer. Tex:
MessageBox(hwnd,"Vill du verkligen avsluta?","Avsluta",MB_YESNO |
MB_ICONQUESTION); f<>r v<>ran avslutningsfr<66>gare. Return-v<>rden <20>r: IDABORT,
IDCANCEL, IDIGNORE, IDNO, IDYES, IDRETRY och IDOK, med reservation f<>r att
jag kan ha gl<67>mt n<>gon.
case WM_DESTROY :
PostQuitMessage(0);
break;
case WM_SYSCOMMAND :
if(wParam == SC_CLOSE){ if(MessageBox(hwnd,"Vill du verkligen avsluta?", "Avsluta",MB_YESNO) == IDYES)
PostQuitMessage(0);
}
else return
DefWinProc(hwnd,message,wParam,lParam);
break;
En kort f<>rklaring av
WM_SYSCOMMAND kan vara p<> sin plats f<>r alla er som inte orkar kolla upp
saken. Detta meddelande genereras n<>r n<>gonting v<>ljs antingen fr<66>n ett
f<>nsters system-meny eller snabbsystem-knapparna till h<>ger. V<>gar man ta
med lite kass ASCII?
.-------------------------------------------------.
|Ikon | Program-titel |Min|Max|Close|
|_____|_____________________________|___|___|_____|
| \|/
| |
System-meny Snabbval
Exempel p<> SYSCOMMAND-alternativ
SC_CLOSE 0x0F060 St<53>ng, avsluta f<>nstret
SC_DEFAULT ? Dubbelklick p<> system-menyn
SC_MAXIMIZE 0x0F030 Maximera
SC_MINIMIZE 0x0F020 Minimera
SC_RESTORE 0x0F120 <20>terst<73>ll
SC_ICON SC_MINIMIZE
SC_ZOOM SC_MAXIMIZE
Jaja, det d<>r kan ni s<>kert redan. Vi g<>r <20>ver till kontroller. Dessa <20>r
pre-definierade f<>nster-klasser och sonika beh<65>ver vi inte skapa nya klasser
utan kan <20>beropa dem direkt med CreateWindow(). Vi l<>gger detta under
initierings-fasen av ovanst<73>ende program, n<>mligen i WM_CREATE.
RECT rect;
HWND hButton;
----
switch(message) {
case WM_CREATE :
hButton = CreateWindow("BUTTON", "Quit", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
0, 0, 65, 25,hwnd,NULL, hThis
Jaja, det d<>r kan ni s<>kert redan. Vi g<>r <20>ver till kontroller. Dessa <20>r
pre-definierade f<>nster-klasser och sonika beh<65>ver vi inte skapa nya klasser
utan kan <20>beropa dem direkt med CreateWindow(). Vi l<>gger detta under
initierings-fasen av ovanst<73>ende program, n<>mligen i WM_CREATE.
RECT rect;
HWND hButton;
----
switch(message) {
case WM_CREATE :
hButton = CreateWindow("BUTTON", "Quit", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
0, 0, 65, 25,hwnd,NULL, hThisInst, NULL);
if(hButton == NULL) MessageBox(hwnd, "Kunde inte skapa knapp.", "Error",MB_OK);
break;
case WM_DESTROY :
PostQuitMessage(0); /* kommer g<>ra s<> att v<>ran MessageLoop f<>r 0 och
hela programmet avslutas */
break;
default : /* alla andra meddelanden hamnar h<>r men det <20>r ju logiskt */
return DefWindowProc(hwnd, message, wParam, lParam);
/* L<>t Windows avg<76>ra hur meddelandet ska hanteras, slags standardbehandling */
}
return 0;
}
Hmmmm... Ingen vidare placering, eller hur? N<>ja. L<>t oss r<>tta p<> det innan vi g<>r
vidare med att f<> knappen att fungera. (Observera RECT rect; som vi deklarerade i
exemplet ovan, men som egentligen inte anv<6E>nds f<>rrens nu).
case WM_CREATE :
GetClientRect(hwnd, &rect);
hButton = CreateWindow("BUTTON", "Quit", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
(rect.right / 2) - 30, rect.bottom-26, 65, 25,hwnd,NULL, hThisInst, NULL);
if(hButton == NULL) MessageBox(hwnd, "Kunde inte skapa knapp.", "Error",MB_OK);
break;
Koordinaterna *borde* g<>ra s<> att knappen hamnar i mitten-l<>ngst-ner, st<73>mmer inte
det s<> korrigera koordinaterna tills knappen <20>r d<>r du vill ha den. Innan jag
gl<EFBFBD>mmer, s<>h<EFBFBD>r ser RECT ut:
typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT;
GetClientRect() h<>mtar datan f<>r den rektangel som <20>r klient-omr<6D>det p<> ett
f<EFBFBD>nster. Den <20>r ocks<6B> relativ till sig sj<73>lv s<> left & top <20>r alltid 0.
F<EFBFBD>r att h<>mta ett f<>nsters rektangel relativ till sk<73>rmen anv<6E>nds
GetWindowRect(), men b<>gge fungerar p<> samma s<>tt.
Men varf<72>r funkar inte knappen? Helt enkelt d<>rf<72>r att vi l<>ter Windows hantera
dess funktionalitet ;-). Allvarligt, s<> beror det p<> att vi <20>verl<72>ter de
meddelanden som knappen generar till DefWndProc() som helt sonika inte g<>r n<>got
<EFBFBD>t dem. S<> l<>t oss <20>ndra p<> det. De flesta kontroller skickar sk notify-messages
till sina f<>r<EFBFBD>ldrar n<>r n<>got h<>nder dem, eller n<>r de f<>rv<72>ntar att n<>got ska
h<EFBFBD>nda. Notify-messages g<>r igenom WM_COMMAND, s<> vi f<>ngar upp dessa.
HWND hwndCtl;
long wNotifyCode;
----
case WM_COMMAND :
hwndCtl = (HWND) lParam;
wNotifyCode = HIWORD(wParam);
if(wNotifyCode == BN_CLICKED) PostQuitMessage(0);
break;
Trevligt. Nu kan vi avsluta v<>rat program med knappen. Fast det finns en liten
skavank i det h<>r programmet. L<>gger vi till ytterligare en knapp, s<> kommer
inte programmet att g<>ra n<>gon skillnad p<> dem och b<>da kommer d<>rf<72>r att skicka
ett PostQuitMessage(). Det vill vi ju inte. S<> vi modifierar den lite.
HWND hwndCtl;
long wNotifyCode;
case WM_COMMAND :
hwndCtl = (HWND) lParam;
wNotifyCode = HIWORD(wParam);
hButton = GetWindow(hwnd, GW_CHILD);
if((wNotifyCode == BN_CLICKED)&&(hwndCtl==hButton)) PostQuitMessage(0);
break;
Nu kommer bara den knapp som skapats f<>rst att avsluta programmet. En liten
f<EFBFBD>rklaring kan nog vara p<> sin plats. GetWindow() h<>mtar en f<>nsterhandle som har
en specifik relation till en annan f<>nsterhandle. I det h<>r fallet, barnet till
v<EFBFBD>rat huvudf<64>nster, vilket r<>kar vara knappen, eftersom vi skapade den med WS_CHILD.
HWND GetWindow(HWND hWnd, UINT uCmd);
Exempel p<> relationer i GetWindow():
GW_CHILD 5
GW_HWNDNEXT 2
GW_HWNDPREV 3
GW_OWNER 4
Nu <20>r det ju s<> att v<>ran knapp har en ganska statisk position. Den placeras n<>r
f<EFBFBD>nstret skapas, men det <20>r allt. Sedan sitter den bara d<>r. Det fixar vi igenom
att f<>nga upp WM_SIZE (jupp, ni gissade r<>tt, skickas n<>r storleken p<> ett
f<EFBFBD>nster <20>ndras). S<> vad ska vi g<>ra i WM_SIZE? K<>nner du att du b<>rjar f<> grepp
om det hela, s<> pr<70>va sj<73>lv att lista ut hur det ska se ut, m<>let <20>r en knapp
som dynamiskt flyttar sig efter hur stort f<>nstret <20>r. D<>rav att jag placerade
den i mitten :-).
Under tiden kan jag ta upp relationer mellan f<>nster som vi var inne p<> tidigare.
En F<>r<EFBFBD>lder kan ha hur m<>nga Barn som helst, men ett Barn kan bara ha en F<>r<EFBFBD>lder
(inga familjev<65>rden d<>r inte ;-). F<>rutom detta faktum finns det vissa andra saker
som g<>ller F<>r<EFBFBD>lder-Barn relationen. Ett Barn <20>r begr<67>nsat av sin F<>r<EFBFBD>lders klient
area, dvs ett Barn kan inte ritas utanf<6E>r sin F<>r<EFBFBD>lder. Ist<73>llet blir barnet
'clipped' som det kallas, arean som egentligen <20>r utanf<6E>r F<>r<EFBFBD>ldern ritas helt
enkelt inte. D<>remot kan (om inte WS_CLIPCHILDREN angetts) F<>r<EFBFBD>ldrar rita <20>ver
sina Barn. Syskon kan ocks<6B> rita <20>ver varann s<> l<>nge inte ett av syskonen har
WS_CLIPSIBLINGS. Relationer mellan f<>nster kan <20>ndras med tex SetParent(). Andra
funktioner g<>llande relationer <20>r GetParent(), IsChild() och EnumChildWindows().
Den sistn<74>mnda kan kr<6B>va en f<>rklaring.
BOOL EnumChildWindows( HWND hWndParent, WNDENUMPROC lpEnumFunc,
LPARAM lParam);
Denna funktion f<>rpassar alla Barn-handle's till en specifierad CallBack
funktion, lpEnumFunc. lParam <20>r en applikationsdefinierad parameter som
kan skickas med som ytterligare argument. Denna funktion <20>r mycket mer
p<EFBFBD>litlig <20>n att anropa GetWindow() i en loop d<> den inte p<>verkas av
yttre p<>verkan p<> Barnen.
N<EFBFBD>r en F<>r<EFBFBD>lder ska f<>rst<73>ras skickas en WM_DESTROY till alla Barn.
Som tidigare p<>pekats skickar system-definierade Barn sk Notify messages
till sina F<>r<EFBFBD>ldrar, men det <20>r viktigt att veta att alla messages skickas
direkt till Barnen, utan att processeras av F<>r<EFBFBD>ldern. Enda undantaget <20>r
om ett Barn har blivit Disabled, F<>r<EFBFBD>ldern mottar d<> alla input messages som
skulle f<>rpassats till Barnet f<>r att kunna avg<76>ra n<>r det <20>terigen ska
bli Enabled.
...
F<EFBFBD>r att <20>terigen <20>terg<72> till v<>ran knapp. H<>r <20>r ett exempel p<> hur det
skulle kunna se ut.
case WM_SIZE :
hButton = GetWindow(hwnd, GW_CHILD);
GetClientRect(hwnd, &rect);
MoveWindow(hButton,
(rect.right / 2) - 30, rect.bottom-26, 65, 25, TRUE);
UpdateWindow(hwnd);
break;
...
---* Leka med musen (det vill vi alla... )
Eftersom Windows i h<>gsta m<>jliga m<>n faller tillbaks p<> musen s<> kan det vara
passande att g<> igenom hur den fungerar och vad man kan t<>nkas ha f<>r kul med
den. Ist<73>llet f<>r att g<> igenom n<>got oproduktivt exempel d<>r n<>gon text skrivs
ut d<>r muspekaren befinner sig, ska vi ist<73>llet b<>rja direkt med att g<>ra
n<EFBFBD>gonting nyttigt med den. Vissa applikationer har som bekant en bakgrund som
<EFBFBD>r en interaktiv del av programmet sj<73>lvt, <20>ven om det i m<>nga fall bara handlar
om att byta just utseendet p<> bakgrunden. Men jag ska f<>rs<72>ka visa hur detta g<>r
till, igenom den flytande meny som ska dyka upp n<>r man h<>ger-klickar inom ett
f<EFBFBD>nsters klient-area. Nu dyger det dock upp en kompilator-kompabilitets fr<66>ga,
n<EFBFBD>mligen med hur resurser inkluderas i ett program. I Borlands kompilator <20>r
det bara en fr<66>ga om att inkludera en text-fil som heter *.rc. Hur det g<>r till
med just eran kompilator <20>r en sak som ni sj<73>lva f<>r utforska. Men med alla
'bloated' kompilatorer ska det inte vara n<>got st<73>rre problem. K<>r ni direkt
<EFBFBD>vers<EFBFBD>ttning till assembler blir det lite jobbigare, observa detta, men inte
sv<EFBFBD>rare eftersom assembler har den mest genuina approachen av alla. Eftersom
vi bara ska (iaf just nu) ha en meny s<> kan man i viss m<>n komma runt anv<6E>ndandet
av .rc filen. Men det blir till ut<75>varens eget infinitum indoles.
S<> vi b<>rjar med att l<>gga till v<>ran lilla popup-meny till en .rc fil.
POPPIE MENU {
POPUP "PopupMeny" {
MENUITEM "&Alt 1",601
MENUITEM "&Alt 2",602
}
}
Klar? Aurum. Vi ska nu se till att den kommer till anv<6E>ndning ocks<6B>. F<>r att
skapa en flytande popup meny kommer vi att anv<6E>nda TrackPopupMenuEx().
BOOL TrackPopupMenuEx(HMENU hmenu, UINT fuFlags,int x, int y, HWND hwnd,
LPTPMPARAMS lptpm);
Fr<EFBFBD>gan <20>r nu n<>r vi ska skapa denna meny. Ett f<>rslag <20>r WM_RBUTTONDOWN.
Eftersom ingen har m<>jlighet att i denna redan <20>verg<72>gna presens, protestera
s<EFBFBD> anv<6E>nder vi det.
POINT pt;
HMENU hMenu, hSubMenu;
----
case WM_RBUTTONDOWN :
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
ClientToScreen(hwnd, &pt);
hMenu = LoadMenu(hInst, "POPPIE");
hSubMenu = GetSubMenu(hMenu, 0);
TrackPopupMenuEx(hSubMenu, 0, pt.x, pt.y, hwnd, NULL);
DestroyMenu(hMenu);
break;
Egentligen inte s<> mycket konstigheter men vi g<>r igenom det <20>nd<6E> f<>r
s<EFBFBD>kerhets skull. POINT <20>r en struktur som inneh<65>ller x & y positionen av en
punkt.
typedef struct tagPOINT {
LONG x;
LONG y;
} POINT;
I deklarationen av WM_RBUTTONDOWN ser vi att lParam inneh<65>ller positionen
f<EFBFBD>r pekaren n<>r meddelandet postas. Sedan anv<6E>nder vi ClientToScreen() vilket
kan verka n<>got kryptiskt, men <20>r fullt logiskt n<>r man vet var det handlar
om.
BOOL ClientToScreen(
HWND hWnd,
LPPOINT lpPoint);
ClientToScreen() <20>vers<72>tter helt enkelt koordinaterna fr<66>n en punkt, relativ
till ett f<>nsters klientomr<6D>de till sk<73>rmkoordinater. Sedan laddar vi v<>ran
menu fr<66>n nuvurande instans' resurser med LoadMenu(). Vi anv<6E>nder oss av den
identifierare som vi anv<6E>nt oss av i .rc'n.
HMENU LoadMenu(
HINSTANCE hInstance,
LPCTSTR lpMenuName);
BOOL DestroyMenu(HMENU hMenu);
Efter detta plockar vi fram v<>ran sub-meny, som vi sedan anv<6E>nder n<>r vi
anropar TrackPopupMenuEx(). Hmmm. Den deklarationen hade jag redan haft
med, s<> var det ja. Eftersom v<>ran meny-resurs inte l<>ngre beh<65>vs, frig<69>r
vi den med DestroyMenu(). S<> l<>ngt har vi en meny. Men den <20>stadkommer
inte vidare mycket. Varf<72>r inte? (F<>r jag h<>ra i k<>r nu:) D<>rf<72>r att
meddelandena som menyn genererar hamnar hos DefWndProc(). Eller om ni sparat
tidigare <20>ndringar s<> ignoreras de totalt (de g<>r n<>mligen igenom
WM_COMMAND). Men innan vi g<>r vidare och ger v<>ran lilla popup-meny en orsak
f<EFBFBD>r sin existens s<> ska vi g<> in lite som hastigast p<> n<>gra system
definierade funktioner som finns f<>r att programmeraren ska slippa beh<65>va
ha med vissa grundl<64>ggande uppgifter i sitt program. En av dessa <20>r
GetOpenFileName().
BOOL GetOpenFileName(LPOPENFILENAME lpofn);
Denna struktur (LPOPENFILENAME) <20>r stor och sm<73>tt otymplig, men jag ska, s<>
gott jag kan, f<>rs<72>ka redovisa hur den anv<6E>nds. S<> vi skriver om v<>ran
WM_COMMAND. Observera att IDM_ALT1 kan bytas ut mot 601 eller om vi ska
anv<EFBFBD>nda den, s<> m<>ste vi ha en #define IDM_ALT1 601, antingen tillsammans
med includes'en i b<>rjan, eller i en separat .h fil (som givetvis m<>ste l<>nkas
till projektet i Borland).
char szFileHolder[256];
bool resp;
------
case WM_COMMAND :
switch(LOWORD(wParam)) {
case IDM_ALT1 :
OPENFILENAME ofn;
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.hInstance = hInst;
ofn.lpstrFilter = "All files\0 *.*\0Bitmap Files\0*.bmp\0\0";
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = NULL;
ofn.nFilterIndex = 0;
szFileHolder[0]='\0';
ofn.lpstrFile = szFileHolder;
ofn.nMaxFile = NULL;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = "V<>lj fil...";
ofn.Flags = OFN_FILEMUSTEXIST | OFN_LONGNAMES;
resp = GetOpenFileName(&ofn);
break;
default :
break;
}
UpdateName(hwnd);
}
Jahopp. F<>r att ni nu inte ska bli helt uppgivna <20>ver denna struktur s<> f<>r jag
v<EFBFBD>l g<> igenom lite mer detaljerat.
--
lStructSize = sizeof(OPENFILENAME);
Deklarerar att storleken p<> v<>r struktur <20>r lika stor som en OPENFILENAME
struktur. Se den som mer eller mindre standard.
--
hwndOwner = hwnd;
Vilket f<>nster som ska '<27>ga' dialogen n<>r den skapats.
--
hInstance = hInst;
Vilken instans det <20>r som vill skapa dialogen.
--
lpstrFilter = "All files\0 *.*\0Bitmap Files\0*.bmp\0\0";
De filter alternativ som ska finnas och deras motsvarande pattern. Observera
de NULL som anv<6E>nds f<>r att separera dem <20>t och att den avslutas med NULLNULL.
----
lpstrCustomFilter = NULL;
nMaxCustFilter = NULL;
Dessa anv<6E>nder vi inte. Har samma anv<6E>ndningsomr<6D>de som lpstrFilter, och fungerar
p<EFBFBD> liknande vis (fast sparas fr<66>n en dialog till n<>sta). nMaxCustFilter anger
l<EFBFBD>ngden p<> lpstrCustomFilter.
--
nFilterIndex = 0;
Anger vilket filter som ska vara aktivt n<>r dialogen skapas. Anges noll
s<EFBFBD> anv<6E>nds lpstrCustomFilter, <20>r denna NULL, s<> anv<6E>nds f<>rsta paret i
lpstrFilter.
--
szFileHolder[0]='\0';
lpstrFile = szFileHolder;
N<EFBFBD>r dialogen skapas anger denna medlem vilken fil som ska anv<6E>ndas vid
initialiseringen, NULL anger att en s<>dan inte beh<65>vs. N<>r dialogen
avslutats inneh<65>ller den filen som valts av anv<6E>ndaren.
--
nMaxFile = NULL;
Anger storleken p<> lpstrFile om denna anv<6E>nds.
--
lpstrFileTitle = NULL;
En buffer som mottar titeln p<> den valda filen.
--
nMaxFileTitle = 0;
Maxl<EFBFBD>ngden p<> lpstrFileTitle, ignoreras om denna <20>r NULL.
--
lpstrInitialDir = NULL;
Vilken katalog som ska vara <20>ppnad n<>r dialogen skapats. Vid NULL s<> anv<6E>nds
systemkatalogen.
--
lpstrTitle = "V<>lj fil...";
Titeln p<> dialogrutan. Om NULL anv<6E>nds systemdefinitionen ("<22>ppna" alt "Spara").
--
Flags = OFN_FILEMUSTEXIST | OFN_LONGNAMES;
Vilka flaggor som ska g<>lla.
Exempel p<> flaggor till GetOpenFileName():
OFN_ALLOWMULTISELECT 0x200 Till<6C>t att flera filer v<>ljs. Ifall den anv<6E>nds
s<> pekar lpstrFile till en buffer som inneh<65>ller
den aktiva katalogen och alla valda filer. Dessa
separeras med space (' '). F<>r de nya Explorer
dialogerna anv<6E>nds '\0' som separator och buffern
avslutas med '\0\0'.
OFN_CREATEPROMPT 0x2000 Anger att dialogen ska fr<66>ga anv<6E>ndaren om denne
vill skapa en icke-existerande fil.
OFN_EXPLORER 0x80000 Skapa en 'Explorer-lik' dialog.
OFN_FILEMUSTEXIST 0x1000 Den valda filen m<>ste existera, anv<6E>ndaren kan allts<74>
inte skriva in en fil som inte existerar.
OFN_LONGNAMES 0x200000 Visa filnamnen i Win32's l<>nga format ist<73>llet f<>r
i 8.3-format som <20>r standard.
OFN_NONETWORKBUTTON 0x20000 Visa inte N<>tverks-knappen.
OFN_PATHMUSTEXIST 0x800 Path'en m<>ste existera.
<EFBFBD>terst<EFBFBD>ende medlemmar tas inte upp utan l<>mnas till er sj<73>lva att unders<72>ka n<>rmare.
De har ingen effekt f<>r det exempel jag just redovisat.
---|
Muspekaren i sig sj<73>lv har ofta en funktionell betydelse i att tala om f<>r en anv<6E>ndare
vad han kan g<>ra. Pekaren talar ofta om vilken funktion som kan utf<74>ras just d<>r. N<>r
muspekaren placeras <20>ver en Edit-control s<> <20>ndras pekaren till en textmark<72>r, n<>r
applikationen <20>r upptagen visas ett timglas, n<>r man ska f<> hj<68>lp om ett f<>rem<65>l visas
ett fr<66>getecken, osv. Detta <20>r saker som oftast bara implementeras av standardkontrollerna
och bortses ifr<66>n av nya programmerare. F<>r att nu genomf<6D>ra detta anv<6E>nder vi LoadCursor()
och SetCursor().
HCURSOR LoadCursor( HINSTANCE hInstance, LPCTSTR lpCursorName);
HCURSOR SetCursor(HCURSOR hcur);
Ett exempel vore:
HCURSOR hCurse;
hCurse = LoadCursor(NULL, IDC_WAIT);
SetCursor(hCurse);
/* Operation som kommer att ta m<>rkbart med tid */
hCurse = LoadCursor(NULL, IDC_ARROW);
SetCursor(hCurse);
Sj<EFBFBD>lvklart kan man ocks<6B> ladda egna pekare som inkluderas som resurser i ens
applikation, dessa h<>mtas sedan med LoadCursor(), eller s<> kan man h<>mta en pekare
direkt fr<66>n en fil med LoadCursorFromFile(). Formatet m<>ste vara .ANI eller .CUR.
HCURSOR LoadCursorFromFile (LPCTSTR lpFileName);
Denna funktion kan ocks<6B> anv<6E>ndas f<>r att h<>mta systemdefinierade pekare. Till
exempel, l<>t oss s<>ga att Win.INI inneh<65>ller:
[Cursors]
Arrow = "arrow.ani"
Om vi d<> exekverar f<>ljande:
LoadCursorFromFile((LPWSTR)OCR_NORMAL);
S<EFBFBD> kommer pekaren, <20>tergiven i Arrow.ANI att h<>mtas. Returnerar NULL om funktionen
misslyckas. <20>vriga noteringar <20>r att pekaren inte ritas om f<>rrens den flyttas,
eller ritas om (tas bort och plockas fram igen).
---* Iam Tandem
---# Slarv, buggar & fel
Jag redan nu passa p<> att i f<>rhand be om urs<72>kt f<>r alla fel, slarv (jag vet att jag
slarvar med ben<65>mningen klass/struktur) och buggar som tyv<79>rr f<>tt plats i denna text.
Men om inte annat f<>r ni k<>nna p<> den andra halvan av programmering: debugging.
---# Slutord
Artikeln har blivit ganska l<>ng, men <20>nd<6E> tagit upp bara det absolut mest
grundl<64>ggande. <20>r det n<>gonting som jag missat, eller borde ta upp, s<>
p<>peka det, d<> kan det kanske tas upp i n<>gon framtida text. Som ni f<>rst<73>r
<20>r det ett stort omr<6D>de (d<>rav att det finns flertalet b<>cker om <20>mnet) och
exakt allt kan inte inkluderas. Jag hoppas d<>remot att jag gett er en
tillr<6C>ckligt inblick f<>r att kunna studera <20>mnet vidare. Det <20>r inte vidare
komplext, och med enkel initiation blir resten desto enklare. Jag skriver
g<>rna mer inom omr<6D>det om intresse finns. F<>rslag p<> saker att ta upp plus
medium f<>r framtida text skulle ocks<6B> uppskattas.
---# Standard prefixes till variabler
b bool
c char
dw long unsigned integer
f 16-bit bitfield (flags)
fn Function
h Handle
l long integer
lp long pointer
n short integer
p pointer
pt Long integer holding screen coordinates
w Short unsigned integer
sz Pointer to null-terminated string (zero)
lpsz Long pointer to null-terminated string
rgb Long integer holding RGB color values
Skriven av: R.G. Gazzaud E-Mail: Gazzaud@operamail.com
"Ignorans <20>r inte en urs<72>kt" - Adept 29
"Ipsa scientia potestas est" - Francis Bacon
" Thou what you wilt shall be the whole of the Law"
-Liber AL vel Legis I:40
-----------------------------------------------------------------------------
Ins<6E>ndare []
-----------------------------------------------------------------------------
Ins<6E>ndare som inte har blivit kommenterade eller besvarade stannar kvar tills
dom blir det, ni f<>r ta och skicka in brev till oss, kan du g<>ra p<>
diox1de@hacksweden.com.
--> Netscape 4.05 (Messenger) kryptering
Nu <20>r det jag som har en fr<66>ga, eftersom det inte <20>r n<>gon <20>n som har
skickat in n<>gra fr<66>gor. Men jag undrar om det <20>r n<>n som vet n<>gon
dokumentation eller c-script som har med algoritmen som krypterar
Netscape Messenger i Netscape Communicator 4.05. Jag har m<>rkt att om
du v<>ljer att Messenger ska komma ih<69>g l<>senordet till din mailserver
s<> sparas det i en fil /users/username/prefs.js. Kolla raden nedan
hur du nu hittar det krypterade l<>senordet.
user_pref("mail.pop_password", "krypterat passwd");
user_pref("mail.remember_password", true);
F<>rsta raden handh<64>ller det krypterade l<>senordet och den andra om du
valt att composer ska komma ih<69>g ditt l<>senord till ditt konto p<>
mailservern. F<>rsta raden finns allts<74> inte om du inte har satt andra
raden till "true"
keytrace@usa.net
--> CuteFTP 3.0.2 krypterings metoder
N<>r jag letade upp var de krypterade l<>senordet i Netscape Messenger
fanns s<> t<>nkte jag passa p<> att kolla det i CuteFTP, eftersom mina
kunskaper <20>r begr<67>nsade s<> kan jag inte kn<6B>cka dem, d<>rf<72>r skickar
jag in dom som ins<6E>ndare och se om det <20>r n<>gra seri<72>sa som har
teorier eller tips osv. Jag fann de krypterade l<>senordet i filen
/CuteFTP/smdata.dat som visserligen va v<>ldigt otydlig men det gick
<20>nd<6E> att se ungef<65>r var de krypterade l<>senordet befann sig.
De s<>g ut s<> h<>r:
ftp.sunet.se anonymous<08><><EFBFBD><EFBFBD><EFBFBD>
Jag vet att "<08><><EFBFBD><EFBFBD><EFBFBD> " som antagligen <20>r de krypterade l<>senordet
<20>r i klartext "me@u.com". N<>gra som har tillg<6C>ng till k<>llkoder som
dekrypterar krypterade l<>senord eller dokumentation som beskriver
algoritmen dom andv<64>nder kan maila den genast. Eller om ni har n<>gra
ideer eller teorier s<> kan ni maila dem s<> publicerar jag dem som
svar.
-----------------------------------------------------------------------------
Copyright []
-----------------------------------------------------------------------------
Sj<53>lvklart f<>r numret spridas var du vill, men detta verkst<73>lls p<> ett
villkor: att du inte <20>ndrar N<>GONTING i zinet.
-----------------------------------------------------------------------------
kill -9 666 []
-----------------------------------------------------------------------------
Slut p<> de intressanta, n<>sta steg nu <20>r allts<74> att sitta p<> IRC till n<>sta
nummer kommer.
-----BEGIN PGP SIGNATURE-----
Version: PGPfreeware 6.0.2i
iQA/AwUBN5zSsnRmgGlPBhFaEQLQngCgjAdjJAjiAqYXs9YTnGFjd0/VaXYAnj+Q
X3pmKDomoNWBQp8LyYIdwbqm
=estT
-----END PGP SIGNATURE-----