ورود

View Full Version : MsAgent



me_saem
شنبه 30 خرداد 1383, 00:13 صبح
سلام
من در برنامه ام از msagent استفاده کرده ام و میخواهم با توجه به نظر کاربر ظاهر شود یا نشود.
برای ظاهر شدن از دستورات زیر استفاده کرده ام :


begin
RobotAgent := TAgent.Create(Application);
RobotAgent.Characters.Load('Merlin','Merlin.acs');
with RobotAgent.Characters.Item['Merlin'] do begin
play('show');
end;
و برای مخفی شدن از دستورات زیر :


with RobotAgent.Characters.Item['Merlin'] do begin
play('hide');
RobotAgent.Characters.Unload('Merlin');
end;
اما بعد از اینکه مخفی شد دیگر ظاهر نمیشود !
یکی به من بگه باید چیکار کنم.

vcldeveloper
شنبه 30 خرداد 1383, 01:27 صبح
من از این دو دستور استفاده می کنم:


Agent.Characters.Item['Merlin'].Show(1)





Agent.Characters.Item['Merlin'].Hide(1)



حالا بعد از مخفی شدنش شما به چه صورتی می خواید که دوباره ظاهر یشه؟ اگه از طریق کد می خواید این کار رو بکنید که همون show(1) همش جواب میده
اگر نه....پس می تونید از آیکون agent مورد نظر در System tray استفاده کنید. موقع ظاهر شدن agent یک آیکن هم اونجا درست میشه که اگر agent مخفی باشه با راست-کلیک روی اون ایکن و انتخاب Show کارکتر مورد نظر دوبارخ ظاهر میشه.

me_saem
دوشنبه 01 تیر 1383, 13:41 عصر
من این دستور رو اجرا میکنم اما خطا میده !

من میخوام با زدن یک دکمه کلا از حافظه بره و یا حداقل مخفی بشه و دیگه تا دستور show ظاهر نشه.
من از دستور unload استفاده کردم ولی موقعی که میخوام دوباره بیاد خطا میده.

vcldeveloper
دوشنبه 01 تیر 1383, 20:44 عصر
میشه یکم بیشتر توضیح بدید که اولا چطوری کاراکتر رو لود میکنید و ثانیا در هنگام unload کردن دقیقا چطور کاراکتر رو unload می کنید؟ شاید در استفاده از دستورات اشتباهاتی می کنید!
در ضمن اگه میشه پیغامهای خطا رو هم بنویسید.

A.VAHID
سه شنبه 02 تیر 1383, 21:44 عصر
با سلام
ببخشید بچه ها من نمیدانم MsAgent چیست و چه کاربردی دارد
اگر ممکن است برای من توضیح دهید
متشکرم
ع.و

vcldeveloper
سه شنبه 02 تیر 1383, 21:50 عصر
MSAgent یه چیزیه مثل همون Office Assistant (همون گیره کاغذی که تو برنامه های آفیس هر وقت مشکل داشتی ظاهر میشه)

A.VAHID
سه شنبه 02 تیر 1383, 21:53 عصر
از پاسخ سریعت متشکرم
ع.و

_alish_
چهارشنبه 03 تیر 1383, 13:49 عصر
من متن جایی که آنرا خوانده ام کاملا آرده ام شاید بدردتان بخورد
این متن توسط صادق علوی زاده است و من فقط آنرا ک÷ی کردم بدونه کم و کاست



Microsoft Agent یکی از سرگرم کننده ترین فن آوریهای Microsoft می باشد که تا کنون توانسته بسیار مورد علاقه کاربران قرار بگیرد. Agentها به برنامه های شما جذابیت زیادی می دهند و امکان ارتباط بهتر و جالبتری را با کاربر ایجاد میکنند. در اینجا من می خواهم شما را با Microsoft Agent و طریقه بکار گیری آن در برنامه های خودتان را آموزش بدهم که امیدوارم مفید باشد. از آنجایی که من این امکان را در دلفی استفاده کرده ام برای شما هم مثالهای دلفی آورده ام ...

اولین باری که از این تکنولوژی استفاده شد در برنامه Office 97 بود که خیلی مورد علاقه کاربران قرار گرفت. من اون موقع خیلی گشتم تا بتونم از این امکان استفاده کنم ولی خوب نتونستم ): اما بعد ها با پیشرفت کردن علم برنامه نویسی و همچنین با پیشرفت کردن عقل Microsoft (که از نظر من بزرگترین کلاه بردار قرن هست) این تکنولوژی در اختیار دیگران هم قرار گرفت... برای همین در اوایل فقط در Office بود که از این امکان استفاده می شد.

حالا اینا رو گفتم اما ببینیم اصلاً Agent چی هست؟؟!!!

شما اگه از Office استفاده میکنید حالا هر کدوم از برنامه هاش که باشه (Word,Excel,FrontPage,...) یک شکلکی رو میبینید که همیشه نسبت به کارهایی که انجام میدین یک سری حرکات از خودش نشون میده که هم سرگرم کننده هست هم آموزنده. حالا حتماً متوجه شدین که در مورد چی صحبت میکنیم (هر چند که میدونم میدونستید (; ) خوب حالا می خواهیم ببینیم که چطور میشه از این امکان تو برنامه های خودمون استفاده کنیم مثلاً وقتی برنامه داره کار میکنه یه شکلکی بیاد برای کاربر ادا در بیاره تا طرف نفهمه که برنامه چیکار میکنه (: یا مثلا موقع ذخیره کردن و بازیابی کردن و یا جستجو و ... یک سری حرکات مربوط به آن عمل انجام بده...

اینکار خیلی ساده است و فقط کافی هست شما یک Agent رو انتخاب کنید و در برنامتون تعریفش کنید و بعد هر کاری که خواستین رو بهش دستور بدین تا براتون انجام بده . ضمنا شما لازم نیست اصلاً غصه درست کار کردن اون رو بخورین چون خود Windows اونو کنترل میکنه که یه وقت کار بدی نکنه ((:

شما نمیتونید که Agent رو داخل یک جعبه مکالمه (Dialog Box) قرار بدین و فقط میتونید جای اولیه اون رو انتخاب کنید بعد نمایش بدین و کاربر میتونه اونو به دلخواه خود تغییر مکان بده با Drag کردن اینکار رو انجام میده. خوب حالا برای شروع کار به یک سری Agent نیاز داریم که البته همراه ویندوز همیشه یک سری همراه هستند بهترین اونها که میتونه کارهای زیادی انجام بده (منظور حالتهای زیادی براش تعریف شده) Merlin هست که یک جادوگر پیر می باشد. برای Download کردن اینها میتونید به سایتهایی که معرفی میکنم یک سری بزنید. ضمناً شما خودتون هم میتونید یک Agent طراحی بکنید که برای اینکار باید از یک سری نرم افزار استفاده کنید.

برای اینکه کاربر بتونه از Agent برنامه شما استفاده کنه باید حتماً Microsoft Agent Server‌ رو نصب کنه. که البته من تا حالا تو هر ویندوزی که برنامم رو اجرا کردم نصب شده بوده فکر کنم این برنامه همراه خود ویندوز هست (; ولی اگه نبود شما میتونید یک سری به آدرس زیر بزنید اونجا چیزهای جالبی در این مورد داره که یک مطالعه کنید بد نیست.

http://msdn.microsoft.com/workshop/imedia/agent/defualt.asp

در این آدرس اخرین باری که رفتم مطالب زیر بود حالا اگه تا حالا بیلی جون حوصله اش از اونا سر نرفته باشه و عوض نکرده باشد باید باشه:

- The Agent Server

- The Characters/Agents

- A Text-to-Speech pices

- A Voice command (input) pices



این مطالب تحت عنوان Microsoft Agent Software Development Kit هست که در اونجا شما همچنین میتونید نرم افزار Microsoft Agent Character Editor رو برای درست کردن Agent دریافت کنید. در این مقاله ما در مورد Voice Command‌ (فرمان های صوتی) و طراحی Agent صحبت نمیکنیم و فقط طرز استفاده از این امکان رو شرح میدم که خودتون بعداً میتونید در موردش بیشتر جستجو کنید. ما برای کارمون فقط احتیاج به Agent Server و یک کاراکتر داریم که اگه روی ویندوزتون ندارین میتونید از اینجا Download بکنید.

خوب حالا میریم سر اصل مطلب:

بعد از اینکه مطمئن شدین روی ویندوزتون AgentServer رو دارین دلفی رو اجرا کنید و مراحل زیر رو مو به مو انجام بدین:

1- Component|Import ActiveX Control رو انتخاب کنید.

2- Microsoft Agent Control رو از تو لیست پیدا کنید و رو ی دکمه Install کلیک کنید.

3- خوب حالا باید تو قسمت ActiveX یک آیکونی شبیه به MenInBlack داشته باشید.

خوب تا یادم نرفته اینو بگم که برای پیدا کردن یک کاراکتر روی ویندوزتون باید برای acs.* جستجو کنید که البته به طور عادی اگر Agent Server نصب باشه توی شاخه Windows یک msagent باید وجود داشته باشه و داخل اون هم یک شاخه دیگه به نام Char هم هست که توش یک یا چند کاراکتر وجود داره که اگر از XP استفاده میکنید حتماً یکیش Merlin.acs هست (که من خیلی بهش علاقه دارم (: ) برای همین ما باید تو برنامه مون چک کنیم که آیا این شاخه وجود داره یا نه اگه وجود داشت میدونیم که Agent Server روی ویندوز کاربر نصب هست و ما می تونیم از Agent استفاده کنیم .

خوب برای اینکار باید اول ActiveX رو به روی فرم منتقل کنیم با اینکار یک type با نام TAgent به تعاریف فرم اضافه میشه . بعد باید یک متغییر تعریف کنیم که از نوع Boolean باشه تا با اون چک کنیم که آیا Agent Server نصب هست یا نه برای اینکار میشه از Code زیر استفاده کرد:



TYourObject
private
AgentInstalled: Boolean;
function AgentIsInstalled: Boolean;
procedure CreateAndLoadAgentIfInstalled;
function GetColorDepth: Word;
function GetWinDir: String;
procedure SetFormColor;
function AgentWasClicked

شما میتونید روی ویندوز کاربر به دنبال اون شاخه و کاراکتری که می خواهید از او استفاد هکنید بگردید و اگه بود کار رو باهاش شروع کنید اگه هم نبود خوب دیگه کاربر باید محیط خشک برنامتون رو تحمل کنه (;

حالا مثلاً ما می خواهیم از Merlin استفاده کنیم :

{-----------------------------------------------}

function TYourObject.AgentIsInstalled: Boolean;

begin

Result := (FileSearch('Merlin.acs',

Format('%s\MSAGENT\CHARS', [GetWinDir]))<>'');

end;



{-----------------------------------------------}

function TYourObject.GetWinDir : string;

var

WinDirZ : array[0..256] of Char;

begin

GetWindowsDirectory(WinDirZ, SizeOf(WinDirZ));

Result := StrPas(WinDirZ);

end;



نکته : در بالا برای بدست آوردن نام شاخه ای که ویندوز در آن نصب هست از API استفاده شده که مسیر کامل ویندوز را به ما میدهد.

حال که فهمیدیم کاربر امکان استفاده از Agent رو داره می تونیم کار رو شروع کنیم. در ادامه باید یک Object برای Agent خودمون بسازیم تا از این به بعد از اون استفاده کنیم و مجبور نباشیم از ActiveX استفاده کنیم. برای اینکار از کد زیر میشه استفاده کرد:

implementation

uses
AgentDemoConsts,
Registry,
OLECtrls, AgentObjects_TLB;

{-----------------------------------------------}
procedure
TYourObject.CreateAndLoadAgentIfInstalled;
const
RightBias = 80;
TopBias = 70;
var
tp: TPoint;
begin
if (AgentInstalled) and
not (Assigned(RobotAgent)) then begin
RobotAgent := TAgent.Create(Application);
RobotAgent.Characters.Load('Merlin','Merlin.acs');
{ Move the Agent to the center of the screen }
tp.x := (Screen.Width div 2)-(Width div 2);
tp.y := (Screen.Height div 2)-(Height div 2);
with RobotAgent.Characters.Item['Merlin'] do begin
MoveTo(tp.x+RightBias, tp.y+TopBias, 0);
Show(0);
Play('Greet');
Play('Explain');
Speak(SDemoIntro, '');
Play('Pleased');
Play('RestPose');
Speak(SWhisper, '');
Speak(SMonotone, '');
Speak(SMap, '');
end;
end;
end;


چند خط اول که مشخص هست چه کار میکنه . اما بعد از اینکه کاراکتر تعریف شد (RobotAgent) اونو به Merlin نسبت میدیم وبعد هم اونو به وسط صفحه نمایش منتقل میکنیم و حالا میرسیم به مهمترین قسمت کار که دستور دهی به Merlin هست.

با استفاده از Play شما میتونید به Agent دستور بدین اما برای هر Agnet دستورات متفاوت هست یعنی ممکن هست که دستوارتی که برای Merlin کار میکنه برای Robby (که یکی دیگر از Agent ها هست) کار نکنه. شما اگه کاراکترتون رو خودتون درست میکنید خوب پس لیست دستوراتش رو دارید اما اگه اونو از جایی Download میکنید حتما لیست دستوارتش هم همراش هست مثلا شما میتونید در مورد Merlinو یا Robby و یا چند Agent دیگه از تو همون آدرسی که در بالا دادم لیست دستوارتش رو بگیرید.

حالا در کد بالا میبینید که در ابتدا از دستور Show استفاده شده این دستور برای به نمایش در آوردن Agent هست و در تمامی آنها کار میکنه . بعد با استفاده از Play کارهای مورد نظرمون رو به Agent‌ میگیم. مثلاً من در ابتدا با استفاده از دستور Greet از Agent خواستم که سلام کنه و بعد هم با استفاده از Explain خواستم که شروع کنه به گفتن یک سری مطالب که با دستور Speak اونها رو که در متغییر SDemoIntro قرار داده ام به صورت یک بالون که بالای سرش باز میشه میگه. شما برای اینکه بگین مطالب رو با چه حالتهایی بخونه می تونید از دستواراتی که در جدول زیر آوردم استفاده کنید:

Addition
Resulting capability

\Chr="Whisper"\
The Agent will whisper the following text.

\Pau=N\
The Agent will pause for the designated number of milliseconds.

\Emp\
The Agent will give special emphasis to the following phrase.

\Chr="Montone"\
The Agent will emphasize nothing at all.

\Map=<spoken text>
The Agent will say one thing, and =<balloon text> "think" another.


خوب حالا برای اینکه بیشتر متوجه بشین در زیر یک سری مثال آوردم که میتونید اونها رو در برنامه استفاده کنید و نقش هر کدوم از دستوارت رو ببینید:

SFuzzyWuzzy = 'Fuzzy wuzzy was a bear;\Pau=500\ ' +

'fuzzy wuzzy had no hair;\Pau=500\ ' +

'fuzzy wuzzy wasn't very \Emp\fuzzy, \Emp\was he?';

SWhisper = '\Chr="Whisper"\Now I will whisper: ' +

'Whisper whisper whisper.';

SMonotone = '\Chr="Monotone"\Now I will speak in a ' +

'monotone. Pat Paulsen for President.';

SMap = '\Map="I will now continue to speak in ' +

'English, but you will see my words ' +

'translated into German in the balloon above ' +

'my head. How are you today? I am just ' +

'\Emp\dandy!"="Jetzt werde ich zwar immer ' +

'noch in Englisch reden, sie werden ' +

'aber meine Woerte im Balloon obenauf ins ' +

'Deutsch uebersetzt sehen. Wie geht es ' +

'Ihnen heute? Mir geht es ganz gut!"\';



خوب دیگه همین بود تمام ماجرا حالا شما اگه می خواهین بیشتر در این مورد کار کنید من در مقالات بعدی یکی سری سایت و مطلب دیگه هم براتون میزارم البته به زبون اصلی خودشون حتماً خیلی مفید خواهد بود.

ضمنا شما میتونید از Event ها هم در Agent استفاده کنید و مثلا برای رویداد OnClick روی Agent‌ یک چیزی تعریف کنید.



خوب در آخر از شما که تا اینجا آمدید متشکرم و یک سری نکات رو هم باید ذکر کنم :

1- این مطالب حاصل تجربه خودم و همچنین برگرفته از یک سری مقالاتی بوده که در این مورد مطالعه کردم.

2- در مورد استفاده از این کدهایی که در این مقاله آورده ام و همچنین در پایان این مقاله ضمیمه کرده ام هیچ گونه مسئولیتی بعهده من نخواهد بود که درست کار کنه یا بزنه کامپیوتر شما رو بسوزونه !!!!!

3- استفاده از این مقاله به شرط ذکرنام و آدرس اصلی مقاله در سایتها و جاهای دیگر آزاد است .

4- اگه در این مورد نظری دارین یا حتماً برای من ایمیل کنید خوشحال خواهم شد بشنوم.

vcldeveloper
چهارشنبه 03 تیر 1383, 21:08 عصر
این مطلب فبلا در سایت IranDevelopers اومده بود!

me_saem
شنبه 06 تیر 1383, 10:22 صبح
من دستورات load و unload رو اون بالا نوشتم و از همون دستورات استفاده کردم.

vcldeveloper
یک شنبه 07 تیر 1383, 21:51 عصر
ببینید من وقتی کد شما رو بصورت زیر تغییر میدم روی سیستم من برنامه بدرستی کار میکنه!



procedure TForm1.Button1Click(Sender: TObject);
begin
RobotAgent := TAgent.Create(self);
RobotAgent.Characters.Load('Merlin','Merlin.acs');
with RobotAgent.Characters.Item['Merlin'] do
begin
// play('show') doesn't work! I don't exactly know why!!! But it just shows
// the charecter's icon in system tray.

// Show(0) works correctly, you can set the argumentr to 1 to change the
// way charecter appears
show(0);
Speak('Hi','');
end;
end;




procedure TForm1.Button2Click(Sender: TObject);
begin
if RobotAgent <> nil then
with RobotAgent.Characters.Item['Merlin'] do
begin
play('hide');
RobotAgent.Characters.Unload('Merlin');
end;
end;

me_saem
دوشنبه 29 تیر 1383, 12:14 عصر
سلام

این درست. اما شما میتونید پشت سر هم این دو تا رو اجرا کنید.
یعنی چند بار پشت سر هم load , unload کنید.
یا به عبارت دیگر بعد از unload دوباره load میشه یا نه؟

nasr
دوشنبه 29 تیر 1383, 19:23 عصر
از اینجا می تونید Agent 2.0 Tool: Agent Character Editor (ACE) را دانلود کنید

http://www.microsoft.com/downloads/details.aspx?FamilyID=c21be0ec-1712-427d-a43d-94c122ef8eb6&displaylang=en

nasr
دوشنبه 29 تیر 1383, 19:25 عصر
این درست. اما شما میتونید پشت سر هم این دو تا رو اجرا کنید.
یعنی چند بار پشت سر هم load , unload کنید.
من این کار را انجام دادم مشکلی نداشت

nasr
دوشنبه 29 تیر 1383, 20:56 عصر
از اینجا هم می تونید Agent دانلود کنید
http://www.download.dk/index.asp?Kat=network&subkat=news&prog=616

http://www.forteinc.com/agent/screenshot.gif

مهندس
دوشنبه 29 تیر 1383, 22:30 عصر
آقا فایل قابل دریافت نمیباشد...

File Request Does Not Exist

مهندس
دوشنبه 29 تیر 1383, 22:33 عصر
آقا فایل از سایت مزبور قابل دانلود نمیباشد...

File Request Does Not Exist
اگر میشه به ایمیل ما بفرستید.

darvishvand@yahoo.com

nasr
سه شنبه 30 تیر 1383, 09:16 صبح
من از همینجا هر دو مورد را دانلود کردم مشکلی نبود
به هر حال براتون میلش میکنم

me_saem
سه شنبه 30 تیر 1383, 12:35 عصر
ممنونم. امتحانش میکنم.

nasr
سه شنبه 05 آبان 1383, 13:36 عصر
سلام
اول اینکه آیا میشه لهجه Agent را عوض کرد چون این Merlin خیلی بد حرف میزنه :P (فکر کنم باید از Agent های دیگه استفاده کنم)
دوم اینکه می شه کاری کردن که قیافه Agent نشون داده نشه و فقط صدای اون پخش بشه
سوم اینکه آیا میشه اون کادر زرد رنگ که بالای سرش باز میشه دیگه باز نشه
چهارم اینکه آیا میشه رنگ اون کادر زرد رنگ را عوض کرد

فعلا اولویت در دومی است بقیه زیاد مهم نیست ولی اگه همه را هم بگید بد نیست

ممنون

vcldeveloper
چهارشنبه 06 آبان 1383, 01:42 صبح
اول اینکه آیا میشه لهجه Agent را عوض کرد چون این Merlin خیلی بد حرف میزنه (فکر کنم باید از Agent های دیگه استفاده کنم)
بله میشه ولی باید فایهای مربوط به اون اهجه رو نصب کنید (نمیدونم اینا رو از کجا میشه پیدا کرد!)‌ من قبلا روی سیستمم 16 صدای مختلف با دو لهجه british و American بود، اما نمی دونم کدومیک از برنامه ها اونا رو نصب کرده بود :roll:

دوم اینکه می شه کاری کردن که قیافه Agent نشون داده نشه و فقط صدای اون پخش بشه
برای اینکار میتونید از MS TextToSpeech استفاده کنید و دیگه نیازی هم به Agent نخواهد بود (مثل برنامه Babylon)

سوم اینکه آیا میشه اون کادر زرد رنگ که بالای سرش باز میشه دیگه باز نشه
آره میشه، یکی از متدهای Agent این کار رو میکنه، اما یادم نیست اسمش چی بود، شرمنده!

چهارم اینکه آیا میشه رنگ اون کادر زرد رنگ را عوض کرد
اینو نمیدونم :(

MiRHaDi
دوشنبه 09 آذر 1383, 10:26 صبح
سلام
آقای نصر این برنامه که شما لینک دادید یک برنامه به نام Agent هست !‌ ولی برای Mail دادن و گرفتن !‌چیزی شبیه به OutLook و هیچ ربطی به این کار البته به سواد من نداره !‌میشه توضیح بدید ؟
بای

MiRHaDi
دوشنبه 09 آذر 1383, 13:54 عصر
سلام
یه سوال !

فرق Item['Agent_name'] با Character('AgentName') چیه ؟
من که هیچ فرقی نمیبینم
بای

shahgol80
چهارشنبه 09 اسفند 1396, 15:09 عصر
دوستان گرامی شما می دونید چه جوری میشه متن داخل بالون ایجنت رو راست چین کرد و فونتش رو تغییر داد ؟