Welcome
[edit]
Intro
Hammer gave a 'suprise' class on COM, here's the log.
[edit]
The Log
[09:59] [TOPIC]@Treekiller (light@i.0wned.info) changes topic to 'Class Ended! - next class: now'
[10:00] <Prince_Heart> lol
[10:00] [JOIN] Martin\- (~Fisk@83.73.124.61.ip.tele2adsl.dk) has joined #hd-training
[10:00] <Martin\-> Cool
[10:00] <@HaNtU]uU[> uh oh.
[10:00] <@HaNtU]uU[> Tk, do you have a clean logger?
[10:00] <@HaNtU]uU[> as in no colorcode and such
[10:00] <@Treekiller> wait a sec
[10:00] <Prince_Heart> suppose this is a secret channel :D
[10:01] <Martin\-> Could you make the com with GeoIP? :P
[10:01] <@Hammer> it is
[10:01] [JOIN] SPKyle (SPKyle@131-197-045-062.dynamic.caiway.nl) has joined #hd-training
[10:01] <@Hammer> if there is a com object for GeoIP, yes
[10:01] <Martin\-> there is :)
[10:01] [PART] SPKyle (SPKyle@131-197-045-062.dynamic.caiway.nl) has left #hd-training
[10:01] <@Hammer> then yes, you can :)
[10:01] [JOIN] SPKyle (SPKyle@131-197-045-062.dynamic.caiway.nl) has joined #hd-training
[10:01] <SPKyle> okay, logging should be on now :)
[10:01] <Martin\-> on undernet there is some guy who created it.. I just cant figure it out :p
[10:01] <@HaNtU]uU[> SPKyle: cycling won't help.
[10:01] <@HaNtU]uU[> er
[10:01] <@HaNtU]uU[> oops, hi TK!
[10:02] <@Treekiller> ;)
[10:02] [MODE] @Treekiller (light@i.0wned.info) sets mode: -s
[10:02] <@HaNtU]uU[> thanks, i'll check once in a while, seeing ive got shitload to study :(
[10:02] <@Treekiller> okay
[10:03] <@Hammer> we're going to use CDO (or CDONTS) to send an email .. mainly because i've already got this nifty alias written and because most everyone already understands how email works
[10:03] <Prince_Heart> goody goody !!
[10:03] <amigo^^> com objects class?
[10:03] <amigo^^> when?
[10:03] <@Hammer> yes
[10:03] <@Hammer> now
[10:04] * amigo^^ waiting
[10:04] <amigo^^> :)*
[10:04] <@Hammer> best log, amigo^^
[10:04] <exoa> awesome
[10:04] <exoa> yeah good call
[10:04] <@Hammer> i have no idea how long this will take
[10:04] <exoa> let me turn this on
[10:04] <@Hammer> i hadn't planned on this, but we'll do it anyway :)
[10:05] * Prince_Heart got his video cam all set and running ....
[10:05] <exoa> wow.. i wonder how long logging has been on and i didn't realize it
[10:06] <exoa> wow monthly logs heh..
[10:06] <exoa> i bet i have some huge files
[10:06] <@Hammer> ok .. we'll just keep this informal and let TK edit out whatever he doesn't want :D
[10:06] <@HaNtU]uU[> sure we want everything ^^;
[10:06] <@Hammer> that'll let everyone ask questions as they occur to them
[10:06] <exoa> sweet
[10:07] <@Hammer> does everyone understand what and object and its methods and properties are?
[10:07] <Prince_Heart> Hammer - i don't know anything abt com - so i will just read - thats cool ?
[10:07] <@Hammer> yes, that's cool
[10:07] * amigo^^ knows nothing about com obj
[10:07] <@Hammer> you might pick it up quickly or i might lose you completely
[10:07] <amigo^^> but i can learn very fasg
[10:07] <amigo^^> *fast
[10:07] <Prince_Heart> same here :)
[10:07] <@Hammer> ok then .. let me start with a quick overview of objects
[10:08] <@Hammer> (very basic)
[10:08] <Prince_Heart> i hang up my gf call even :P
[10:08] <@Hammer> an object is a "thing"
[10:08] <@Hammer> for instance, we might have an object called a "car"
[10:08] <@Hammer> cars can have properties
[10:08] <@Hammer> car.color might be "blue" or "red"
[10:09] <@HaNtU]uU[> sorry to interrupt, for those who did object-oriented programming will be able to understand it quickly ^^;
[10:09] [QUIT] SPKyle (SPKyle@131-197-045-062.dynamic.caiway.nl) has quit IRC (Quit:)
[10:09] <@Hammer> car.type might be "SUV" or "luxery"
[10:09] <@Hammer> car.doors = 4
[10:09] <Prince_Heart> sorry Hammer for this - last sentence before i stop typing anything - won't it be good for u and for us all - if we use voice chat in yahoo/msn - specially for u since u wil be typing
[10:10] <@Hammer> nope
[10:10] <Prince_Heart> k
[10:10] <@Hammer> i don't use voice chat
[10:10] <exoa> me either
[10:10] <@Hammer> car.gastanksize might be 17 (for the number of gallons of petrol it holds)
[10:10] <@Hammer> etc.
[10:11] <amigo^^> i prefer it to be written here so it can be re-readed over and over
[10:11] <@Hammer> those things are properties
[10:11] <@Hammer> some properties can be changed .. the color can be changed if someone repaints it
[10:11] <@Hammer> some can't, like number of doors
[10:11] [JOIN] SPKyle (SPKyle@131-197-045-062.dynamic.caiway.nl) has joined #hd-training
[10:12] <@Hammer> a car object can also DO things, such as car.start and car.stop
[10:12] <@Hammer> those kinds of things are called methods
[10:13] <@Hammer> some objects have methods that let you change property values and some object properties are setable directly
[10:13] [JOIN] LostKid (maniac@ircd.efnet.cn) has joined #HD-Training
[10:13] <@Hammer> so, we have an object and we know an object has properties and methods
[10:14] <@Hammer> COM stands for Component Object Model
[10:15] <@Hammer> it describes a common structure that objects that subscribe to COM must follow
[10:15] <@Hammer> the details of what makes them COM or not COM aren't important for us
[10:16] <@Hammer> however, non-COM objects cannot be manipulated directly from the mIRC command line, and true COM objects can be, as we'll see shortly
[10:16] <@Hammer> one sec while i reformat my alias in notepad ;oP
[10:17] <@Hammer> ok .. done
[10:17] <@Hammer> now then, the first thing we need to do is make sure everyone can use either CDO or CDONTS objects
[10:18] <exoa> heh.. the names of those are comical
[10:18] <@Hammer> we simply need to try and open a COM object that uses CDO.Message or CDONTS.Message
[10:18] <@Treekiller> CDO(NTS) stands for?
[10:19] <@Hammer> CDO is Collaboration Data Objects
[10:19] <@Hammer> NTS adds for Windows NT Server
[10:19] <Prince_Heart> u guys rock !
[10:20] <@Hammer> ok, everyone try this command
[10:20] <@Hammer> /comopen cdoMessage CDO.Message
[10:20] * Opened Com 'cdoMessage' (CDO.Message)
[10:20] <@Hammer> you should see * Opened Com 'cdoMessage' (CDO.Message)
[10:20] <@Treekiller> *nod*
[10:20] <exoa> yep
[10:20] <amigo^^> done
[10:21] <@Hammer> now you have created (for you programmers out there, you have instantiated) a CDO.Message object and named it cdoMessage
[10:21] <@Hammer> to manipulate it, you'll use whatever name you gave it when you created it, rather than the CDO.Message part
[10:21] <@HaNtU]uU[> or "You have a CDO.Message object instance" :)
[10:22] <@Hammer> yes
[10:22] [JOIN] Godlike` (~user@124.217.12.120) has joined #HD-Training
[10:22] <@Hammer> you could have named your object Hal, with /comopen Hal CDO.Message
[10:22] <@Hammer> then you'd manipulate the Hal object
[10:22] <@HaNtU]uU[> oh, no.. not HAL :(
[10:22] <@Hammer> one sec .. brb
[10:23] <exoa> me too.. i gotta pee :P
[10:23] <@Hammer> so did i
[10:23] <@Hammer> heh
[10:24] <@HaNtU]uU[> i just did on my pants, so lets go on.
[10:24] <@Hammer> one of the common programming naming conventions in use many years ago was using 3 letters to describe what type a variable/object was and then the function that variable/object performed or stored
[10:25] <@Hammer> thus, i named mine cdo (for CDO object) Message (for, well, Message!)
[10:25] <@Hammer> it just makes it more selfdocumentary
[10:25] <@Hammer> you'll remember when you read it years from now what that variable/object was used for
[10:25] <@Hammer> same while you're coding it!
[10:26] <@HaNtU]uU[> its a matter of coding style :)
[10:26] <@Hammer> yes
[10:26] <@HaNtU]uU[> some people are just plain messy *cough*
[10:27] <@Hammer> when you read code that uses COM objects, you'll usually see objName.Method() or objName.Property (without the parentheses)
[10:28] <@Hammer> in order to translate that into mIRC-based $com scripting, you have to know whether you're looking at a method or a property
[10:29] <@Hammer> since we all have our cdoMessage object instance opened, let me put the next command in here and then i'll explain what it does before we actually use it
[10:29] <@Hammer> //echo -q $com(cdoMessage, Subject, 4, *bstr, Test message from # )
[10:29] <@Hammer> err .. echo -a
[10:29] <@Hammer> or ati
[10:29] <@Hammer> first
[10:30] <@Hammer> $com() is how we manipulate our object
[10:30] <@Hammer> the first parameter of it is the object name (cdoMessage .. or Hal) that we instantiated/created earlier
[10:31] <@Hammer> you can (and will) have many COM object open at the same time, so mIRC needs to know which one you want to talk to
[10:31] <@Hammer> $com(cdoMessage,
[10:31] <amigo^^> 1
[10:31] <@Hammer> we
[10:31] 1
[10:31] <@Hammer> we'll get there, but try not to get ahead of me just yet ;)
[10:31] <@Hammer> the next parameter is Subject, and that is a property that holds a string
[10:32] <@Hammer> this is what will appear in the Subject line of the email we'll send out
[10:32] <@Hammer> $com(cdoMessage, Subject
[10:33] <@Hammer> the next parameter is what kind of call we're making to the object, and it can be a little complex to understand, but it's essentially simple
[10:33] <@Hammer> let me paste out of the help file here
[10:33] <@Hammer> method - Combination of the following values added together:
[10:33] <@Hammer> 1 = DISPATCH_METHOD
[10:33] <@Hammer> 2 = DISPATCH_PROPERTYGET
[10:33] <@Hammer> 4 = DISPATCH_PROPERTYPUT
[10:33] <@Hammer> 8 = DISPATCH_PROPERTYPUTREF
[10:33] <@Hammer> Method, we know
[10:34] <@Hammer> PropertyGET is how we retrieve a value already in a property
[10:34] <@Hammer> and obviously PropertyPUT is how we change it
[10:35] <@Hammer> PropertyPutREF has to do with passing in objects, which is more advanced than we'll get for this intro
[10:35] <exoa> so basically 1 is do something, 2 is read something, and 4 is write something?
[10:35] <@Hammer> basically, yes
[10:36] <@Hammer> however, sometimes you need to AND 1 and 4 (to get 5) to use a method to write
[10:36] <@Treekiller> that'd be 'writing with/via a method'?
[10:36] <@Hammer> yes
[10:36] <@Treekiller> okay
[10:36] <exoa> cool
[10:36] <@Hammer> that's USUALLY done with overloading
[10:37] <@Hammer> but not all languages allow operator overloading, so if it was written in VB, for instance, there might be an actual method written to change a property value
[10:37] <@Hammer> this is normally done if there are other housekeeping/errorchecking/validation that needs to be done whenever that value is changed
[10:39] <@Hammer> going back to the car object, a car dealer's car.color object might be directly changeable (with 4) but an insurance agent's car.color would most likely require a method as well (with 5) because they charge higher rates for certain color cars (red and black are more expensive to insure)
[10:39] <@Treekiller> got it :)
[10:40] <@Hammer> so, $com(cdoMessage, Subject, 4, means that we're simply adding the subject line to our currently blank email
[10:40] <Prince_Heart> lol my head is getting bigger here - i can feel it :P
[10:41] <@Hammer> the next parameter is what kind of data we're sending the property (or method, if it requires data)
[10:41] <@Hammer> that is, what data type it is
[10:41] <@Hammer> can be: i1, i2, i4, ui1, ui2, ui4, int, uint, r4, r8, cy, date, decimal, bool, bstr, variant, dispatch, unknown, error.
[10:41] <@Hammer> i1 is an Integer value (no decimal)
[10:41] [PART] LostKid (maniac@ircd.efnet.cn) has left #HD-Training
[10:41] <@Hammer> 1 bit
[10:42] <@Hammer> so i1 is a binary value
[10:42] <@Hammer> i2 is 2 bits (00, 01, 10, 11)
[10:42] <@Hammer> i4 is 4 bits (hex)
[10:42] <@Hammer> ui1 is Unsigned (only positive) Integer
[10:43] <@Hammer> r4 is Real 4 bits
[10:43] <@Hammer> that means it includes the decimal
[10:43] <@Hammer> cy is currency
[10:43] <@Hammer> bstr is a string
[10:44] <@Hammer> variant you won't use
[10:44] <@Hammer> i don't think mIRC can pass a true variant, anyway
[10:44] <@Hammer> dispatch is what you use if you're creating or passing objects
[10:44] <@Hammer> unknown and error are both special kinds of a variant which you will never pass but you might receive back
[10:45] <Prince_Heart> brb
[10:45] <@Hammer> one quick note with bstr
[10:45] <@Hammer> you will always want to prefix it with a *
[10:46] <@Hammer> this makes mIRC create and pass the string to the object and then allows mIRC to destroy the memory it created to hold that string to pass it
[10:46] <@Hammer> it's a C/C++ thing, nothing you really need to stress about
[10:46] <@HaNtU]uU[> pointer!
[10:46] <@HaNtU]uU[> :o
[10:46] <exoa> so you probably don't need to with the others since they wont really be big enough?
[10:46] <@Hammer> yes
[10:47] <@Hammer> not exactly, exoa
[10:47] <@HaNtU]uU[> depending on what you want to pass.
[10:47] <@HaNtU]uU[> is there a limit on how big bstr can be?
[10:47] <@Hammer> actually, i don't really recall
[10:48] <@Hammer> off the top of my head, i'd say most likely 947, just like normal
[10:49] <@Hammer> if you don't use *bstr, just bstr, then (iirc) you can end up with a memory leak or an object crash (or maybe even a mIRC crash in some cases)
[10:50] <@Hammer> you can search on mirc.com forums for *bstr and see where Khaled explained it
[10:50] <@Hammer> or you can just take it from me, on faith, and just always go with *bstr and forget why :)
[10:51] <@Hammer> in actuallity, you won't use most of those data types, you'll almost always use just a few
[10:51] <@Hammer> you'll use *bstr, dispatch, int (or uint) and sometimes decimal
[10:52] <@Hammer> the others are available for those who know how (or want to learn and use)
[10:52] <@Hammer> i've used all of them at one point or another, but mostly i just use *bstr, int and dispatch
[10:52] <@Hammer> brb .. need another drink ;)
[10:53] <@Hammer> ok
[10:53] <@Hammer> now for the whole command again
[10:53] <exoa> ok this is back tracking, but what is a passive object?
[10:53] <exoa> nevermind
[10:53] <@Hammer> //echo -ati $com(cdoMessage, Subject, 4, *bstr, Test message from # )
[10:53] <exoa> i missread that
[10:54] <@Hammer> heh
[10:54] <exoa> i will stay awake.. i have the power of caffine
[10:54] <@Treekiller> I used -a only
[10:54] <@Hammer> this command will add the string "Test message from #hd-training" to the Subject property of our cdoMessage object
[10:54] <@Hammer> and it'll hold it there until we destroy the object instance
[10:55] <@Hammer> (handy, don't you think?)
[10:55] <exoa> is it in memory?
[10:55] <exoa> like in ram?
[10:55] <@Hammer> it is indeed
[10:55] <exoa> cool
[10:55] <@Hammer> better yet .. let me alter that command slightly
[10:56] <@Hammer> //say -> $com(cdoMessage, Subject, 4, *bstr, Test message from # )
[10:56] <@Hammer> -> 1
[10:56] <@Hammer> everyong type that
[10:56] <exoa> -> 1
[10:56] <@Hammer> i know amigo already did ;)
[10:57] <Prince_Heart> -> 1
[10:57] <Martin\-> -> 1
[10:57] <@Hammer> $com() will return either a 0 or a 1 .. any guesses what it might mean?
[10:57] <Martin\-> false and true
[10:57] <Prince_Heart> true or false ?
[10:57] <Martin\-> ?
[10:57] <exoa> bool
[10:57] <Prince_Heart> lol
[10:57] <@Hammer> not really
[10:57] <Martin\-> )#!¤
[10:57] <@Treekiller> -> 1
[10:57] <Martin\-> :P
[10:57] <exoa> error/no error
[10:57] <exoa> ?
[10:57] * Prince_Heart goes back to his seat
[10:57] <@Hammer> yup
[10:58] <@Hammer> failure/success
[10:58] <Martin\-> close, we were close!
[10:58] <@Treekiller> 1 = like 220 in HTTP?
[10:58] <@Treekiller> 220 Okay
[10:58] <@Treekiller> err, 200
[10:58] <@Hammer> 4XX/2XX
[10:58] <@Hammer> one more reformat :)
[10:59] <exoa> 0 = $null in a if ($identifier) { statement in mirc.. if the $identifier doesn't return something (1) then it's null (0) right?
[10:59] <@Hammer> -> cdoMessage.Subject = Test message from #hd-training ¤ Succeeded
[10:59] <@Hammer> //say -> cdoMessage.Subject = Test message from # ¤ $iif($com(cdoMessage, Subject, 4, *bstr, Test message from # ),Succeeded,Failed)
[11:00] <exoa> -> cdoMessage.Subject = Test message from #HD-Training ¤ Succeeded
[11:00] <Prince_Heart> -> cdoMessage.Subject = Test message from #hd-training ¤ Succeeded
[11:01] <@Hammer> this is how you would write your script when you first go at it, so you can see exactly which command is being executed (either with /say or /echo) and where your script fails
[11:01] <@Hammer> the -> at the beginning ensures that you have SOMEthing to echo/say
[11:01] <Prince_Heart> cool
[11:01] <Prince_Heart> damm brb rain
[11:01] <@Treekiller> -> cdoMessage.Subject = Test message from #hd-training ¤ Succeeded
[11:02] <@Hammer> //say cdoMessage.Sender $iif($com(cdoMessage, Sender, 4, *bstr, your@email.com), Succeeded, Failed)
[11:02] <@Hammer> cdoMessage.Sender Succeeded
[11:03] <exoa> cdoMessage.Sender Succeeded
[11:03] <@Hammer> for the next command, you'll need to substitute your REAL email address (which we don't need to know) .. $com(cdoMessage, To, 4, *bstr, your@REALemailAddress.com)
[11:04] <@Hammer> you'll need someplace valid to send this email
[11:04] <exoa> cdoMessage.Sender Succeeded
[11:04] <@Treekiller> as in 'existing'? or 'access to'?
[11:04] <@Hammer> such as //say cdoMessage.To $iif($com(cdoMessage, Tor, 4, *bstr, Hammer@dal.net), Succeeded, Failed)
[11:04] <@Hammer> access to
[11:05] <@Hammer> so you can see that it worked!!!
[11:05] <@Treekiller> okies :)
[11:05] <@Hammer> note: Hammer@dal.net is not working right now, so don't bother trying to send ME any email
[11:05] <@Treekiller> cdoMessage.To Failed
[11:06] 0
[11:06] <@Hammer> not Tor, sorry .. typo
[11:06] 1
[11:06] <@Hammer> $com(cdoMessage, To, 4, *bstr, your@email.com)
[11:06] <@Treekiller> cdoMessage.To Succeeded
[11:06] <exoa> cdoMessage.To Succeeded
[11:06] <@Hammer> cdoMessage.To Succeeded
[11:07] <@Hammer> cdoMessage.TextBody Succeeded
[11:07] <@Hammer> //say cdoMessage.TextBody $iif($com(cdoMessage, TextBody, 4, *bstr, This is a test. Hope you like it!), Succeeded, Failed)
[11:07] <exoa> cdoMessage.TextBody Succeeded
[11:08] <@Treekiller> cdoMessage.TextBody Succeeded
[11:08] <@Treekiller> this does 'do' the com command, doesn't it?
[11:08] <@Hammer> let's wait for Prince_Heart and Martin\- to get back
[11:08] <@Hammer> yes and no
[11:08] <@Hammer> these are not methods
[11:08] <@Hammer> so no
[11:08] <Prince_Heart> back
[11:08] <@Hammer> but they ARE altering property values, so yes :)
[11:09] <Prince_Heart> i was reading stuffs being before
[11:09] <Prince_Heart> tols*
[11:09] <Prince_Heart> told
[11:09] <Martin\-> me too
[11:09] <Martin\-> just go on Hammer :)
[11:09] <@Hammer> ok, catch up with the commands so far
[11:09] <@Hammer> i'll brb .. cat wants food
[11:09] <Prince_Heart> cdoMessage.TextBody Succeeded
[11:09] <Prince_Heart> k
[11:09] <@Hammer> don't forget .To
[11:09] <Prince_Heart> heavy rain here
[11:09] <Prince_Heart> got all wet
[11:09] <Martin\-> I was AFK, so I just stayed.. :)
[11:09] <Prince_Heart> was trying to get cloths off the line
[11:10] <Prince_Heart> if i get dc`ed cause of power cut - someone plz get me the logs
[11:10] <Prince_Heart> this is really GOOD
[11:10] <@Treekiller> I'm logging, don't worry :)
[11:11] <Prince_Heart> thx tk :)
[11:11] <exoa> me too
[11:11] <Prince_Heart> thx exoa
[11:12] <Prince_Heart> weather in india is one thing u can't be sure off - few hrs ago it was hot - so i washed few cloths and sudden rain
[11:12] <@Hammer> you didn't do the cdoMessage.To yet, Prince_Heart/Martin\-
[11:12] <@Hammer> without that, you won't be able to send it
[11:13] <Prince_Heart> ooo think i missed out a lot already
[11:13] <Prince_Heart> hmm
[11:13] <@Treekiller> you can always read back later
[11:13] <Prince_Heart> u can go ahead Hammer - i will just scroll up and try to read thx
[11:13] <@Hammer> //say cdoMessage.To $iif($com(cdoMessage, To, 4, *bstr, SirHammer@gmail.com), Succeeded, Failed)
[11:14] <@Hammer> use your email address there, not mine
[11:14] <Prince_Heart> cdoMessage.To Succeeded
[11:14] <Prince_Heart> oh
[11:14] <Prince_Heart> cdoMessage.To Succeeded
[11:14] <@Hammer> :)
[11:14] <@Hammer> now then
[11:14] <Prince_Heart> that's in my outlook eh
[11:14] <Prince_Heart> k
[11:14] <Prince_Heart> n thx tk - im logging atm - so can read too :P
[11:15] <@Hammer> let's see just what we value we have set for the Subject
[11:15] <@Hammer> we've PropertyPUT our values in, so let's PropertyGET one
[11:15] <@Hammer> this is how you check an object.property value
[11:15] <Prince_Heart> Hammer - u do teach with real basic and easy to understand way :)
[11:15] <Prince_Heart> cheerz
[11:15] <@Hammer> first, you make the $com call
[11:16] <@Hammer> and then you check $com().result
[11:16] <@Hammer> so
[11:16] <@Hammer> //say cdoMessage.Subject $iif($com(cdoMessage, Subject, 2), Succeeded, Failed)
[11:16] <@Hammer> cdoMessage.Subject Succeeded
[11:17] <@Hammer> but, that doesn't give you what the value is yet, soooo......
[11:17] <Prince_Heart> cdoMessage.Subject Succeeded
[11:17] <Prince_Heart> yeah
[11:17] <@Hammer> cdoMessage.Subject Test message from #hd-training
[11:17] <@Hammer> oops
[11:17] <@Hammer> //say cdoMessage.Subject = $iif($com(cdoMessage, Subject, 2), $com(cdoMessage).result, Failed)
[11:17] <@Hammer> cdoMessage.Subject = Test message from #hd-training
[11:17] <Martin\-> cdoMessage.TextBody Succeeded
[11:17] [JOIN] _exoa (none@66.252.12.155) has joined #HD-Training
[11:18] <Prince_Heart> cdoMessage.Subject Failed
[11:18] <@Hammer> //say cdoMessage.Subject = $iif($com(cdoMessage, Subject, 2), $com(cdoMessage).result, Failed)
[11:18] <_exoa> k
[11:18] <Prince_Heart> o.O
[11:18] [QUIT] exoa (none@is.a.unix-god.biz) has quit IRC (SVSKilled: Ghost command used by _exoa!none@66.252.12.155)
[11:18] <Martin\-> cdoMessage.To Succeeded
[11:18] [NICK] _exoa is now known as exoa
[11:18] <@Hammer> what's the last line you saw, exoa?
[11:18] <exoa> [05:15] (Prince_Heart) cdoMessage.To Succeeded
[11:18] <exoa> [05:15] (Hammer) :)
[11:18] <Prince_Heart> cdoMessage.Subject Failed
[11:19] <Martin\-> cdoMessage.Subject Succeeded
[11:19] <Prince_Heart> hmm
[11:19] <Martin\-> cdoMessage.Subject = Test message from #CyberNoid
[11:19] <Martin\-> cdoMessage.Subject = Test message from #CyberNoid
[11:19] <@Treekiller> cdoMessage.Subject Succeeded
[11:19] <@Treekiller> cdoMessage.Subject = Test message from #hd-training
[11:19] -Hammer:@#hd-training- can you show exoa what he missed in PM?
[11:19] <Martin\-> Ok, now I'm in again >:)
[11:19] <Prince_Heart> im trying //say cdoMessage.Subject $iif($com(Test message from #hd-training, 2), Succeeded, Failed)
[11:19] [@#hd-training] <Treekiller> okay
[11:19] <Prince_Heart> or ...
[11:19] <@Treekiller> exoa, check your PM
[11:19] <Prince_Heart> 1st one
[11:19] <Prince_Heart> lol
[11:20] <@Hammer> not that one
[11:20] <@Hammer> //say cdoMessage.Subject = $iif($com(cdoMessage, Subject, 2), $com(cdoMessage).result, Failed)
[11:20] <Prince_Heart> cdoMessage.Subject = Test message from #hd-training
[11:20] <Martin\-> cdoMessage.Subject = Test message from #CyberNoid
[11:20] <Martin\-> lol
[11:20] <Martin\-> :S
[11:20] <Prince_Heart> o.O
[11:20] <Prince_Heart> hmmm
[11:20] <Prince_Heart> i have to go thru this again
[11:21] <@Hammer> do you understand how that command line works?
[11:21] <Prince_Heart> later though
[11:21] <Prince_Heart> a lil
[11:21] <Prince_Heart> but i will get it
[11:21] <@Hammer> do you understand how $iif work?
[11:21] <@Hammer> works
[11:21] <Martin\-> Well.. we put the 'test message from #' into the memory?
[11:21] <Martin\-> ye
[11:21] <@Hammer> yes
[11:21] <Prince_Heart> yeah got that part
[11:21] <exoa> -> 1
[11:22] <Prince_Heart> and the memory stuffs yes
[11:22] [@#hd-training] <Treekiller> to, subject, message right?
[11:22] <exoa> i think i've done all these tk
[11:22] <Prince_Heart> this is easy - thought this would be real hard to understand :P
[11:22] -Hammer:@#hd-training- yes
[11:22] <@Treekiller> okays, exoa :)
[11:22] <exoa> was the last command the .to one?
[11:22] <@Treekiller> no, the first one
[11:22] <@Hammer> no, .TextBody was
[11:22] <exoa> err
[11:22] <Martin\-> it is easy.. just need to find the way
[11:22] <exoa> textbody
[11:22] <exoa> yeah i was looking at ph's catching up
[11:23] <exoa> heh
[11:23] <Prince_Heart> thx
[11:23] <exoa> i only missed like a minute and a half
[11:23] <@Hammer> yup
[11:23] <Prince_Heart> i missed a lot - but i read some ^^ and back now
[11:23] cdoMessage.TextBody Succeeded
[11:23] <@Hammer> ok, so now we have seen how to set a property's value and how to read it back
[11:23] <@Hammer> any questions on that so far?
[11:24] <Prince_Heart> not now thx Hammer
[11:24] <exoa> cdoMessage.Subject = Test message from #HD-Training
[11:24] <exoa> cool
[11:25] <@Hammer> cdoMessage.TextBody = This is a test. Hope you like it!
[11:25] <@Hammer> //say cdoMessage.TextBody = $iif($com(cdoMessage, TextBody, 2), $com(cdoMessage).result, Failed)
[11:25] <Martin\-> cdoMessage.TextBody = This is a test. Hope you like it!
[11:25] <@Treekiller> cdoMessage.TextBody = This is a test. Hope you like it!
[11:25] <exoa> cdoMessage.TextBody = This is a test. Hope you like it!
[11:25] <Prince_Heart> cdoMessage.TextBody = This is a test. Hope you like it!
[11:25] <Prince_Heart> lol
[11:25] <@Hammer> are we ready to go on to a method call now? :)
[11:25] <@Treekiller> *nods*
[11:25] <exoa> yes!
[11:26] <@Hammer> methods, if you remember, are the "commands" that objects can "do"
[11:26] <@Hammer> and what might we "do" with this email we've written?
[11:26] <Prince_Heart> send it
[11:26] <@Treekiller> send it? :)
[11:26] <@Hammer> ok :)
[11:26] <@Hammer> anyone remember what the number what for method?
[11:26] <@Hammer> PropertyGet was 2, PropertyPut was 4
[11:26] <Martin\-> 1
[11:27] <exoa> 5
[11:27] <@Hammer> right
[11:27] <@Hammer> 1
[11:27] <Martin\-> wohoo
[11:27] <exoa> oh yeah
[11:27] <exoa> write with a method was 5
[11:27] <@Hammer> exactly
[11:27] <@Hammer> so, what might our $com() look like?
[11:27] <exoa> man if it wasn't 5:30 am this would be way easier
[11:27] <exoa> lol
[11:27] <@Hammer> 05:26:16 here
[11:27] <@Treekiller> $com(cdoMessage,Methodname,1) ?
[11:28] <Martin\-> 11:00 pm here :p
[11:28] <@Hammer> yes, but what's the method name?
[11:28] <@Treekiller> send?
[11:28] <@Hammer> and so the $com would be?
[11:28] <exoa> $com(cdoMessage, Send, 1)
[11:28] <@Treekiller> $com(cdoMessage,send,1)
[11:28] <@Treekiller> *Send,
[11:28] <@Hammer> and our //say would look like?
[11:28] <exoa> *copied from the previous example*
[11:28] <exoa> ima cheater
[11:28] <exoa> lol
[11:28] <Prince_Heart> $com(cdoMessage, Send,1)
[11:28] <Martin\-> //say cdoMessage.Send $iif($com(cdoMessage,send, 1), $com(cdoMessage).result, Failed)
[11:28] <Martin\-> ?
[11:29] <@Hammer> nope
[11:29] <@Hammer> but close
[11:29] <Prince_Heart> slow down u guys
[11:29] <Prince_Heart> lol
[11:29] <Martin\-> hrm
[11:29] <Prince_Heart> nvm carry on :P
[11:29] <@Treekiller> Send? does caps matter?
[11:29] <@Hammer> get rid of the .result part (we're not retrieving any values here)
[11:29] <Martin\-> ohh
[11:29] <@Hammer> caps don't matter
[11:29] <@Hammer> except for readability
[11:29] so: didn't match anyone
[11:29] <@Treekiller> so: //say cdoMessage.Send $iif($com(cdoMessage,send, 1), $com(cdoMessage), Failed)
[11:30] <Martin\-> ye?
[11:30] <@Hammer> nope
[11:30] [@#hd-training] <Treekiller> I wonder if this is going to work with McAfee running
[11:30] <Martin\-> progid..? (I think its a stupid guess, but what the.."
[11:30] <@Hammer> s/$com(cdoMessage).result/Succeeded/
[11:30] <Prince_Heart> cdoMessage.Send Failed
[11:30] <Martin\-> cdoMessage.Send Failed
[11:30] <Martin\-> cdoMessage.Send Failed
[11:31] <Prince_Heart> and thats freeze my pc for like 3 sec
[11:31] <Martin\-> lol mine too
[11:31] <Martin\-> cdoMessage.Send Failed
[11:31] <@Hammer> cdoMessage.Send() Succeeded
[11:31] <@Hammer> //say cdoMessage.Send() $iif($com(cdoMessage, Send, 1), Succeeded, Failed)
[11:31] <Martin\-> Arh
[11:31] <@Treekiller> cdoMessage.Send() Succeeded
[11:31] <exoa> could you do //say cdoMessage.Send = $iif($com(cdoMessage, Send, 1), Succeeded, $com(cdoMessage, Error, 2))
[11:31] <Martin\-> cdoMessage.Send() Failed
[11:31] <exoa> ?
[11:31] <Prince_Heart> cdoMessage.Send() Failed
[11:31] <Martin\-> cdoMessage.Send() Failed
[11:31] <Martin\-> wtf!
[11:31] <Prince_Heart> 10 sec lag
[11:32] <@Hammer> Martin\-: did you include a .To ?
[11:32] <Martin\-> hm, I dont think so
[11:32] <@Hammer> don't you think that might be why?
[11:32] <Martin\-> yeah
[11:32] <exoa> cdoMessage.Send() Failed
[11:33] <@Hammer> which is why i told everyone to at LEAST to the .To command
[11:33] <Prince_Heart> oh sorry guys i gotta go to see my accountant in half hr - got an appointment
[11:33] <@Treekiller> so, what happened now? you sent it like Outlook would?
[11:33] <Prince_Heart> i will keep this channel open if its ok
[11:33] <@Hammer> it is
[11:33] <Prince_Heart> thx and nice works guys - will chck this later
[11:34] <@Hammer> TK: yes, exactly like Outlook would
[11:34] <Prince_Heart> bbl
[11:34] <@Hammer> in fact, Outlook uses CDO
[11:34] <Martin\-> cdoMessage.To Succeeded
[11:34] <@Hammer> go check your email to see if you have recieved your test email :)
[11:35] <@Treekiller> I haven't, but that could be gmail
[11:35] <exoa> -> 1
[11:36] <exoa> hmm im trying to figure out if i skipped one.. tho i don't think i did
[11:36] <exoa> cdoMessage.Subject = Test message from #HD-Training
[11:36] <exoa> cdoMessage.To = "nmedley@alltel.net" <nmedley@alltel.net>
[11:37] <exoa> cdoMessage.Sender = "nmedley@alltel.net" <nmedley@alltel.net>
[11:37] <Martin\-> doh.. I just format my comp yester day.. and I havn't setup the mail yet, lol
[11:37] <exoa> cdoMessage.TextBody = This is a test. Hope you like it!
[11:37] <exoa> hmm
[11:37] <exoa> cdoMessage.Send() Failed
[11:37] <exoa> //say cdoMessage.Send() $iif($com(cdoMessage, Send, 1), Succeeded, Failed)
[11:37] <exoa> is that the right command?
[11:38] <@Hammer> yes
[11:38] <@Treekiller> Hammer: is the info still in your 'buffer', so if you'd change something (the .to), you can re-send it without typing in the rest?
[11:38] <Martin\-> Hammer, can you read something from the .dll file with $com.. like ex, the triggers?
[11:39] <@Hammer> Treekiller: the object still exists, all we have done is executed the Send() method
[11:39] <@Hammer> Martin\-: if the dll you're talking about is registered as a COM object, then yes, otherwise no
[11:39] <Martin\-> oki :)
[11:40] <@Treekiller> cdoMessage.To Succeeded
[11:40] <@Treekiller> cdoMessage.Send() Failed
[11:40] <@Treekiller> hm
[11:41] <@Treekiller> cdoMessage.Subject Succeeded
[11:41] <@Treekiller> cdoMessage.To Succeeded
[11:41] <@Hammer> in fact, you can program your own COM dll, assuming you know how of course, and use /comreg myCOMobject.dll
[11:42] <@Treekiller> cdoMessage.TextBody Succeeded
[11:42] <Martin\-> yeah :) you need to do that, to make the GeoIPCountry.dll to work
[11:42] <exoa> cdoMessage.Send() Failed
[11:42] <@Treekiller> cdoMessage.Send() Failed
[11:42] <@Treekiller> the send seems to fail :/
[11:42] <@Hammer> cdoMessage.Send() Failed
[11:43] <@Hammer> hmm .. perhaps the Send() method doesn't allow you to resend
[11:43] <@Hammer> i'd have to go check
[11:45] <Martin\-> Component Object Model.
[11:45] <@Hammer> http://windowssdk.msdn.microsoft.com/en-us/library/ms527175.aspx
[11:45] <@Hammer> that is for CDONTS but probably applies to CDO as well
[11:46] <exoa> cdoMessage.Send = 0
[11:46] <@Hammer> look in the Remarks section
[11:46] <exoa> mine never sent the first time tho
[11:46] <@Hammer> The Send method saves all changes to the message in the messaging system and moves the message to the current user's Outbox folder. Messaging systems retrieve messages from the Outbox and transport them to the recipients. After it is transported, a message is removed from the Outbox and deleted.
[11:46] <@Hammer> You must compose your new messages in your Outbox. The Send method only deals with messages located in the Outbox and returns CdoE_NO_ACCESS for any attempt to create a message in the Inbox.
[11:46] <@Hammer> The Send method invalidates the composed Message object but does not remove it from memory. The programmer should Set the invalidated object to Nothing to remove it from memory, or reassign it to another message. Attempted access to a sent message results in a return of CdoE_INVALID_OBJECT.
[11:48] <@Treekiller> but I changed the values, and it still didn't send
[11:48] <@Hammer> 30•05:30:17 <Treekiller> cdoMessage.Send() Succeeded
[11:49] <@Treekiller> <@Treekiller> cdoMessage.Send() Failed
[11:49] <@Treekiller> <@Treekiller> the send seems to fail :/
[11:49] <@Hammer> if you try again, it does
[11:49] <@Hammer> read the above remarks carefully
[11:50] <@Hammer> After it is transported, a message is removed from the Outbox and deleted.
[11:50] <@Hammer> since it is no longer in the Outbox, it can't be resent
[11:50] <@Hammer> although the object, itself, still exists
[11:50] <@Treekiller> yes, but since I redid the commands - doesn't it 're-create' a message?
[11:51] <@Hammer> nope, you would have to redo ALL the commands, after getting rid of the old cdoMessage object
[11:51] <@Hammer> to do that, you /comclose cdoMessage
[11:51] <@Hammer> * Closed Com 'cdoMessage'
[11:51] * Closed Com 'cdoMessage'
[11:52] * Opened Com 'cdoMessage' (CDO.Message)
[11:52] <@Hammer> now then, here's my alias so you can see how it works 'in code'
[11:52] <@Treekiller> cdoMessage.To Succeeded
[11:52] <@Hammer> alias CDO.example {
[11:52] <@Hammer> .comopen cdoMessage CDO.Message
[11:52] <@Hammer> !.echo -q $com(cdoMessage, Subject, 4, *bstr, Test message from # )
[11:52] <@Hammer> !.echo -q $com(cdoMessage, Sender, 4, *bstr, your@email.com)
[11:52] <@Hammer> !.echo -q $com(cdoMessage, To, 4, *bstr, your@email.com)
[11:52] <@Hammer> !.echo -q $com(cdoMessage, TextBody, 4, *bstr, This is a test. Hope you like it!)
[11:52] <@Hammer> !.echo -q $com(cdoMessage, Send, 1)
[11:52] <@Hammer> .comclose cdoMessage
[11:52] <@Hammer> }
[11:53] <@Treekiller> cdoMessage.Sender Succeeded
[11:53] <@Hammer> to use it, obviously, you'd have to change your@email.com to your real addy
[11:53] <@Hammer> in both lines
[11:53] cdoMessage.Subject Succeeded
[11:53] cdoMessage.TextBody Succeeded
[11:54] cdoMessage.Send() Succeeded
[11:54] <@Hammer> whether or not your system let you send it or not, are there any COM questions on what we've covered?
[11:54] <exoa> not that i can think of
[11:55] <exoa> thanks for doing this
[11:55] <exoa> i really appreciate the help
[11:55] <@Hammer> do you understand how it works now?
[11:55] <exoa> yeah i have a good idea
[11:55] <@Treekiller> yeah, it was all clear, and I really learned something :)
[11:55] <@Treekiller> thanks alot Hammer
[11:55] <exoa> a little more playing with it and i will
[11:55] <exoa> :)
[11:55] <@Hammer> there are just a few more comments i want to make before we close
[11:55] <@Treekiller> btw, did it work for you?
[11:55] <@Hammer> it worked for me
[11:55] <@Hammer> you should check your email, TK :)
[11:56] <exoa> i don't have outlook installed so maybe it doesn't know the mail servers or something
[11:56] <exoa> well, id o
[11:56] <exoa> but i've never configued it
[11:56] <@Treekiller> gmail didn't recieve it yet
[11:56] <exoa> configured
[11:56] <exoa> i use thunderbird
[11:56] <@Hammer> i think you have to install at least OE
[11:57] <@Hammer> either Outlook or Outlook Express should do the trick
[11:58] <exoa> yeah im not really worried about it.. i know the code works
[11:58] <@Hammer> right
[11:58] <exoa> that's the important part
[11:58] <@Hammer> and you probably won't actually be using CDO objects in your own code
[11:58] <exoa> nah
[11:58] <@Hammer> but it makes a fairly decent example object to work with
[11:58] <@Hammer> not everyone has ADODB installed
[11:58] <exoa> im more interested in integrating with the shell.. like cmd.exe
[11:59] <@Hammer> though i'm much more comfortable working with ADODB than CDO
[11:59] <@Hammer> you'll want to look into WScript.Shell
[11:59] <exoa> k
[12:00] <@Hammer> do you have the Windows Scripting Host.chm?
[12:00] <exoa> no clue
[12:00] <exoa> let me search
[12:00] <@Hammer> sending...
[12:00] <exoa> i can't accept through bnc.. 2 secs im load a new connection
[12:01] <@Treekiller> if you could send it over to me too :)
[12:01] [JOIN] ex0a (none@h9.243.140.67.ip.alltel.net) has joined #HD-Training
[12:01] <ex0a> send here
[12:02] <exoa> ty
[12:02] <@Hammer> np
[12:02] <@Treekiller> ex0a: using psybnc?
[12:02] <@Hammer> you can do lots of nifty stuff with WScript.Shell ;)
[12:02] <exoa> yes
[12:02] <@Hammer> alias mircuser { var %b, %a = WSH $+ $ticks | .comopen %a WScript.Shell | !.echo -q * $com(%a,RegRead,3,*bstr,HKCU\Software\mIRC\UserName\) | %b = $com(%a).result | .comclose %a | return %b }
[12:02] <@Hammer> alias altr { var %a = oWSH $+ $ticks | .comopen %a WScript.Shell | .comclose %a $com(%a, SendKeys, 3, *bstr, % $+ R) }
[12:02] <@Hammer> alias altO.IRC { var %a = oWSH $+ $ticks | .comopen %a WScript.Shell | .comclose %a $com(%a, SendKeys, 3, *bstr, % $+ O{END}{LEFT 14}{DOWN}{RIGHT}) }
[12:02] <@Hammer> alias altO.IRC.Rejoin-channel-when-kicked { .comopen a WScript.Shell | .comclose a $com(a,SendKeys,3,*bstr,% $+ O{HOME}{LEFT}{DOWN}{TAB 9} {ENTER}) }
[12:02] <exoa> i just don't have the forwarding setup
[12:03] <@Hammer> those are a few example aliases that use WScript.Shell
[12:03] <@Treekiller> ex0a: /raw dccenable 0
[12:03] <@Treekiller> that's all
[12:03] <@Treekiller> Hammer: neat
[12:04] <exoa> yeah i used the sendkeys function to edit settings in the mirc options dialog that didn't have command line settings
[12:04] <exoa> can you replace !.echo with noop?
[12:04] <@Hammer> yes
[12:04] [QUIT] ex0a (none@h9.243.140.67.ip.alltel.net) has quit IRC (Quit: This whole thing was my fault. I learned that I shouldn't get high to come up with ideas... I should come up with ideas then get high to reward myself!)
[12:04] <@Treekiller> so we can use objects/properties (read)/methods now?
[12:05] <@Hammer> when i wrote those, we didn't have /noop
[12:05] <@Hammer> however
[12:05] <@Hammer> !.echo -qati works great for troubleshooting
[12:05] <@Hammer> just remove the . from the lines you want to troubleshoot
[12:05] [QUIT] amigo^^ (~qwert@62.150.145.133) has quit IRC (Ping timeout)
[12:06] <@Hammer> when everything works exactly as you expect, search/replace !.echo -qati * with noop
[12:06] <exoa> k
[12:06] <@Hammer> i usually use !.echo -qati * <-- so that the * at least gets echoed
[12:07] <exoa> yeah
[12:07] <@Hammer> now lets talk briefly about dispatch
[12:08] <@Hammer> to do that, i am going to switch to the ADODB COM object model
[12:08] <@Hammer> that's simply because it's the one i know best for the example i want to talk about
[12:10] <@Hammer> let's assume that i've opened my database correctly (skipping all the nitty-gritty details therein)
[12:10] <@Hammer> that object is called adoConnection
[12:11] <@Hammer> i want to send it an SQL query .. and when i do, it will return a recordset with all the rows that match including all the fields i've specified
[12:11] <@Hammer> that recordset will, itself, be another object
[12:11] <@Hammer> that'll be the .result, if you will
[12:11] <@Hammer> although an object can't be a simple .result
[12:12] <@Hammer> so, since i know that it will be returning an object, i need to set up an object name to refer to it later in my script
[12:14] <@Hammer> $com(adoConnection, Query, 5, *bstr, SELECT * FROM mytable WHERE id > 10) is what it might look like normally, but that doesn't give the COM object any idea of what we need for the object name
[12:14] <@Hammer> $com(adoConnection, Query, 5, *bstr, SELECT * FROM mytable WHERE id > 10, *dispatch adoRecordset)
[12:14] <@Hammer> $com(adoRecordset, MoveLast, 1)
[12:14] <@Hammer> $com(adoRecordset, MoveFirst, 1)
[12:15] <@Hammer> see how you can "drill down" with objects?
[12:15] <exoa> cool
[12:15] <@Hammer> each record will be available as you MoveNext
[12:16] <@Hammer> (without getting too technical about the ins and outs of ADO)
[12:16] <@Hammer> there is a Fields collection that you can create
[12:17] <@Hammer> like $com(adoRecordset, Fields, 2, *dispatch, collFields)
[12:18] <@Hammer> $com(collFields, GetField, 2, 0, *dispatch adoField)
[12:18] <@Hammer> $com(adoField, Name, 2)
[12:18] <@Hammer> $com(adoField, Value, 2)
[12:18] <@Hammer> (again, that's not technically correct, but shows you the idea)
[12:18] <exoa> yeah
[12:19] <@Hammer> all you have to do is find out what the object model looks like and you can translate that into mIRC scripting quite easily
[12:19] <@Treekiller> cool
[12:19] <@Hammer> all it takes is a little practice and you'll amaze all your friends and neighbors
[12:20] <@Hammer> so, like i said earlier in #HelpDesk, COM really ISN'T difficult :)
[12:20] <@Treekiller> hehe
[12:20] <@Treekiller> no, but thanks to your explanation ;) most com tutors go in way deep
[12:20] <exoa> it's just cryptic
[12:20] <@Hammer> just like sockets (which are really simple - although the protocol you're writing to might NOT be :)
[12:21] <exoa> it's like me.. i can read spanish.. but i can't write it really and speak it hardly at all
[12:21] <@Hammer> well .. you should have seen us trying to make $com work when Khaled first added it
[12:21] <exoa> lol
[12:21] <exoa> i can imagine
[12:21] <@Hammer> i had to buy him a vegetarian pizza to get him to add what i wanted to make it really work!
[12:22] <exoa> lol
[12:22] <@HaNtU]uU[> lies.
[12:22] <@Hammer> the first 2 or 3 versions after he added it would NOT work with dispatch at all
[12:22] <@Hammer> and PUTREF took even longer
[12:23] <@Hammer> it all works pretty durned good, now, though :)
[12:23] <@HaNtU]uU[> i heard there was a bug with dispatch when $com first came out
[12:23] <@Hammer> i'm happy with it
[12:23] <@HaNtU]uU[> or so FOP told me.
[12:23] <exoa> isn't there still some limitations to com in mirc tho?
[12:23] <@Hammer> not that i've run into
[12:23] <@HaNtU]uU[> yeah like you cant launch a rocket
[12:23] <@Hammer> yes you can
[12:23] <exoa> hahah
[12:24] <@Hammer> if you have a COM object that handles the telemetry interface
[12:24] <@HaNtU]uU[> stop lying, Hammer ;(
[12:24] <@Hammer> i'm not lying
[12:24] <exoa> lol
[12:24] <exoa> brb pee again
[12:24] <@Treekiller> with a method, if I'm right
[12:24] <@Hammer> i had a first cousin once-removed who worked at JPL
[12:25] <@Hammer> he's dead now, though
[12:25] <@HaNtU]uU[> lies lies lies!
[12:25] <@HaNtU]uU[> :P
[12:25] <@Hammer> but he really was a rocket scientist :)
[12:26] <@Hammer> ok, i think that's pretty much it for A Brief Intro into mIRC-based COM Objects
[12:26] <@HaNtU]uU[> i'll read the log, but thanks a bunch Hammer.
[12:26] <@Hammer> no problem
[12:26] <@Treekiller> thanks alot Hammer
[12:27] <@Hammer> oh yeah, before i forget
[12:28] <@Hammer> that PropertyPUTREF .. it's for when you want to "SET" a value, meaning pass in an object as a parameter
[12:29] <@Hammer> for instance, if you wanted to add an attachment to an email, you'd need to set up a FileSystemObject object and point it to the correct file and then PUTREF that object into the Attachments collection (iirc)
[12:29] <@HaNtU]uU[> putref sounds funny :(
[12:29] <@Hammer> put by reference (pointer)
[12:30] <@HaNtU]uU[> ive figured so much ^^;
[12:30] <@HaNtU]uU[> too much C/C++ in my head.
[12:30] <@Treekiller> can't be good
[12:31] <@Treekiller> okay, converting this to a 'readable' log :) bbl
[12:31] <@Treekiller> btw Hammer: got a firewall message
[12:31] <@HaNtU]uU[> thanks Tk.
[12:31] <@HaNtU]uU[> i assume i dont have to send you mine?
[12:32] [TOPIC] @Hammer (Hammer@68.105.203.42) changes topic to 'The Class You Just Missed: 'A Brief Introduction into mIRC-based COM Objects''
[12:32] <@Treekiller> HaNtU]uU[: nopes
[12:32] <@HaNtU]uU[> aight