1651 lines
67 KiB
Plaintext
1651 lines
67 KiB
Plaintext
![]() |
-----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-----
|
|||
|
|