[Help] MS Agent catching clicks |
Author: |
Message: |
BstrdSmkr
Junior Member
Earned. Never Given.
Posts: 46
39 / / –
Joined: Jul 2006
|
O.P. [Help] MS Agent catching clicks
i've read the MS SDK for the agents, which is lacking to say the least : \ the trouble i'm having is trying to catch a click event on the agent. for example, if the user clicks on Merlin when he says something, i want the script to run a function. any help?
|
|
07-20-2006 09:23 PM |
|
|
cloudhunter
Senior Member
Posts: 536 Reputation: 18
37 / – / –
Joined: Dec 2005
|
RE: [Help] MS Agent catching clicks
Unfortuneately, it seems like it can't within the scripting system As it doesn't register any events apart from the built in one. I've researched it myself, but with no luck.
Cloudy
Sig by pirateok/marisaok/marisa
quote: Originally posted by Moulin Rouge
The greatest thing you'll ever learn, is just to love and be loved in return
6909 days, 7 hours, 41 minutes, 35 seconds ago
|
|
07-20-2006 10:48 PM |
|
|
ddunk
Veteran Member
Posts: 1228 Reputation: 51
35 / /
Joined: Mar 2004
|
RE: [Help] MS Agent catching clicks
Actually, I was researching this a few days back because I wanted to play with the control and I came across
quote: Programming the Microsoft Agent Control
ActiveX® technology for interactive software agents
Microsoft Corporation
October 1998
A 113 page .doc file explaining everything you did and didn't want to know about the agent control. There are a few jscript examples, but it's mostly vbscript.
I'll attach the docs, but here's the click event.
code: Click Event
Description
Occurs when the user clicks a character or the character’s icon.
Syntax
Sub agent_Click (ByVal CharacterID, ByVal Button, ByVal Shift, ByVal X, ByVal Y)
CharacterID
Returns the ID of the clicked character as a string.
Button
Returns an integer that identifies the button that was pressed and released to cause the event. The button argument is a bit field with bits corresponding to the left button (bit 0), right button (bit 1), and middle button (bit 2). These bits correspond to the values 1, 2, and 4, respectively. Only one of the bits is set, indicating the button that caused the event. If the character includes a taskbar icon, and bit 13 is also set, the click occurred on the taskbar icon.
Shift
Returns an integer that corresponds to the state of the SHIFT, CTRL, and ALT keys when the button specified in the button argument is pressed or released. A bit is set if the key is down. The shift argument is a bit field with the least-significant bits corresponding to the SHIFT key (bit 0), the CTRL key (bit 1), and the ALT key (bit 2). These bits correspond to the values 1, 2, and 4, respectively. The shift argument indicates the state of these keys. Some, all, or none of the bits can be set, indicating that some, all, or none of the keys are pressed. For example, if both CTRL and ALT were pressed, the value of shift would be 6.
X,Y
Returns an integer that specifies the current location of the mouse pointer. The X and Y values are always expressed in pixels, relative to the upper left corner of the screen.
Remarks
This event is sent only to the input-active client of a character. When the user clicks a character or its taskbar icon with no input-active client, the server sends the event to its active client. If the character is visible (Visible = True), the user’s action also sets the character’s last input-active client as the current input-active client, sending the ActivateInput event to that client, and then sending the Click event. If the character is hidden (Visible = False), and the user clicks the character’s taskbar icon using button 1, the character is also automatically shown.
Note Clicking a character does not disable all other character output (all characters). However, pressing the Listening key does flush the input-active character’s output and triggers the RequestComplete event, passing a Request.Status that indicates that the client’s queue was interrupted.
(page 19)
http://ponynugget.net/progagentcontrol.doc
This post was edited on 07-20-2006 at 10:57 PM by ddunk.
|
|
07-20-2006 10:57 PM |
|
|
alexp2_ad
Scripting Contest Winner
Who love the chocolate?
Posts: 691 Reputation: 26
37 / / –
Joined: May 2004
Status: Away
|
RE: RE: [Help] MS Agent catching clicks
quote: Originally posted by cloudhunter
Unfortuneately, it seems like it can't within the scripting system As it doesn't register any events apart from the built in one. I've researched it myself, but with no luck.
Cloudy
It can, and here's how. Add this format for a variable to your code somewhere (outside other functions):
code: var Clicked = function(){
function agent::Click(dwCharID,fwKeys,x,y){
MsgPlus.DisplayToast('Clicked','You clicked Merlin!');
}
}
Assuming your ActiveXObject("Agent.Control.1") is called "agent". Then when you declare the agent (eg. in initialize) add "Clicked();"
Tested and working with that script that made him say what contacts said.
EDIT: I know this from catching events in iTunes, for iTunes+... was a pain!
This post was edited on 07-20-2006 at 11:05 PM by alexp2_ad.
|
|
07-20-2006 11:01 PM |
|
|
cloudhunter
Senior Member
Posts: 536 Reputation: 18
37 / – / –
Joined: Dec 2005
|
RE: [Help] MS Agent catching clicks
Well just shows what a noob I am then Thanks, it's gonna help alot
Cloudy
Sig by pirateok/marisaok/marisa
quote: Originally posted by Moulin Rouge
The greatest thing you'll ever learn, is just to love and be loved in return
6909 days, 7 hours, 41 minutes, 35 seconds ago
|
|
07-20-2006 11:04 PM |
|
|
alexp2_ad
Scripting Contest Winner
Who love the chocolate?
Posts: 691 Reputation: 26
37 / / –
Joined: May 2004
Status: Away
|
RE: RE: [Help] MS Agent catching clicks
quote: Originally posted by cloudhunter
Well just shows what a noob I am then
Oh no, not at all, it's a pain and a very weird way of declaring events, but it seems to be how you declare events for objects. I only know it because I needed to catch iTunes events...
|
|
07-20-2006 11:06 PM |
|
|
cloudhunter
Senior Member
Posts: 536 Reputation: 18
37 / – / –
Joined: Dec 2005
|
RE: [Help] MS Agent catching clicks
Well I saw that method of detecting the event done while I was searching the web... I just didn't understand it I knew there must be a way to do it, as when you released a new version of your script, you said youd switched from timers to events.
Thanks for the information
Cloudy
Sig by pirateok/marisaok/marisa
quote: Originally posted by Moulin Rouge
The greatest thing you'll ever learn, is just to love and be loved in return
6909 days, 7 hours, 41 minutes, 35 seconds ago
|
|
07-20-2006 11:13 PM |
|
|
deAd
Scripting Contest Winner
Posts: 1060 Reputation: 28
– / /
Joined: Jan 2006
|
RE: [Help] MS Agent catching clicks
Well the JScript parser loads events/functions before variables and stuff, so if you don't use a wrapper it tells you the object is not defined. -dt- posted how to wrap it in some other thread...
|
|
07-20-2006 11:14 PM |
|
|
BstrdSmkr
Junior Member
Earned. Never Given.
Posts: 46
39 / / –
Joined: Jul 2006
|
O.P. RE: [Help] MS Agent catching clicks
quote: Originally posted by alexp2_ad
code: var Clicked = function(){
function agent::Click(dwCharID,fwKeys,x,y){
MsgPlus.DisplayToast('Clicked','You clicked Merlin!');
}
}
i saw this and others similar to it when i was researching it, but i don't understand it. i understand your post and how to implement your solution, but i'm wondering if you could expand a bit about how this works? once i've got my head around it, i'll put it all together and post it in "noob-format" for everyone to see lol.
also to clarify: dwCharID is the name of the agent (merlin, peedy, etc)
fwKeys is the state of the shift key (boolean)
X and Y are the coords of the pointer when the event occoured.
this is what i gathered between here and my research. is this correct?
|
|
07-21-2006 03:30 PM |
|
|
alexp2_ad
Scripting Contest Winner
Who love the chocolate?
Posts: 691 Reputation: 26
37 / / –
Joined: May 2004
Status: Away
|
RE: [Help] MS Agent catching clicks
deAd sort of explained why this works.
The thing is, the JScript parser that runs the code will create the functions and event functions before it makes the objects and does the rest of the code, so when it sees "function agent::Click" (ie. the event "Click" for the object "agent") it hasn't made the agent object, so it would complain that it is undefined. However, if you put the function inside a variable, it's ignored and the event function isn't defined until you call the variable. (The "Clicked();" bit) And when you call the variable, it should be after the agent object is made, so it will understand it and not say it's undefined.
And according to the agent documentation those variables are what you said, yeah. Though I don't think fwKeys is just the shift key, I think it has numbers to represent other keys like ctrl and such. Can't remember where I saw that now though.
|
|
07-21-2006 03:40 PM |
|
|
Pages: (2):
« First
[ 1 ]
2
»
Last »
|
|
|