PDA

View Full Version : سوال: در اختیار گیری ماوس



SamaPic
دوشنبه 23 اردیبهشت 1392, 16:00 عصر
با سلام و عرض خسته نباشید خدمت دوستان گرامی .
بنده قصد دارم برنامه ای بنویسم تا به کمک آن کنترل ماوس ( یا همان مکان نما ) را در دست بگیرم.( مکان نمای سیستم خودم نه در شبکه )
مثلا با دادن دو مختصات x و y ، مکان نما را با آن نقطه ببرم .
نوشتن این برنامه با جاوا بهتر است یا با سی شارپ .
می خواهم بصورت مخفی در بک گراند ( در try ) اجرا شود .
در صورت امکان راهنمایی نمایید .
با تشکر فراوان .

مهرداد صفا
دوشنبه 23 اردیبهشت 1392, 16:28 عصر
با سلام.
برای تنظیم محل قرار گرفتن کرسر موس میتوانید از تابع SetCursorPos استفاده کنید. برای نمایش داده نشدن فرم اصلی و اجرا در پس زمینه فرمان Application.Run(new form1) را از روال main پاک کنید و به جای آن می توانید از یک حلقه طولانی برای کارتان استفاده کنید. مثال:

//in the name of god
//صل الله عله محمد و آله

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
static class Program
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int SetCursorPos(int x, int y);
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
while (true )
{
System.Threading.Thread.Sleep(1000);
SetCursorPos(100, 100);
System.Media.SystemSounds.Beep.Play();
System.Threading.Thread.Sleep(1000);
SetCursorPos(Screen.PrimaryScreen.Bounds.Width - 100, 100);
System.Media.SystemSounds.Beep.Play();
}
}
}
}


متود main در کلاس Program در Program.cs تعریف شده.

SamaPic
دوشنبه 23 اردیبهشت 1392, 20:31 عصر
با سلام و تشکر به خاطر کمک فراوانتان
در حقیقت بنده می خواهم برنامه ای بنویسم تا یک برنامه دیگر را به راحتی نصب کند .
چون نصب آن برنامه بسیار سخت است ، باید بگونه ای کار کنم تا تمامی فیلد ها را پر کنم .
یعنی بعد از رسیدن به این یک ( و یا چندین ) textbox ، روی آن کلیک شده و متنی در داخل آن نوشته شود .
پس از این کار روی Next کلیک شود و الا آخر .
چنین کاری می شود؟
البته Next یا Ctrl+tab است .

mehrdad1991h
دوشنبه 23 اردیبهشت 1392, 20:35 عصر
با سلام و تشکر به خاطر کمک فراوانتان
در حقیقت بنده می خواهم برنامه ای بنویسم تا یک برنامه دیگر را به راحتی نصب کند .
چون نصب آن برنامه بسیار سخت است ، باید بگونه ای کار کنم تا تمامی فیلد ها را پر کنم .
یعنی بعد از رسیدن به این یک ( و یا چندین ) textbox ، روی آن کلیک شده و متنی در داخل آن نوشته شود .
پس از این کار روی Next کلیک شود و الا آخر .
چنین کاری می شود؟
البته Next یا Ctrl+tab است .
این کار با روندی که پیش گرفتید سودی ندارد
چون برنامه ممکنه در هر جایی قرار بگیره و با تغییر مکان برنامه کل عملیات شما به هم میریزه !
اگر همیشه مکانش ثابته خوب این چه کاریه میکنی از ماکرو استفاده کن ساده ترین و بهترین راه هست و نیازی به کد نویسی هم نداری دیگه.....

SamaPic
دوشنبه 23 اردیبهشت 1392, 20:49 عصر
با سلام مجدد .
نه بنده در برخی موارد باید با تشخیص مکان یک متن رو وارد کنم ( به وسیله همین برنامه ) . و در برخی موارد کسی که در حال نصب است یک مطلب رو وارد کنه در یک مکان بخصوص .
چون باید برخی موارد خاص از ویندوز سوال شود ، مانند نوع سیستم عامل و ... بهتر است که برنامه نویسی باشه تا فرایند درست کار کند .
مکان ها همگی ثابت هستند . ولی خوب ممکنه تغییر کند .
چند حالت بیشتر ندارد. می توانم برای تمامی حالات شرایطش را ذخیره کنم .
از آن نظر مشکلی ندارم .
البته باید اقرار کنم که در مورد ماکرو چیز زیادی هم نمی دانم .
که امیدوارم شما یا سایر دوستان اگر فکر می کنید به کار بنده می آید توضیحاتی بدهید .
باتشکر فراوان.

mehrdad1991h
دوشنبه 23 اردیبهشت 1392, 21:43 عصر
ماکرو ...
مثال میزنم
مثلا من میخوام 10000 بار یک صفحه یا فلدر های یک درایو یا ... را باز کنم و یه تمام محتوای داخلش را انتخاب کنم بعد در یه مکان دیگه ای ذخیره کنم
خوب با ماکرو میام این کار را یک بار انجام میدهم و با ماکرو ان را ظبط میکن (ماکرو تمام فرایند و کارهای موس و کیبورد را زیر نظر میگیره) و بعد از اینکه یک بار انجام دادم ماکروی ایجاد شده را مثلا 1000 بار اجرا میکنم یا مثلا هر 10 ثانیه اجرا میکنه یا هر جوری بخوام اجراش میکنم دیگه مثلا میگم به مدت 24 ساعت هر 1 ساعت 2 بار این را اجرا کنه و.....
اینجوری همون کاری که من میخواستم اینقدر انجام بدم خودکار خودش انجام میده

امیدوارم با مثال من فهمیدی باشید ماکرو چیه و چی کار میکنه مثال ساده ای بود فقط برا اینکه توضیح کلی داده باشم چیز پیچیده ای نیست...

SamaPic
دوشنبه 23 اردیبهشت 1392, 23:06 عصر
با سلام.
آیا بنده می تونم بهش بگم که با توجه به نوع سیستم عامل ( XP ، 7 ، 8 و یا شاید هم Vista ) یک جور عمل کنه . مثلا اگر 7 بود ، برود و فایل ها را در درایو D کپی کنه ؟
نگاه کنید بنده یک نرم افزار دارم که باید این رو ، روی سیستم های افرادی نصب کنم که شاید از کامپیوتر در حد روشن کردن اون بلد هستند. البته فرآیند نصبش هم سخت است.
کل فرآیند نصب 10 دقیقه هست.
ابتدا فکر کردم منظور شما از ماکرو ، ماکرو مدیا است که یادم آمد که دیگه الان کسی بهش نمی گوید ماکرو مدیا.(به خاطر این بود که نوشتم چیز زیادی نمی دونم )
این مواردی رو که شما گفتید رو چگونه باید اجرا کرد یا بهتر بگویم چگونه می شود درست کرد ؟
چه جیزی را باید فرا بگیرم؟

مهرداد صفا
دوشنبه 23 اردیبهشت 1392, 23:31 عصر
با سلام و تشکر به خاطر کمک فراوانتان
در حقیقت بنده می خواهم برنامه ای بنویسم تا یک برنامه دیگر را به راحتی نصب کند .
چون نصب آن برنامه بسیار سخت است ، باید بگونه ای کار کنم تا تمامی فیلد ها را پر کنم .
یعنی بعد از رسیدن به این یک ( و یا چندین ) textbox ، روی آن کلیک شده و متنی در داخل آن نوشته شود .
پس از این کار روی Next کلیک شود و الا آخر .
چنین کاری می شود؟
البته Next یا Ctrl+tab است .

سلام خواهش می کنم.
بله چنین کاری شدنی است ولی این روش، روش منطقی و درستی برای انجام این کار نیست.
شما برای رسیدن به مقصود دو راه کلی (از نظر من) در پیش دارید؛ اول اینکه از توابع USER32 برای دسترسی به پنجره ها و کنترلها و پنجره های child استفاده کنید و برای تغییر در آنها از ارسال و دریافت پیغام استفاده کنید.

راه دوم که ساختار مناسبتری دارد و از برنامه نویسی شی گرا هم پشتیبانی می کند، دسترسی به عناصر و ELEMENT های USER INTERFACE با استفاده از رابطهای UIAutomation است.
دو راهی که گفتم با همه پیچیدگیهایی که ممکن است داشته باشند از کنترل خودکار موس و کیبورد ساده تر و منطقیتر هستند ولی هر دو این موارد در صورتی ممکن است که پنجره هایی که شما با آنها سر و کار دارید، از پنجره های استاندارد ویندوز و یا مشتقات آنها باشند و یا حداقل IAccessible interface را در ساختار کنترل پیاده سازی کرده باشند. در غیر این صورت (مثلا برخورد با پنجره هایی که با framework مربوط به java نوشته شده اند که البته خیلی کم اتفاق می افتد) همان استفاده از موس و کیبورد ساده تر به نظر می رسد.

مهرداد صفا
سه شنبه 24 اردیبهشت 1392, 00:00 صبح
البته یک روش هم که فراموش کردم، استفاده از MICROSOFT ACTIVE ACCESSIBILITY است که البته استفاده از MSAA در حالت CLIENT نیاز به برنامه نویسی UNMANAGED دارد.

SamaPic
سه شنبه 24 اردیبهشت 1392, 09:25 صبح
با سلام و تشکر فراوان .
می شود یک رفرنس یا منبع فارسی و یا انگلیسی برای بنده معرفی نمایید ؟
با تشکر فراوان.

aradrobo
شنبه 28 اردیبهشت 1392, 16:47 عصر
با سلام.
برای تنظیم محل قرار گرفتن کرسر موس میتوانید از تابع SetCursorPos استفاده کنید. برای نمایش داده نشدن فرم اصلی و اجرا در پس زمینه فرمان Application.Run(new form1) را از روال main پاک کنید و به جای آن می توانید از یک حلقه طولانی برای کارتان استفاده کنید. مثال:

//in the name of god
//صل الله عله محمد و آله

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
static class Program
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int SetCursorPos(int x, int y);
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
while (true )
{
System.Threading.Thread.Sleep(1000);
SetCursorPos(100, 100);
System.Media.SystemSounds.Beep.Play();
System.Threading.Thread.Sleep(1000);
SetCursorPos(Screen.PrimaryScreen.Bounds.Width - 100, 100);
System.Media.SystemSounds.Beep.Play();
}
}
}
}


متود main در کلاس Program در Program.cs تعریف شده.

موقع اجرا در خط توقف می کند :
SetCursorPos(100, 100);

مهرداد صفا
سه شنبه 31 اردیبهشت 1392, 12:43 عصر
با سلام و تشکر فراوان .
می شود یک رفرنس یا منبع فارسی و یا انگلیسی برای بنده معرفی نمایید ؟
با تشکر فراوان.

سلام. خواهش می کنم.

به نظر من کاملترین مرجع در این زمینه msdn است و متاسفانه مرجعی به طور کامل (چه فارسی و چه انگلیسی) به غیر از msdn سراغ ندارم، مگر برای توابع user32 به صورت پراکنده.
اما مراجع در msdn:
Windows Automation API (Windows)
msdn....\windows...\user interface|ui...\accessibility... (http://msdn.microsoft.com/en-us/library/ff486375%28v=vs.85%29.aspx)

UIAutomation client programmers guide :
msdn...\windows...\user interface|ui...\accessibility \UIAutomation\UIAutomation client programmers guide (http://msdn.microsoft.com/en-us/library/ee684021%28v=vs.85%29.aspx)

microsoft active accessibility client function reference:
msdn...\windows...\user interface...\accessibility \microsoft active accessibility\c/c++ reference\active accessibility user interface reference \client functions
(http://msdn.microsoft.com/en-us/library/dd742692%28v=vs.85%29.aspx)

window reference(windows):
msdn..\windows...\developers guide...\windows api...\reference...\functions by category...\window (http://msdn.microsoft.com/en-us/library/windows/desktop/ff468925%28v=vs.85%29.aspx)
UI Automation Clients for Managed Code:
(http://msdn.microsoft.com/en-us/library/ms753326.aspx)

مهرداد صفا
سه شنبه 31 اردیبهشت 1392, 12:52 عصر
موقع اجرا در خط توقف می کند :
SetCursorPos(100, 100);

لطفا متن خطا و کد را قرار دهید.

roohial
سه شنبه 19 شهریور 1392, 20:06 عصر
این کار با روندی که پیش گرفتید سودی ندارد
چون برنامه ممکنه در هر جایی قرار بگیره و با تغییر مکان برنامه کل عملیات شما به هم میریزه !
اگر همیشه مکانش ثابته خوب این چه کاریه میکنی از ماکرو استفاده کن ساده ترین و بهترین راه هست و نیازی به کد نویسی هم نداری دیگه.....

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