برگزیده های پرشین تولز

آموزش،معرفي برنامه‌هاي ماكرو - اتوماسيون كارهاي كامپيوتري روزانه‌تان

شما معمولن از كدام برنامه‌هاي زير بيشتر استفاده مي‌كنيد؟

  • AutoHotkey

    Votes: 0 0.0%
  • برنامه شماره 7ي كه در آينده در پست اول معرفي خواهد شد

    Votes: 0 0.0%
  • برنامه شماره 8ي كه در آينده در پست اول معرفي خواهد شد

    Votes: 0 0.0%

  • Total voters
    17

igimax

کاربر فعال کامپیوتر
تاریخ عضویت
17 سپتامبر 2004
نوشته‌ها
3,410
لایک‌ها
1,348
سن
49
سلام دوستان عزيز
1.gif


106.gif
ممكنه براي مشاهده تصاوير موجود در پست‌هاي من نياز به اجراي يك هيتلر شكن داشته باشيد!!!
45.gif


فهرست كامل مقالات آموزشي ماكرو‌ها در پست دوم موجود است


آموزش RoboTask
-09 دستورات كنترلي 3 - دستورات Loopها



**********************************
مقدمه:
. خوب دستورات مربوط به Loopها (حلقه) شامل While Loop و Simple Loop و Windows loop و File Loop و Text Loop و Dataset Loop مي‌شود. اكثر اوقات ما بيشتر از While/Simple استفاده مي‌نماييم و بر اساس نوع نياز‌هايمان ممكنه از بقيه هم گه گاهي استفاده نماييم. اساس كار همه حلقه‌ها يكي است، تا زماني كه نتيجه شرط حلقه درست باشد، حلقه به تكرار دستورات درون بلوك خود ادامه خواهد داد.




********************************
حلقه While Loop:
. ديالوگ باكس (Dialog Box) و پارامتر‌هاي درون آن، دقيقن مشابه دستور IF/Then مي‌باشد. پس كار ما براي يادگيري و درك نحوه كار اين دستور بسيار راحت مي‌شود! حلقه While تا زماني كه نتيجه شرط درونش درست باشد دستورات درون حلقه خود را تكرار خواهد نمود. خوب آموزش اين دستور را با مثال‌هايي ادامه مي‌دهيم.


*========
* مسئله 18:
=> صورت مسئله:
. ماكرويي بنويسيد كه كاربر در صورت دلخواه آدرس سايت‌هاي مورد نظر خود را يكي يكي وارد نمايد و برنامه شما Ping هر سايت را چك كرده و عدد آن را به شما نمايش دهد.

=> تفصير صورت مسئله:
. خوب! آنچه مشخص است اين است كه اين برنامه باشد ping آدرس سايتي كه كاربر وارد مي‌نمايد را محاسبه و نمايش دهد. اما تعداد آدرس‌ها مشخص نيست همچنين اصلن ممكنه در همان ابتداي اجراي ماكرو كاربر از انجام چنين كاري منصرف شود!! پس حلقه ما فقط زماني بايد تكرار شود كه كاربر تمايل خود را اعلام نمايد!؟

=> نوشتن كد براي مسئله:
شروع كنيد:
1) Task جديدي را ايجاد و نام PT Sample 18 - Ping some Addresses را براي آن تعيين نماييد.
2) در تب Action دستورات زير را بنويسيد:
o
(01) Variable\Create Variable : [Variable name=DLG_RESULT] [Variable value=False]

(02) Variable\Create Variable : [Variable name=PING_RESULT] [Variable value=0]

(03) Variable\Create Variable : [Variable name=ADDRESS_FOR_PING] [Variable value=]

(04) Dialogs\Question Dialog : [Question text=Do you want to enter a site address for ping test?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Cancel/No - after 10 sec]

(05) Loop&Flows\While Loop : [Compare value as=Boolean] [First Op.={DLG_RESULT}] [Second Op.=True]

(06) Dialogs\Input Box : [Prompt String=Please enter a site address for ping test:] [Assigned Entered...=ADDRESS_FOR_PING] [Assigned This ...=www.google.com]

(07) Internet\Ping Host : [Host Name(...={ADDRESS_FOR_PING}] [Assign Reply ...=PING_RESULT]

(08) Dialogs\Show Message/Play Sound : [Message Text=
Ok! the ping test for this address:
{ADDRESS_FOR_PING}
Is:
{PING_RESULT} ms.]

(09) Dialogs\Question Dialog : [Question text=Do you want to enter another site address for ping test?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Cancel/No - after 10 sec]

(10) Loop&Flows\End Loop

(11)
Variables\Remove Variable : [Variable name=DLG_RESULT]

(12) Variables\Remove Variable : [Variable name=PING_RESULT]

(13) Variables\Remove Variable : [Variable name=ADDRESS_FOR_PING]
i

=> توضيحات مربوط به كد مسئله:
. با جراي اين برنامه اولين واكنش اين ماكرو نمايش پيغام موجود در خط 4 است، اگر كاربر مايل به تست پينگ باشد برنامه ادامه خواهد يافت در غير اينصورت خير! درون حلقه ابتدا آدرس سايت مورد نظر كاربر پرسيده مي‌شود. دقت نماييد آدرس سايت را بايد بدون http://‎ وارد نماييد. سپس ping آدرس داده شده تست و نتيجه در به كاربر نمايش داده مي‌شود. اينبار سوالي براي تكرار تست آدرسي ديگر پرسيده مي‌شود!؟ بر اساس پاسخ كاربر تست تكرار يا خاتمه خواهد يافتندي!

=> تست برنامه:
. خوب دوحالت در زير پيشبيني نموده‌ايم:

1) متغييرها در 3 خط ابتدايي تعريف مي‌شوند.
2) سوال موجود در خط (4) نمايش داده مي‌شود. كاربر پاسخ NO را انتخاب مي‌كند. مقدار False در متغيير DLG_RESULT قرار مي‌گيرد.
3) در خط (5) شرط حلقه ‎{DLG_RESULT}=True غلط خواهد بود! پس ادامه كنترل برنامه به انتهاي حلقه يعني خط (11) خواهد پريد.
4) متغيير‌ها پاك خواهند شد.
5) برنامه خاتمه مي‌يابد.

. اكنون حالت دوم زماني كه كاربر حال و حوسله بيشتري دارد!!:

1) متغييرها در 3 خط ابتدايي تعريف مي‌شوند.
2) سوال موجود در خط (4) نمايش داده مي‌شود. كاربر پاسخ Yes را انتخاب مي‌كند. مقدار True در متغيير DLG_RESULT قرار مي‌گيرد.
3) در خط (5) شرط حلقه ‎{DLG_RESULT}=True درست است، پس وارد بلوك حلقه مي‌شويم و خط (06) اجرا مي‌شود.
4) در خط (6) ديالوگ باكسي از كاربر خواسته مي‌شود كه آدرس سايت دلخواه خود را وارد نمايد. كاربر آدرس www.google.com را وارد كرده و در متغيير ADDRESS_FOR_PING قرار مي‌گيرد.
5) اكنون در خط (7) آدرس موجود در متغيير {ADDRESS_FOR_PING} كه برابر با www.google.com است، پينگ مي‌شود و نتيجه پينگ در متغيير PING_RESULT قرار مي‌گيرد.
6) در خط (8) در ديالوگي چند خطي آدرس سايت وارد شده توسط كاربر و عدد پينگ آن نمايش داده مي‌شود.
7) در خط (9) از كاربر سوال مي‌شود "آيا مايليد آدرس ديگري را پينگ نماييد؟" كاربر برروي NO كليك مي‌كند. مقدار False در متغيير DLG_RESULT قرار مي‌گيرد.
8) در خط (10) مسير اجراي خطوط ماكرو به ابتداي حلقه يعني خط (5) مي‌پرد!
9) در خط (5) شرط حلقه ‎{DLG_RESULT}=True غلط خواهد بود! پس ادامه كنترل برنامه به انتهاي حلقه يعني خط (11) خواهد پريد.
10) متغيير‌ها پاك خواهند شد.
11) برنامه خاتمه مي‌يابد.



*========
* مسئله 19:
=> صورت مسئله:
. ماكرويي بنويسيد كه پس از دسترسي به اينترنت (چه dial-up چه از طريق LAN و ...) پيغام شما به اينترنت دسترسي داريد را نمايش دهد و در صورت اتمام دسترسي پيغام مناسب را نمايش دهد. اين كنترل‌ها تا زماني كه كاربر بخواهد ادامه داشته باشد.

=> تفصير صورت مسئله:
. خوب چون نوع كنترل دسترسي به اينترنت قراره نا مشخص باشه پس نمي‌شه از Trigger مربوط به Connection Monitorها استفاده نمود. پس تنها راه تشخيص دادن داشتن دسترسي به اينترنت Ping كردن است. فقط در مسئله زير براي كوتاه شدن خطوط ماكرو من فقط براي يك آدرس عمل تست پينگ را انجام مي‌دهم در صورتي كه حداقل تست 3 آدرس مطمعن‌تر (حدود 99.99%) يا تست دسترسي به يك سرور FTP ديگه 100% است!
. نكته بعدي اين هست كه كنترل‌هاي فوق بايد همواره تكرار شوند و فقط در صورت فرمان كاربر بايد ماكرو خاتمه يابد! پس اگر خود كنترل دسترسي داشتن/نداشتن يك حلقه نياز داشته باشد، براي تكرار دوباره كل كنترل‌ها نيز بايد يك حلقه بزرگتر در نظر بگيريم كه حلقه كنترل‌ها درون آن قرار بگيرند. قبلن در دروس قبلي با نام اين حالات حلقه در حلقه آشنا شده بوديم، به آن Nested Loop مي‌گفتيم.

=> نوشتن كد براي مسئله:
شروع كنيد:
1) Task جديدي را ايجاد و نام PT Sample 19 - Monitoring of Accessing to Internet را براي آن تعيين نماييد.
2) در تب Action دستورات زير را بنويسيد:

(01) Variable\Create Variable : [Variable name=DLG_RESULT] [Variable value=False]

(02) Variable\Create Variable : [Variable name=PING_RESULT] [Variable value=0]

(03) Dialogs\Question Dialog : [Question text=Do you want to start "Internet Access Monitoring"?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Ok/Yes - after 10 sec]

(04) Loop&Flows\While Loop : [Compare value as=Boolean] [First Op.={DLG_RESULT}] [Second Op.=True]

(05) Internet\Ping Host : [Host Name(...=www.google.com] [Assign Reply ...=PING_RESULT]

(06) Loop&Flows\While Loop : [Compare value as=Number] [First Op.={PING_RESULT}][Comparison Type= < ] [Second Op.=0]

(07) Internet\Ping Host : [Host Name(...=www.google.com] [Assign Reply ...=PING_RESULT]

(08) General\Pause : [Pause=50]

(09) Loop&Flows\End Loop

(10) Dialogs\Question Dialog : [Question text=
You can accessing to internet now!

Do you want to check disconection too?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Ok/Yes - after 10 sec]

(11) Loop&Flows\IF Then : [Compare value as=Boolean] [First Op.={DLG_RESULT}] [Second Op.=False]

(12) Loop&Flows\Break

(13) Loop&Flows\End IF

(14) Loop&Flows\While Loop : [Compare value as=Number] [First Op.={PING_RESULT}][Comparison Type= >= ] [Second Op.=0]

(15) Internet\Ping Host : [Host Name(...=www.google.com] [Assign Reply ...=PING_RESULT]

(16) General\Pause : [Pause=50]

(17) Loop&Flows\End Loop

(18) Dialogs\Question Dialog : [Question text=
You can accessing to internet now!

Do you want to check disconection too?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Ok/Yes - after 10 sec]

(19) Loop&Flows\End Loop
i

=> توضيحات مربوط به كد مسئله:
. خوب! در خط (04) حلقه بيروني و اصلي برنامه قرار دارد كه شرط اجراي آن اين است كه همواره مقدار متغيير DLG_RESULT روي True باشد. درون اين حلقه دو حلقه وجود دارد. اولي بين خطوط (06) تا (09) است و دومي بين خطوط (14) تا (17) است. پارامتر‌هاي First Operand و Second Operand هردو حلقه مشابه هستند. يعني يكطرف متغييري است كه نتيجه پيگ را در خود ذخيره مي‌كند يعني PING_RESULT و طرف ديگر عدد 0 است. اما نوع مقايسه (Comparison Type) در حلقه اولي علامت كوچكتر ">" است و در دومي علامت بزرگتر مساوي "=<" است.

. در حلقه 6 تا 9، تا زماني كه پينگ سايت -1 يعني غير قابل دسترسي باشد، بلوك حلقه تكرار خواهد شد و در هر 5 ثانيه يكبار پينگ تست مي‌شود. در صورتي كه نتيجه تست پينگ بيشتر از -1 شود (0 يا بيشتر!) حلقه خاتمه خواهد يافت و پيغام "دسترسي به اينترنت مقدور شد" نمايش داده خواهد شد.

. در حلقه 14 تا 17، زماني به اين لينك خواهيم رسيد كه در حلقه قبلي پينگ بيش از -1 شده و دسترسي به اينترنت اكنون وجود دارد، پس در اين حلقه تا زماني كه پينگ بيشتر يا مساوي 0 باشد بلوك حلقه ادامه خواهد داشت.

. در خوطوط (10) و (18) پيغام دسترسي به اينترنت مقدور شد يا قطع شد نمايش داده مي‌شود ولي در ادامه سوالي يكسان پرسيده مي‌شود: "آيا مي‌خواهيد كه اين ماكرو ادامه يابد؟" در خط 10 لازم بود نتيجه پاسخ كاربر را كنترل كنيم چون وسط حلقه قرار دارد ولي براي خط 18 لازم نيست چون در انتهاي حلقه است و خود دستور While موجود در خط 4 نتيجه سوال فوق را كنترل خواهد نمود.

=> تست برنامه:
. فكر كنم اگر خودتان اين ماكرو را تست كنيد آن را بهتر درك خواهيد نمود!!




********************************
حلقه Simple Loop:
. اين حلقه بر خلاف بقيه حلقه‌ها ميزان تكرار نمودن دستورات درون بلوكش از قبل از اجراي حلقه مشخص است! چون در پارامتر‌هاي درون اين حلقه بايد شماره شروع و پايان مشخص شود و شمارش به صورت يكي يكي انجام مي‌شود. پس اگر شماره شروع 1 و خاتمه 10 باشد اين حلقه به اندازه 1-10+1=10بار تكرار خواهد شد. (چون خود 10 هم است +1 مي‌كنيم) پس اگر شماره شروع 0 و خاتمه 2 باشد مي‌شود 2-0+1=3بار و ....

. ما از اين حلقه زماني استفاده مي‌نماييم كه تعداد تكرار حلقه مشخص باشد.


*========
* مسئله 20:
=> صورت مسئله:
. مسئله 17 از آموزش 8 را به كمك Simple Loop باز نويسي نماييد. با اين تفاوت كه در انتهاي پينگ هر 3 سايت، تعداد سايت‌هاي قابل پينگ شدن را نمايش دهد.

=> تفصير صورت مسئله:
. در اين مثال ما از Array Variable ها استفاده خواهيم نمود. متغيير‌هاي آرايه‌اي داراي Index يا شاخص هستند. ما مي‌توانيم در يك متغيير چندين مقدار مختلف را ذخيره نماييم. در رياضي ما متغييري كه داراي شاخص هست را به اين شكل ميظنويسيم: مثلن X[SUB]1[/SUB]=10 و X[SUB]2[/SUB]=20 و X[SUB]3[/SUB]=35 همه اين‌ها يك متغيير هستند X ولي بر اساس Index-شان داراي 3 مقدار مختلف هستند. در كامپيوتر و زبان‌هاي برنامه نويسي ما متغيير‌هاي آرايه‌اي را به اين شكل مي‌نويسيم:

X(1) = 10
X(2) = 20
X(3) = 35
‎​

. در Robotask يك متغيير آرايه‌اي را به اين شكل تعريف مي‌كنيم:
NUMBERS = 1,25,-66​

. در اينجا نام متغيير Number و 3 مقدار مختلف آن برابر:
‎{NUNBERS(1)} = 1
{NUNBERS(2)} = 25
{NUNBERS(3)} = -66‎​


=> نوشتن كد براي مسئله:
شروع كنيد:
1) Task جديدي را ايجاد و نام PT Sample 20 - Is accessing to internet possible را براي آن تعيين نماييد.
2) در تب Action دستورات زير را بنويسيد:

(01) Variable\Create Variable : [Variable name=TOTAL_PINGABLE_SITES] [Variable value=0]

(02) Variable\Create Variable : [Variable name=PING_RESULT] [Variable value=0]

(03) Variable\Create Variable : [Variable name=SITE_ADDRESSES] [Variable value=www.google.com,www.download.com,www.intel.com]

(04) Loop&Flows\Simple Loop : [Start From= 1] [To=3] [Destination Variable=COUNTER]

(05) Internet\Ping Host : [Host Name(...={SITE_ADDRESSES({COUNTER})}] [Assign Reply ...=PING_RESULT]

(06) Loop&Flows\IF Then : [Compare value as=Number] [First Op.={PING_RESULT}][Comparison Type= >= ] [Second Op.=0]

(07) Variable\Increment Variable : [Variable name=TOTAL_PINGABLE_SITES] [Increment by=1]

(08) Loop&Flows\End IF

(09) Loop&Flows\End Loop

(10) Dialogs\Show Message/Play Sound : [Message Text=Total Pingable Sites = {TOTAL_PINGABLE_SITES}]
i

=> توضيحات مربوط به كد مسئله:
. ميبينيد چقدر خطوط كمتر مي‌شود! دستور Simple Loop هر عدد را كه از قسمت Start From تا To را يكي يكي مي‌شمارد، عدد فعلي را در متغيير موجود در پارامتر Destination Variable قرار مي‌دهد. در اينجا متغيير ما نامش COUNTER است و اين متغيير در خط (05) به عنوان شماره Index متغيير آرايه‌اي SITE_ADDRESSES مي‌شود.




********************************
حلقه Text Loop:
. با اين حلقه مي‌توانيد تك تك خطوط يك فايل متني يا متني كه در درون خود يكي از پارامتر‌هاي خود حلقه كپي مي‌كنيد را به نوبت و خط به خط خوانده و در درون حلقه هر خط را مورد بررسي قرار دهيد.




********************************
حلقه Windows Loop:
. اين حلقه نام تك تك پنجره‌هاي باز را به درون حلقه خود فرستاده و شما مي‌توانيد عمليات مورد نظرتون را برروي آن انجام دهيد. مثلن مي‌خواهيد تمامي پنجره‌هاي باز Browser خود را يكي يكي ببنديد.




********************************
حلقه File Loop:
. با اين حلقه مي‌شود نام تك تك فايل‌هاي درون يك فولدر را در درون يك متغيير به درون حلقه فرستاد تا روي آنها كارهايي انجام گيرد. مثلن مي‌شود آنها را rename نمود يا فايل‌هاي MP3 را يافته و به فولدر موسيقي منتقل نموده يا ...




********************************
حلقه Dataset Loop::
. حقيقتش تا الان از اين حلقه استفاده نكردم ولي اگر با SQL آشنايي داريد ميدانيد براي چه منظوري ممكنه به شما كمك كند!




********************************
مشق شب:
questionmark1.gif
سوال؟ مشق شب 18: ماكرويي بنويسيد كه يك كانكشن را Dial كرده و پس از برقراري ارتباط 3 سايت را Ping نمايد اگر 2 سايت از 3 سايت Pingشان منفي بود كانكشن را قطع نمايد و دوباره كانكت شده و تست فوق انجام شود.




********************************
اتمام آموزش 09 و خلاصه اخبار!:
* حلقه‌ها براي تست و انجام يكسري كار‌ها به شكل تكراري برروي داده‌هايي با نكات مشترك مورد استفاده قرار مي‌گيرند.

* شرطي كه براي حلقه‌هاي شرطي (همانند While) انتخاب مي‌كنيد، براي اتمام كار حلقه يا بايد زماني نتيجه آن False شود يا اگر مخصوصن شرطي قرار داده‌ايد همواره true است به هرحال بايد به كمك يك دستور IF/Then و دستور Break زماني كار آن حلقه را اتمام دهيد. وگرنه حلقه شما يك حلقه بينهايت مي‌شود!


موفق باشيد.
67.gif


خداحافظ
IgImAx
90/06/28
26.gif
103.gif
 
Last edited:

miladali

Registered User
تاریخ عضویت
5 ژانویه 2006
نوشته‌ها
735
لایک‌ها
722
با اجازه استاد و صاحب تاپيك

من برنامه Automate رو يه مدتي هست دارم باهاش كار ميكنم. راحتي كارش تقريبا مثال Robotask هستش ولي با دستوريت بسيار گسترده تري كه با Help خوبي كه داره هر جا گيري پيش بياد سرع بر طرف ميشه.
مثلا اين برنامه حتي ميتونه وقتي Logout هستي تو يه يوزر خاصي Login كنه چه برسه به اين Unlock Workstation . البته ورژن 8 اين برنامه گزينه Unlock داره ولي كار نميكنه كه يه خورده توي فرومشون گشت زدم ديدم كه يكي از دست اندر كاران نوشته كه اين باگ تو 8 وجود داره و در صدد بر طرف كردنش هستند . در نتيجه كسايي كه ميخواند از اين گزينه استفاده كنند ( مثل خودم) بايد از ورژن 7 اين برنامه استفاده بزنند
 

igimax

کاربر فعال کامپیوتر
تاریخ عضویت
17 سپتامبر 2004
نوشته‌ها
3,410
لایک‌ها
1,348
سن
49
سلام miladali جان
1.gif
من برنامه Automate رو يه مدتي هست دارم باهاش كار ميكنم. راحتي كارش تقريبا مثال Robotask هستش ولي با دستوريت بسيار گسترده تري كه با Help خوبي كه داره هر جا گيري پيش بياد سرع بر طرف ميشه.
مثلا اين برنامه حتي ميتونه وقتي Logout هستي تو يه يوزر خاصي Login كنه چه برسه به اين Unlock Workstation . البته ورژن 8 اين برنامه گزينه Unlock داره ولي كار نميكنه كه يه خورده توي فرومشون گشت زدم ديدم كه يكي از دست اندر كاران نوشته كه اين باگ تو 8 وجود داره و در صدد بر طرف كردنش هستند . در نتيجه كسايي كه ميخواند از اين گزينه استفاده كنند ( مثل خودم) بايد از ورژن 7 اين برنامه استفاده بزنند
. ممنون كه اطلاع داديد. در ضمن اين تاپيك متعلق به همه دوستان است و هر مطلب آموزشي يا نكته‌اي كه دوست داريد در مورد برنامه‌هاي Automation بنويسيد.

. نكته آموزشي شما در فهرست صفحه اول قرار گرفت.

موفق باشيد.
67.gif


خداحافظ
IgImAx
90/06/29
26.gif
103.gif
 

igimax

کاربر فعال کامپیوتر
تاریخ عضویت
17 سپتامبر 2004
نوشته‌ها
3,410
لایک‌ها
1,348
سن
49
سلام دوستان عزيز
1.gif


. در اينجا رسمن! آموزش ابتدايي برنامه RoboTask اتمام يافت. آنچه آموزش داده شد و مثال‌هاي درون آنها بايد ايده روش استفاده از دستورات مختلف را به شما داده باشد. همچنين مثال‌هاي زيادي كه ذكر شد بايد تا حدودي ايده چگونه فكر نمودن برروي يك مسئله ساده و نوشتن يك الگوريتم و در ادامه يك ماكرو براي آن را به شما داده باشد.

. اميدوارم كه توانسته باشم اهداف فوق را به خوبي انجام داده باشم و همچنين لطفن كمي و كاستي‌هاي مطالبم و كمي دانشم را به بزرگواري خود ببخشيد.

. از اين به بعد نمونه كدهاي آماده را كه براي ديگران نوشته‌ام را در اينجا قرار خواهم داد و اميدوارم مورد استفاده شما عزيزان قرار گيرد يا حداقل به عنوان يك نمونه آموزشي مورد استفاده قرار گيرد.

. همچنان در اين تاپيك من و دوستان همراه اين تاپيك، سعي مي‌كنيم پاسخگوي سوالات شما در مورد برنامه‌هاي ماكرو بوده و هر از چندگاهي هم برنامه‌هاي جديد يا نسخه‌هاي به روز شده و امكانات جديد آنها را معرفي نماييم. سلامت و شاد و موفق باشيد در پناه خوا و سايه خانواده...
53.gif
54.gif


موفق باشيد.
67.gif


خداحافظ
IgImAx
90/07/02
26.gif
103.gif
 

igimax

کاربر فعال کامپیوتر
تاریخ عضویت
17 سپتامبر 2004
نوشته‌ها
3,410
لایک‌ها
1,348
سن
49
سلام miladali جان
1.gif


...
مثلا اين برنامه حتي ميتونه وقتي Logout هستي تو يه يوزر خاصي Login كنه چه برسه به اين Unlock Workstation . البته ورژن 8 اين برنامه گزينه Unlock داره ولي كار نميكنه كه يه خورده توي فرومشون گشت...
. آقا همين الان برنامه Automate 8 را نصب نمودم و اجراش كردم. در همين نگاه‌هاي اوليه در منوي System\Options...‎ برنامه در تب Logon فقط يك گزينه‌ به نام Enable Software SAS موجود است. زيرش توضيح داده كه بايد اين گزينه را فعال نماييد تا امكان Unlock و Lock كردن در ويندوز 7 و ويستا به درستي انجام شود. آيا شما اين گزينه را فعال نموديد؟!

. اين گزينه به شكل پيشفرض فعال نيست.

موفق باشيد.
67.gif


خداحافظ
IgImAx
90/07/02
26.gif
103.gif
 

miladali

Registered User
تاریخ عضویت
5 ژانویه 2006
نوشته‌ها
735
لایک‌ها
722
سلام miladali جان
1.gif



. آقا همين الان برنامه Automate 8 را نصب نمودم و اجراش كردم. در همين نگاه‌هاي اوليه در منوي System\Options...‎ برنامه در تب Logon فقط يك گزينه‌ به نام Enable Software SAS موجود است. زيرش توضيح داده كه بايد اين گزينه را فعال نماييد تا امكان Unlock و Lock كردن در ويندوز 7 و ويستا به درستي انجام شود. آيا شما اين گزينه را فعال نموديد؟!

. اين گزينه به شكل پيشفرض فعال نيست.

موفق باشيد.
67.gif


خداحافظ
IgImAx
90/07/02
26.gif
103.gif

براي ويندوز XP اين صفحه متفاوته. تو همون آپشني كه شما گفتيد جايي مياد كه ازم يوزر و پسوورد و دامين رو ميخواد.
 

igimax

کاربر فعال کامپیوتر
تاریخ عضویت
17 سپتامبر 2004
نوشته‌ها
3,410
لایک‌ها
1,348
سن
49
سلام دوستان عزيز
1.gif


همواره پست‌هاي اول تاپيك‌هاي من را كامل مطالعه نماييد. چون همواره آنها را به روز مي‌كنم.

106.gif
ممكنه براي مشاهده تصاوير موجود در پست‌هاي من نياز به اجراي يك هيتلر شكن داشته باشيد!!!
45.gif




**********************
. من برنامه Automate v8.0.1.0 را نصب و بررسي نمودم. برنامه بسيار كاملي است. GUI آن و راحتي كار با بعضي از دستورات آن براي كاربران مبتدي ممكنه كمي پيچيده باشه ولي اكثر دستوراتش كه حالت استفاده عمومي‌تري دارند ساده و قابل فهم مي‌باشند. تعداد و تنوع دستورات Automate بسيار عالي و نسبتن كامل است.

. بالاخره يك برنامه از سري برنامه‌هاي Automation كه دستوراتشون به شكل Visual هستند، ديدم(به غير از Autoit كه كلن دستوراتش متني هست و بسيار كامل و حرفه‌اي) كه اولند دستور IF آن به شكل عادي و درست از Or/And پشتيباني مي‌كند. دومند، متغيير‌هاي Array آن به شكل درستي! مقداردهي مي‌شوند و حتا آرايه 2 و 3 بعدي را هم پشتيباني مي‌كند. و سر آخر (ولي نه آخرين! دستور) دستور Select Case دارد!!! ليست دستورات آن در شكل زير ديده مي‌شود (شكل زير به پست 5 اضافه شد):


لينك تصوير 1
تصوير گروه‌ها و دستورات كامل برنامه Automate 8.0.1.0



exclamationmark02.gif
توجه: در ادامه برنامه Automate را فقط با Robotask و WinAutomation مقايسه نموده‌ام اولند چون همه اين‌ها از خانواده برنامه‌هايي هستند كه دستوراتشان به شكل visual قابل استفاده است نه مثل Autoit كه متني است. (Visual=يعني خود دستور را تايپ نمي‌كنيم بلكه از ليست دستورات آن را انتخاب و فقط پارامتر‌هاي آن را وارد مي‌كنيم) دومند، برنامه Macro Express كه در تست‌هاي من بسيار غير استيبل بود! و برنامه Macro Recorder برنامه‌اي ساده بين دو برنامه فوق است و برنامه Automation Anywhere به دليل سنگيني هرگز تست نشده! در مقايسه فوق شركت داده نشده است.

. مقايسه با Robotask: در Automate، بعضي از دستوراتش كه مشابه آنها در برنامه Robotask موجود است، از لحاظ تعداد پارامتر‌ها و توانايي‌هايشان بسيار بيشتر است.(مثل If/Then يا Array variable ...) از لحاظ تعداد دستور هم كه مشخصن از Robotask بيشتر مي‌باشد. جاي يكي دوتا از Triggerها و دستورات Robotask در برنامه فوق خالي است. (در ادامه نوشته‌ام) اما برنامه Automate دستورات بسيار زياد و حرفه‌اي دارد كه اصلن در Robotask نيستند.

. مقايسه با WinAutomation: محيط و روش دسترسي به Taskها و Editor در هر دو برنامه تقريبن پبيه همديگه هستند. تنوع دستورات در هر دو خوب است ولي خوب Automate دستوراتش بيشتر و باز هم در دستورات مشابه، Automate خيلي بهتر است. اما سرعت باز شدن Editor و كلن خود برنامه در WinAutomation سريعتر و سبكتر از Automate است.

.مقايسه دستورات مشابه Automate در Robotask و WinAutomation: در كل پارامتر‌هاي درون دستورات Automate از دوتاي ديگه در بعضي دستورات بيشتر و حرفه‌اي‌تر مي‌باشد:

دستورات مشابه ولي با توانايي بيشتر:
1) دستور IF: براي اولين بار در اين برنامه مي‌توان در دستور IF از And/Or/Not/Xor/...‎ فقط در يك خط دستور استفاده نمود.

2) دستور Array: مي‌توان يكجا يا به شكل تك تك، متغيير آرايه را مقدار دهي نمود. همچنين توانايي ايجاد آرايه 2 يا 3 بعدي هم هست. در دو برنامه فوق فقط در Robotask متغيير آرايه وجود داشت كه مقداردهي تك تك اعضاي آن به شكل عادي غير ممكن بود.

3) دستور Dialog: اين دستور داراي توانايي نمايش Notification Window با توانايي توقف/ادامه Task را در زمان نمايش دارد. Robotask چنين توانايي را ندارد ولي WinAutomation به نوعي ديگر اين توانايي را دارد ولي در Automate بهتر اين توانايي اجرا مي‌شود.

4) پشتيباني از Unicode: اين توانايي كه اصلن در Robotask نيست و در WinAutomation تا حدودي موجود است. ولي مثلن برنامه Automate مي‌تواند به غير از فايل Text فايل‌هاي حاوي كد unicode را هم بخواند.

5) ...

. و دستورات ديگر كه فعلن دستورات فوق مهمترينشون بودند.

دستوراتي كه فقط در Automate موجود است:
1) دستور Select Case: واقعن جاي اين دستور خالي بود! توضيحي براي دوستان نا آشنا با اين فرمان: اين دستور جزو دستورات Flowihها است، و به نوعي يك نوع دستور IF است ولي فقط حالات مختلف يك متغيير را چك مي‌كند. بدون اين دستور براي كنترل حالات مختلف يك متغيير بايد براي هر حالت يك دستور IF جدا نوشت.

2) دستور SNMP: براي كنترل Router/Modem و مناسب كاربران شبكه.

3) دستور Unlock Workstation: براي دوباره Logon كردن در ويندوز وقتي ويندوز lock است يا صفحه login فعال است.

4) دستور Execute DDL Function: براي اجراي توابع درون DDL مناسب است. البته ميشه در خط فرمان به كمك دستورات داس درون ويندوز چنين كاري نمود ولي اين دستور خروجي توابع را هم چك مي‌كند و در متغييري براي استفاده در درون برنامه قرار مي‌دهد.

5) دستورات Cryptography: براي كد كردن و به دست آوردن Hash Code و .... بسيار عالي براي ايمني بالا.

6) ...

دستوراتي كه جايشان در Automate خالي است:
1) دستور Network Listening: واقعن وجود اين دستور در Robotask يك وزنه محسوب مي‌شود! براي كنترل سيستم ديگر از راه شبكه مورد استفاده قرار مي‌گيرد.

2) trigger مربوط به Connection Monitoring: عجيبه چنين دستوري به شكل مستقيم در ليست Triggerها قرار داده نشده!!!؟؟ البته در فروم برنامه نوشته شده كه ميشه از WMI استفاده نمود ولي نگفته چطوري؟! اينجا را ببينيد.

3) دستور Move/Copy Folder: خيلي عجيبه!!! اصلن چنين دستوري وجود نيست؟!؟!

4) دستور Capture Screen: جاش خاليه! WinAutomation اين را دارد.

. حالا بايد يكم باهاش كار كنم ببينم چقدر استيبل و قابل اتكا است! چون در تست‌هاي من برنامه Macro Express كه افتضاه بود! يكبار يه دستورش درست كار مي‌كرد يكبار نه!؟ هميشه كلي باگ توش بود. Robotask در اين زمينه واقعن عالي است. زياد برنامه WinAutomation را تست نكردم ولي بد نبوده.

. در زمينه سرعت اجراي خود برنامه يا editor و ... برنامه Automate خيلي نسبت به robotask كندتر است و كمي هم كندتر نسبت به WinAutomation! پس اين برنامه از لحاظ سرعت اجرا از دوتاي ديگه كندتره! بزرگترين بدي اين برنامه، ميزان حافظه‌اي هست كه مي‌خوره!!!


. خوب فعلن اين‌ها نتيجه اولين تست‌هاي من بودند. بعدن اگر باز هم وقت كردم و تست كردم نتيجه را گذارش مي‌دهم. اگر برنامه خفني مثل اين مي‌شناسيد يا يافتيد خبر دهيد. ممنون.

موفق باشيد.
67.gif


خداحافظ
IgImAx
90/07/03
26.gif
103.gif
 

miladali

Registered User
تاریخ عضویت
5 ژانویه 2006
نوشته‌ها
735
لایک‌ها
722
اول اینکه Automate 9 ریلیز شده خب کم خیلی باهاش کار نکردم ولی مشکلی که ورژن 8 این برنامه در Unlock کردن ویندور XP داشت برطرف شده که مهمترین استفاده رو برای من داره

دوم اینکه باید شدیدا از دوست عزیزمون igimax تشکرات ویژه بعمل بیارم.این آموزش های بی منتشون و کمک های فراوانشون واقعا بی نظیره. بشخصه با آموزشی که تو این تاپیک دیدم تونستم با کمک همین Robotak بخش عظیمی از پایان نامم رو به کمک کامپیوتر انجام بدم بدون نیاز به اینکه از برنامه هایی مثل Matlab و VB استفاده کنم
واقعا ممنونم
 

igimax

کاربر فعال کامپیوتر
تاریخ عضویت
17 سپتامبر 2004
نوشته‌ها
3,410
لایک‌ها
1,348
سن
49
سلام دوستان عزيز
1.gif


. ما اينيم
15.gif
:


تصوير فرق يك Geek با غير Geek در انجام كارهاي تكراري كامپيوتري

موفق باشيد.
67.gif


خداحافظ
IgImAx
90/10/17
26.gif
103.gif
 

miladali

Registered User
تاریخ عضویت
5 ژانویه 2006
نوشته‌ها
735
لایک‌ها
722
میخواستم ببینم راهی هست بشه سر ساعات خاصی کامپیوتر روشن بشه؟؟
 

igimax

کاربر فعال کامپیوتر
تاریخ عضویت
17 سپتامبر 2004
نوشته‌ها
3,410
لایک‌ها
1,348
سن
49
سلام miladali جان
1.gif


میخواستم ببینم راهی هست بشه سر ساعات خاصی کامپیوتر روشن بشه؟؟
. به! بعـــله! آقا دمت گرم!
3.gif
اصلن تمامي اين كار‌هاي اتوماسيون بدون توانايي روشن شدن كامپيوتر براي ما بيفايده بوده! بله بايد در بايوس مادربورد اين را تنظيم نماييد تا كامپيوتر سر ساغت دلخواه شما روشن بشه. مثلن من تنظيم كردم كه ساعت 2 هر شب سيستم روشن بشه و بعد ... يكسري توضيحات در اينجا نوشتم: http://forum.persiantools.com/t108527.html

. البته براي دسكتاپ مي‌شه چون درون بايوسش همچين توانايي هست ولي براي لپتاپ اكثرن چنين توانايي نيست و اون‌ها باشد از برنامه Auto Shutdown استفاده كنند كه يكي از دوستان هم در همان تاپيك فوق توضيح دادن و لينك تاپيك خودشون را هم اونجا قرار دادند. خلاصش اينه كه لپتاپ داران مجبورند از حقه Sleep و Hibernate استفاده نمايند. متاسفانه من هيچ وقت از اون روش‌ها براي لپتاپ استفاده نكرده‌ام و تجربه‌اي هم ندارم!!
2.gif


موفق باشيد.
67.gif


خداحافظ
IgImAx
90/10/21
26.gif
103.gif
 

igimax

کاربر فعال کامپیوتر
تاریخ عضویت
17 سپتامبر 2004
نوشته‌ها
3,410
لایک‌ها
1,348
سن
49
سلام دوستان عزيز
1.gif


. قبلش اين را عرض كنم: من با ماكرو نويسي در Excel آشنايي ندارم پس نمي‌توانم وارد جزييات شوم! ولي فكر كنم براي اجراي يك ماكرو برروي تعداد زيادي فايل Excel اجرا نماييم مي‌شود از بعضي از برنامه‌هاي Automation مانند Automate استفاده نماييد!؟

. خب! در اين آدرس از سايت مايكروسافت How To Create and Call an Excel Macro Programmatically from VB يك نمونه مثال ساده و بسيار آسان و واضح كد VB گذاشته شده كه بسيار بسيار اجراش راحته و خودش قدم به قدم توضيح داده:
کد:
[LEFT]
Follow the steps below to create the sample application:
[/LEFT]

[LIST=1]
[*=left]Create a Standard EXE project in Visual Basic. Form1 is created by default. 
[*=left]Click References from the Project menu and check "Microsoft Visual Basic for Applications Extensibility." 
[*=left]Add a CommandButton to Form1. 
[*=left]Copy and paste the following code to the form's code window: 
[*=left]Run the application. You should see Microsoft Excel launch, followed    by a message box saying "Inside generated macro!!!." At this point, you    are executing code inside your generated macro. Click OK to dismiss this    dialog box and you should then see a dialog box reporting "All done,    click me to continue." Leave this up, and switch to Excel. There should    be a new toolbar visible, with a button with a white-hand icon. The    Visual Basic code above associated this button with your macro,    MyMacro(), via the OnAction property. When you click this button,    MyMacro() gets called. Click it once to see it work. Click back to the    form in Visual Basic and click OK on the "All done, click me to    continue" message box. 
[/LIST]

PHP:
      Private Sub Command1_Click()
       ' Start Excel
       Dim xlapp As Object 'Excel.Application
       Set xlapp = CreateObject("Excel.Application")

       ' Make it visible...
       xlapp.Visible = True

       ' Add a new workbook
       Dim xlbook As Object 'Excel.Workbook
       Set xlbook = xlapp.Workbooks.Add

       ' Add a module
       Dim xlmodule As Object 'VBComponent
       Set xlmodule = xlbook.VBProject.VBComponents.Add(1) 'vbext_ct_StdModule

       ' Add a macro to the module...
       Dim strCode As String
       strCode = _
          "sub MyMacro()" & vbCr & _
          "   msgbox ""Inside generated macro!!!"" " & vbCr & _
          "end sub"
       xlmodule.CodeModule.AddFromString strCode


       ' Run the new macro!
       xlapp.Run "MyMacro"

       ' ** Create a new toolbar with a button to fire macro...
       ' Add a new toolbar...
       Dim cbs As Object 'CommandBars
       Dim cb As Object 'CommandBar
       Set cbs = xlapp.CommandBars
       Set cb = cbs.Add("MyCommandBar", 1, , True) '1=msoBarTop
       cb.Visible = True

       ' Make it visible & add a button...
       Dim cbc As Object 'CommandBarControl
       Set cbc = cb.Controls.Add(1) '1=msoControlButton

       ' Assign our button to our macro
       cbc.OnAction = "MyMacro"

       ' Set text...
       cbc.Caption = "Call MyMacro()"

       ' Set Face image...
       ' 51 = white hand
       ' 25 = glasses
       ' 34 = ink dipper
       ' etc...
       cbc.FaceId = 51

       ' Pause so you can inspect results...
       MsgBox "All done, click me to continue...", vbMsgBoxSetForeground

       ' Remember to release module
       Set xlmodule = Nothing

       ' Clean up
       xlbook.Saved = True
       xlapp.Quit
      End Sub
. البته همانطور كه در ادامه همان مطلب فوق توضيح داده شده است، يك تنظيم ايمني در Office هست كه به شكل پيش فرض دسترسي VBA را به Excel را بلوك مي‌كند وبايد شما آن را دستي يكبار روشن نماييد. درون خود صفحه فوق اين لينك را براي اينكار معرفي نموده: Programmatic access to Office VBA project is denied ولي من گيج كه همون اول متوجه اون نشدم (چون هيچوقت درست نمي‌خونم!!) اول اين را يافم XL2002: Error Message: Run-Time Error '1004': Programmatic Access to the Visual Basic Project Is Not Trusted كه براي Excel 2003 بوك كه خوب چون تنظيماتش با نسخه 2010 من متفاوت بود اين را يافتم Change macro security settings in Excel - Excel - Office.com و مشكلم حل شد.

موفق باشيد.
67.gif


خداحافظ
IgImAx
90/10/21
26.gif
103.gif
 
Last edited:

miladali

Registered User
تاریخ عضویت
5 ژانویه 2006
نوشته‌ها
735
لایک‌ها
722
به! بعـــله! آقا دمت گرم! اصلن تمامي اين كار‌هاي اتوماسيون بدون توانايي روشن شدن كامپيوتر براي ما بيفايده بوده! بله بايد در بايوس مادربورد اين را تنظيم نماييد تا كامپيوتر سر ساغت دلخواه شما روشن بشه. مثلن من تنظيم كردم كه ساعت 2 هر شب سيستم روشن بشه و بعد ... يكسري توضيحات در اينجا نوشتم: آموزشي - چگونه سيستم خود را براي اكنت شبانه صبانت آماده نماييم

حالا مسئله اسنه. چطور از پسوور بایوس میشه رد شد؟؟:D

بابت برناممه ماکرو هم ممنون. من تو تاپیک مطرح نکردم چون یه برنامه 7 8 خطی یافتم که بدون مشکل اجرا شد.راجع به این برنامه که شما گذاشتید یه سوال دارم اونم اییکه برنامه بصورت یه Shortcut تو اکسل میاد یا بازم باید تو خود VB اجراش کنیم؟
 

igimax

کاربر فعال کامپیوتر
تاریخ عضویت
17 سپتامبر 2004
نوشته‌ها
3,410
لایک‌ها
1,348
سن
49
سلام miladali جان
1.gif


حالا مسئله اسنه. چطور از پسوور بایوس میشه رد شد؟؟:D
. براي سيستمت پسورد گذاشتي و حالا يادت رفته!؟ خوب كاري نداره به دفترچه مادربوردت مراجعه كن (نداري از اينترنت دنلود كن) بعد جامپر ريست كردن بايوس را روس مادربورد از توي دفترچه پيدا كن (تو اون صفحه كه نقشه يا عكس مادربورد كشيده، جامپر ريست رو مشخص كرده) بعد در كيس رو باز كن و تمامي كابل‌هاي برق كامپيوتر را از پريز خارج كن و بايوس را به كمك اون جامپر ريست كن.

بابت برناممه ماکرو هم ممنون. من تو تاپیک مطرح نکردم چون یه برنامه 7 8 خطی یافتم که بدون مشکل اجرا شد.راجع به این برنامه که شما گذاشتید یه سوال دارم اونم اییکه برنامه بصورت یه Shortcut تو اکسل میاد یا بازم باید تو خود VB اجراش کنیم؟
. متوجه شدم كه ممكنه جواب را پيدا كرده باشيد ولي براي استفاده ديگران گذاشتم. من اين كد را در VB 6 تست كردم و جواب داد. دقيقن نميدونم در صفحه اكسل چي كار كرد چون از ماكرو اكسل اطلاعي ندارم ولي در مورد اين برنامه شما مي‌توانيد به كمك خود VB6 فايل EXE همين برنامه را ايجاد كنيد. حالا آيا ميشه در خود اكسل كد VB يا VBScript اجرا كرد اين را ديگه نمي‌دانم!

موفق باشيد.
67.gif


خداحافظ
IgImAx
90/10/22
26.gif
103.gif
 

miladali

Registered User
تاریخ عضویت
5 ژانویه 2006
نوشته‌ها
735
لایک‌ها
722
. براي سيستمت پسورد گذاشتي و حالا يادت رفته!؟ خوب كاري نداره به دفترچه مادربوردت مراجعه كن (نداري از اينترنت دنلود كن) بعد جامپر ريست كردن بايوس را روس مادربورد از توي دفترچه پيدا كن (تو اون صفحه كه نقشه يا عكس مادربورد كشيده، جامپر ريست رو مشخص كرده) بعد در كيس رو باز كن و تمامي كابل‌هاي برق كامپيوتر را از پريز خارج كن و بايوس را به كمك اون جامپر ريست كن.

نه سیستم دانشگاهه مال خودم نیست:دی

حالا آيا ميشه در خود اكسل كد VB يا VBScript اجرا كرد اين را ديگه نمي‌دانم!

برای رفتن به محبط VB باید Alt+F11 رو تو اکسل زد.
 

dany_3p4u

Registered User
تاریخ عضویت
9 آپریل 2009
نوشته‌ها
112
لایک‌ها
7
سلام
چطور می شه با این برنامه وقتی CPU سیستم بالای 50% می ره ما رو خبر کنه؟
در واقع ما داریم کار خودمون رو انجام می دیم و به هر دلیل یک دفعه CPU فعالیتش زیاد می شه، جدا از صدای فن چطور این برنامه می تونه ما رو آگاه کنه؟
+++
چطور می شه یک دیالوگ باکس اطلاع رسانی ایجاد کرد که خودش مثلا بعد از یک تایم مشخص بسته شه؟
منظورم اینه که مثله دیالوگ باکسی که گزینه بله و خیر داره و اگه جواب ندیم خودش پنجره رو بعد از زمان مشخصی می بنده
+++
چطور می شه زبان سیستم نوشتاری رو تشخیص داد؟ (ایمکه اگه الآن متنی با روبو تسک نوشته شه انگلیسی نوشته می شه یا فارسی)
+++
چطور می شه زبان ویندوز رو عوض کنم؟ (همون ALt+Shift)
(از کلید های ترکیبی که می رم دوتا کلید فوق را قبول نمی کنه و باید کلید دیگه ای هم بزنم که خواسته من نیس!، بصورت دستی هم خودم تایپ کردم اما جواب نمی ده)
+++
چطور می شه چک کرد یک درایو توی سیسنم وجود داره یا نه؟! (مثلا فلش به سیستم وصل شده یانه)
+++

+++
فایل های مثال هایی که آپ کردین لینکشون کار نمی کنه
ممنون
 
Last edited:

igimax

کاربر فعال کامپیوتر
تاریخ عضویت
17 سپتامبر 2004
نوشته‌ها
3,410
لایک‌ها
1,348
سن
49
سلام dany_3p4u جان
1.gif


. ببخشيد اگر خيلي دير جواب مي‌دهم! در امضايم دليلش را نوشته‌ام.
چطور می شه با این برنامه وقتی CPU سیستم بالای 50% می ره ما رو خبر کنه؟
در واقع ما داریم کار خودمون رو انجام می دیم و به هر دلیل یک دفعه CPU فعالیتش زیاد می شه، جدا از صدای فن چطور این برنامه می تونه ما رو آگاه کنه؟
+++
چطور می شه زبان سیستم نوشتاری رو تشخیص داد؟ (ایمکه اگه الآن متنی با روبو تسک نوشته شه انگلیسی نوشته می شه یا فارسی)
+++
چطور می شه زبان ویندوز رو عوض کنم؟ (همون ALt+Shift)
(از کلید های ترکیبی که می رم دوتا کلید فوق را قبول نمی کنه و باید کلید دیگه ای هم بزنم که خواسته من نیس!، بصورت دستی هم خودم تایپ کردم اما جواب نمی ده)
. وقتي به دنبال توانايي‌هاي خارج توابع موجود در Robotask هستيد بايد دست به دامن VBS شويم! ;) و هيچي بهتر از توابع API نيست! كافيه كاري را كه قصد انجامش را داريد در گوگل بنويسيد و در ادامه بنويسيد Visual basic (بدون ذكر ‎.Net)

. براي مشكل CPU Usage من گشتم واين تابع API را يافتم:

کد:
Private Declare Function GetSystemTimes Lib "kernel32.dll" (ByRef idleTime As Currency, ByRef _
    kernelTime As Currency, ByRef userTime As Currency) As Boolean

. يك مثال ساده VB6 آن در اين لينك موجود است: http://www.vbcodesource.com/vbExamples.php به قسمت CPU Usage using GetSystemTimes API درون جدول برويد. (اگر در تبديل كد فوق به VBS مشكلي داشتيد بفرماييد تا برايتان كد تبديل شده‌اش را قرار دهم)

. در مورد تشخيص يا تغيير Keyboard Layout اين پروژه‌اي هست كه يك سال گذشته هر از چند گاهي روش كار كرده‌ام. البته نه در RoboTask بلكه در VB.Net 2008 ، مي‌خواهم برنامه‌اي بنويسم كه زماني كه در هر پنجره‌اي شروع به تايپ كردن نموديم، 2 يا 3 بار نوع زبان فعال در آن پنجره را اعلام كند تا مانع اشتباه تايپي شود! همه توابع مورد نيازم را يافته‌ام ولي hock كردن به يك پنجره و تشخيص نوع KL آن با مشكل مواجه مي‌شود!؟ در پنجره خود برنامه همه چيز درسته اما پس از Hock كردن به پنجره‌اي متفاوت، مشكل پيدا مي‌كنم! بگذريم!

. بهترين برنامه ساده براي سويچ كردن بين زبان‌هاي فعال درون ويندوز كد زير است كه توسط Kirill V. Rodionov نوشته شده است در اين آدرس http://allapi.mentalis.org/apilist/FC9A0C9925093EB7C2DE5C600A38F0C9.html اين هم خود كد براي راحتي و ذخيره در تاپيك:

کد:
[FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2][COLOR=#008000]'This example was created by Kirill V. Rodionov[/COLOR]
[COLOR=#008000]'This program needs a Command Button, named Command1[/COLOR]

[COLOR=#000080]Private[/COLOR] [COLOR=#000080]Const[/COLOR] KL_NAMELENGTH [COLOR=#000080]As[/COLOR] [COLOR=#000080]Long[/COLOR] = 9
[COLOR=#000080]Private[/COLOR] [COLOR=#000080]Const[/COLOR] HKL_NEXT [COLOR=#000080]As[/COLOR] [COLOR=#000080]Long[/COLOR] = 1
[COLOR=#000080]Private[/COLOR] [COLOR=#000080]Const[/COLOR] HKL_PREV [COLOR=#000080]As[/COLOR] [COLOR=#000080]Long[/COLOR] = 0

[COLOR=#000080]Private[/COLOR] [COLOR=#000080]Declare[/COLOR] [COLOR=#000080]Function[/COLOR] ActivateKeyboardLayout [COLOR=#000080]Lib[/COLOR] [COLOR=#808080]"user32"[/COLOR] ( _
    [COLOR=#000080]ByVal[/COLOR] HKL [COLOR=#000080]As[/COLOR] [COLOR=#000080]Long[/COLOR], _
    [COLOR=#000080]ByVal[/COLOR] Flags [COLOR=#000080]As[/COLOR] [COLOR=#000080]Long[/COLOR]) [COLOR=#000080]As[/COLOR] [COLOR=#000080]Long[/COLOR]
    
[COLOR=#000080]Private[/COLOR] [COLOR=#000080]Declare[/COLOR] [COLOR=#000080]Function[/COLOR] GetKeyboardLayout [COLOR=#000080]Lib[/COLOR] [COLOR=#808080]"user32"[/COLOR] ( _
    [COLOR=#000080]ByVal[/COLOR] dwLayout [COLOR=#000080]As[/COLOR] [COLOR=#000080]Long[/COLOR]) [COLOR=#000080]As[/COLOR] [COLOR=#000080]Long[/COLOR]
    
[COLOR=#000080]Private[/COLOR] [COLOR=#000080]Declare[/COLOR] [COLOR=#000080]Function[/COLOR] GetKeyboardLayoutName [COLOR=#000080]Lib[/COLOR] [COLOR=#808080]"user32"[/COLOR] [COLOR=#000080]Alias[/COLOR] [COLOR=#808080]"GetKeyboardLayoutNameA"[/COLOR] ( _
    [COLOR=#000080]ByVal[/COLOR] pwszKLID [COLOR=#000080]As[/COLOR] [COLOR=#000080]String[/COLOR]) [COLOR=#000080]As[/COLOR] [COLOR=#000080]Long[/COLOR]

[COLOR=#000080]Private[/COLOR] [COLOR=#000080]Sub[/COLOR] Command1_Click()
[COLOR=#000080]Dim[/COLOR] lngCurrent_HKL [COLOR=#000080]As[/COLOR] [COLOR=#000080]Long[/COLOR]
[COLOR=#000080]Dim[/COLOR] strCurrent_Buffer [COLOR=#000080]As[/COLOR] [COLOR=#000080]String[/COLOR]
[COLOR=#000080]Dim[/COLOR] lngSwitched_HKL [COLOR=#000080]As[/COLOR] [COLOR=#000080]Long[/COLOR]
[COLOR=#000080]Dim[/COLOR] strSwitched_Buffer [COLOR=#000080]As[/COLOR] [COLOR=#000080]String[/COLOR]

[COLOR=#008000]'Retrieves current handle to the keyboard layout[/COLOR]
   lngCurrent_HKL = GetKeyboardLayout(0)
   
[COLOR=#008000]'creates a buffers[/COLOR]
   strCurrent_Buffer = [COLOR=#000080]String[/COLOR](KL_NAMELENGTH - 1, 0)
   strSwitched_Buffer = [COLOR=#000080]String[/COLOR](KL_NAMELENGTH - 1, 0)
   
[COLOR=#008000]'Retrieves current name of the active keyboard layout[/COLOR]
   GetKeyboardLayoutName strCurrent_Buffer
   
[COLOR=#008000]'Switches to the next keyboard layout[/COLOR]
   ActivateKeyboardLayout HKL_NEXT, 0
   
[COLOR=#008000]'Retrieves "switched" handle to the keyboard layout[/COLOR]
   lngSwitched_HKL = GetKeyboardLayout(0)
   
[COLOR=#008000]'Retrieves "switched" name of the active keyboard layout[/COLOR]
   GetKeyboardLayoutName strSwitched_Buffer
   MsgBox [COLOR=#808080]"Keyboard layout was switched"[/COLOR] & vbCrLf & [COLOR=#808080]"from "[/COLOR] & strCurrent_Buffer _
      & [COLOR=#808080]" to "[/COLOR] & strSwitched_Buffer
      
[COLOR=#008000]'Returns to the initial keyboard layout[/COLOR]
   ActivateKeyboardLayout lngCurrentHKL, 0
[COLOR=#000080]End[/COLOR] [COLOR=#000080]Sub[/COLOR][/SIZE][/FONT][/SIZE][/FONT]

. شما در VBS به جاي Command1_Click از تابع Main استفاده كنيد! به كمك همين روش و توابع هم مي‌شود نوع KL فعال را بدست آورد. خود كد به همراه توضيحات عاليي است. اين هم يك نمونه مثال خوب ديگه: http://vbnet.mvps.org/code/locale/getkeyboardlayout.htm





چطور می شه یک دیالوگ باکس اطلاع رسانی ایجاد کرد که خودش مثلا بعد از یک تایم مشخص بسته شه؟
منظورم اینه که مثله دیالوگ باکسی که گزینه بله و خیر داره و اگه جواب ندیم خودش پنجره رو بعد از زمان مشخصی می بنده
. من اين پيشنهاد را خيلي وقت پيش در تاپيكي در فورم robotask مطرح نمودم اما پاسخي داده نشد! لطفن شما هم به آنجا برويد و بعد از جستجوي نام من (همين igimax) تقاضاي خود را در آن تاپيك تكرار نماييد. اين خيلي دستور مفيدي است كه در چندتا از برنامه‌هاي ديگه يا به شكل MessageBox يا به شكل System tray Notification وجود دارد. اما در Robotask اضافه نشده!!؟ من مجبور شدم از Question Dialog استفاده كنم كه Timer داره ولي بديش اينه كه كل اجراي تاسك‌ها را متوقف مي‌كنه ولي Notification ها (چه به شكل Window و چه به شكل Popup) به شكل خبر رساني هستند و وقفه‌اي در اجراي برنامه‌ها ايجاد نمي‌كنند. (مثلن Autoit داراي چنين توانايي است)





چطور می شه چک کرد یک درایو توی سیسنم وجود داره یا نه؟! (مثلا فلش به سیستم وصل شده یانه)
. يك راه، استفاده از System Variables\{FolderExists(L:\)}‎ است. به جاي L:\‎ حرفي كه به USB شما نسبت داده مي‌شود را بنويسيد. راه‌هاي ساده ديگه‌اي هم بايد باشه ولي اگر به شكل به خصوص، شناسايي يك نوع خاص از USB ها مد نظرتون است (مثلن USB Stick Sony تان يا ...) بايد باز از توابع API و نام مدل USB كه به ويندوز اتچ شده استفاده كنيد.





فایل های مثال هایی که آپ کردین لینکشون کار نمی کنه
. ببخشيد اگر دير درستشون كردم! ولي چند روز پيش موقعيتي پيش آمد و به يك اينترنت پر سرعت دسترسي يافتم و همه را دوباره آپ كردم. لطفن اگر باز هم لينك خرابي ديديد بهم اطلاع دهيد. خيلي ممنون.


موفق باشيد.
67.gif


خداحافظ
IgImAx
91/10/10
26.gif
103.gif
 
Last edited:

vivasaeid

کاربر تازه وارد
تاریخ عضویت
16 آگوست 2013
نوشته‌ها
1
لایک‌ها
0
سلام ،
واقعاً خسته نباشید بابت این آموزش که خیلی کمکم کرد والبته یه مشکل هم دارم که اگه حل بشه بیشتر هم کمک میکنه.
من از آموزشهایی که دادید سعی کردم نهایت استفاده رو ببرم ولی در بعضی موارد برای آشنایی کار از ماکرو ریکورد در تسک پنل استفاده میکنم.مشکل اصلی اینه میخوام نشانگر موش به یه مختصات خاص در محیط اون برنامه که توسط روبوتسک اجرا شده بره مثلاً محلی که نام کاربری و رمز عبورو تایپ میکنی،با استفاده از ماکرو ریکورد فهمیدم از یه تسک با نام((Move to Object)) که در اون مختصاتی داده شده میشه استفاده کرد ،ولی این تسک همیشه اون مختصات در نظر گرفته شده را اعمال نمیکنه((البته بگم که مکان پنجره برنامه مورد نظرو جابجا نکردماااا همونجای قبلیشه))،میخوام بدونم میشه برنامه ای نوشت که به موش یه مختصات در محیط برنامه باز شده داد تا همیشه به همون محل مورد نظر حرکت کنه((حتی در صورت جابجا شدن پنجره برنامه))؟؟
البته من این آموزشو تا شماره 6 دنبال کردم،اگه این مورد توی آموزشهای بعدی توضیح داده شده لطفاً بگید تا بخونمش.
با تشکر
سعید
 

Cyberlife

Registered User
تاریخ عضویت
28 مارس 2009
نوشته‌ها
1,513
لایک‌ها
624
محل سکونت
MACS0647-JD
امید جان سلام

من یک فایل Excel دارم که میخوام از طریق نرم افزار RoboTask، در هر بار اعداد موجود در خانه های ستون مورد نظرم ( مثلاً ستون کد رهگیری)

را کپی و در نرم افزار حسابداری خودم در قسمت مورد نظر جایگذاری کنم و کلید Enter فشرده شه، اگر خطا داد کلید Ok پنجره خطا زده شه و

سطری که خانه مورد نظر در اون قرار داره پاک بشه و سراغ دومین خانه از ستون Excel بره و اون رو کپی کنه و توی فیلد کد رهگیری در نرم افزار

قرار بده و کلید Enter فشرده بشه، اگر مثل مرحله قبل خطا داد که باز باید سطر خانه مورد نظر پاک بشه و محتویات خانه بعدی در اکسل رو کپی

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

دکمه رادیویی در همان پنجره که برای همه کدهای رهگیری، ثابته تیک زده بشه، بعد در همان پنجره یک فیلد تاریخ داریم که باید با یک تاریخ شمسی

مشخص با قابلیت تغییر بر اساس زمان پر بشه و همچنین دو تا فیلد زمان شروع و زمان پایان داریم که رنج اونها متغیره و بعد از وارد شدن اونها باید

دکمه ذخیره فشرده بشه، بعد از زدن دکمه ذخیره یک پنجره دیگه باز میشه که در اون پنجره از یک لیست و زیر لیست اون باید یک گزینه رو به صورت

تصادفی انتخاب کنه و روی ذخیره کلیک کنه و بعد سراغ کد رهگیری بعدی بره که البته فکر کنم اگه گزینه های این قسمت به صورت دستی انتخاب

بشه بهتره، بعد باید به اکسل برگرده و سطر خانه ای که مشخصات اون با موفقیت وارد و ذخیره شد پاک بشه و کد رهگیری بعدی در نرم افزار کپی

بشه، رنج زمانی و تاریخ برای مثلاً هر 30 کد رهگیری که بدون خطا وارد نرم افزار شده متفاوته که در مثال زیر این موضوع رو میتونید ببینید.

مثال :

تاریخ : 1392/07/28

کد رهگیری 1 : زمان شروع : 8:00 زمان پایان : 8:15

کد رهگیری 2 : زمان شروع : 8:30 زمان پایان : 8:40
.
.
کد رهگیری 30 : زمان شروع : 6:30 زمان پایان : 6:45

-----------------------------------------------------------------------------------

تاریخ : 1392/07/29

کد رهگیری 31 : زمان شروع : 8:00 زمان پایان : 8:10

کد رهگیری 32 : زمان شروع : 8:25 زمان پایان : 8:40
.
.
کد رهگیری 60 : زمان شروع : 6:30 زمان پایان : 6:45

-----------------------------------------------------------------------------------

همانطور که میبنید زمان پایان کد رهگیری قبلی و زمان شروع کد رهگیری بعدی باید10 تا 15 دقیقه با هم اختلاف داشته باشن، همچنین میخوام تاریخ

بعد از واردن شدن اتوماتیک مثلاً 30 کد رهگیری و انجام عملیات مورد نظر و رسیدن به پایان زمان کاری اون روز ، تاریخ برای کدهای رهگیری 31 تا 60

یک روز جلوتر بره و همینطور زمان هم مثل روز قبل از 8 شروع و در 6:45 دقیقه خاتمه پیدا کند. نکته ای که در اینجا وجود داره اینه که زمان استراحت

2 تا 3 ساعته ظهر، که از 2 بعد از ظهر تا 4 یا 5 بعد از ظهر وجود داره هم باید در وارد شدن زمان کدهای رهگیری در نظر گرفته بشه. همچنین اگه زمانها

و اختلاف بین زمان پایان قبلی و زمان شروع فعلی ( در محدوده 10 تا 15 دقیقه ) به صورت رندوم پیاده بشن واقعاً عالی میشه، مثال :

تاریخ : 1392/07/28

کد رهگیری 1 : زمان شروع : 8:00 زمان پایان : 8:13

کد رهگیری 2 : زمان شروع : 8:27 زمان پایان : 8:39
.
.
کد رهگیری 30 : زمان شروع : 6:33 زمان پایان : 6:45

-----------------------------------------------------------------------------------

ممنون میشم اگه راهنماییم کنید، هزینه و کارمزد کار رو هم تقدیمتون میکنم. اگه دقیق متوجه نشدید بگید تا بیشتر توضیح بدم یا شکل بذارم.

با تشکر
 

sara_2656

Registered User
تاریخ عضویت
28 فوریه 2007
نوشته‌ها
193
لایک‌ها
2
کاش این بحث بیشتر ادامه پیدا می کرد واقعا لذت می ببرم از این نوع تاپیک ها از شروع کننده بخث می خوام بیشتر اموزش قرار بدن واقعا کاربردی هستش باتشکر
 
بالا