PDA

View Full Version : سوال: کلیک ماوس روی صفحه بدون دخالت کاربر(بصورت اتوماتیک)



bahar_engineer
چهارشنبه 30 اردیبهشت 1388, 12:40 عصر
سلام

می خوام برنامه ای بنویسم که ماوس روی یه نقطه از دسکتاپ بطور اتوماتیک کلیک کنه ... البته رو خود دسکتاپ نه ! توی این برنامه یه صفحه اینترنتی باز می شه و می خوام روی یه کلید از اون صفحه به طور اتوماتیک کلیک کنه بدون دخالت کاربر...

باید موقعیت ماوس رو تنظیم کنم روی اون نقطه ثابت و ... کلیک

اما چطور می تونه اتوماتیک کلیک کنه؟؟؟ آیا باید مثل اسمبلی با پورت مربوط به ماوس کار کنم؟؟
چطوری ؟

تمام ایده های شما می تونه کمک کنه... ممنون

hamid411
چهارشنبه 30 اردیبهشت 1388, 19:38 عصر
دوست تازه کار من
اولین کاری که برای یه همچین کاری باید بکنی اینه که از خود مایکروسافت کمک بگیری:چشمک::

http://msdn2.microsoft.com/en-us/library/ms171548.aspx
http://msdn2.microsoft.com/en-us/library/ms171548(VS.80).aspx

بعد اگه جواب نداد تو گوگل سرچ کنی و بعد اگع نداد :عصبانی++:بیای بپرسی
حالا اینو نگاه کن برای تعیین موقعیت ماوس دو کار می تونی انجام بدی:

Cursor.Position = new Point(Cursor.Position.X + 10, Cursor.Position.Y + 10);


یا اینکه بیای و این کار رو بکنی :




private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002;
private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004;
[DllImport("user32.dll")]
private static extern void mouse_event(UInt32 dwFlags, UInt32 dx, UInt32 dy, UInt32 dwData, IntPtr dwExtraInfo);

..
..

public static void SendClick(Point location)
{
Cursor.Position = location;
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, new IntPtr());
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, new IntPtr());
}

و یا اصلا بیای و با وقفه بنویسی :

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

public class Form1 : Form
{
[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);

private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;

public Form1()
{
}

public void DoMouseClick()
{
//Call the imported function with the cursor's current position
int X = Cursor.Position.X;
int Y = Cursor.Position.Y;
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}

//...other code needed for the application
}

حل شد دوست عزیز ؟

saeed-kh
پنج شنبه 31 اردیبهشت 1388, 00:43 صبح
سلام
بهتره از توابع APIاستفاده كني..چندتا نمونه
http://barnamenevis.org/forum/showthread.php?t=148965

http://pinvoke.net/index.aspx

http://barnamenevis.org/forum/showthread.php?t=148962

bahar_engineer
پنج شنبه 31 اردیبهشت 1388, 11:21 صبح
ok چرا می زنی؟؟!!!

خودم دیروز پیدا کردم ... دیگه اعلام نکردم آخه کارم فوری بود ... گفتم تا من دارم سرچ می کنم کسی اگه نظری داره بگه ...

در ضمن من تازه کار نیستم!:متفکر:


به هر حال ممنون

hamid411
شنبه 02 خرداد 1388, 10:01 صبح
معذرت می خوام اگه بد گفتم، منظور بدی نداشتم

skflower
دوشنبه 24 اسفند 1388, 17:00 عصر
ok چرا می زنی؟؟!!!

خودم دیروز پیدا کردم ... دیگه اعلام نکردم آخه کارم فوری بود ... گفتم تا من دارم سرچ می کنم کسی اگه نظری داره بگه ...

در ضمن من تازه کار نیستم!:متفکر:


به هر حال ممنون

خوب حالا که کار فوریتون حل شده لطف کنید و بذارید تا ما و بقیه هم فیض ببریم :کف:

SMRAH1
دوشنبه 24 اسفند 1388, 21:36 عصر
سلام
اینها رو توی کلاست بنویس :


public const uint WM_LBUTTONDOWN = 0x0201;
public const uint WM_LBUTTONUP = 0x0202;

[DllImport("user32.dll")]
private static extern IntPtr WindowFromPoint(Point Point);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
private static extern long SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
[DllImport("user32.dll")]
public static extern bool ScreenToClient(IntPtr hwnd, ref Point point);

private static int MakeLParam(int LoWord, int HiWord)
{
return ((HiWord << 16) | (LoWord & 0xffff));
}

public static void LeftMouseClick(IntPtr hWnd, int x, int y)
{
int lParam = MakeLParam(x, y);

SendMessage(hWnd, WM_LBUTTONDOWN, 0, lParam);
Thread.Sleep(100);
SendMessage(hWnd, WM_LBUTTONUP, 0, lParam);
}و برای استفاده با توجه به مختصات نقطه مورد نظر بر روی صفحه (که در متغیر فرضی pt از نوع Point ذخیره شده است) داریم:


IntPtr hWnd = GetWindowsFromPoint(pt);
ScreenToClient(hWnd, ref pt);
MouseMove(hWnd, pt.X,pt.Y);موفق باشید