PDA

View Full Version : موس مجازي



dj_dj_dj
جمعه 25 مهر 1393, 23:34 عصر
سلام دوستان
شايد بحث تكراري باشه و دوباره تاپيك باز كرده باشه
من ميخوام يه برنامه بنويسم به صورت يه موس مجازي كلا جدا از موس فيزيكي باشه كرسر هم نداشته باشه مشكلي نيست فقط ميخوام مثلا بره به موقعيت (x,y) و بعد كليك كنه به صورت مجازي ميخوام جدا از موس اصلي
توابعش رو قبلا پيدا كرده بودم

SetCursorPos ( x,y );
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

با تابع اول ميره به مختصات مورد نظر و با تابع دوم كليك ميكنه ولي ميبينين اين با موس اصلي كار ميكنه يعني تابع اول اجرا نكنيم تابع دوم اجرا كنيم موقع اجراي برنامه موس هرجا باشه اونجا كليك ميكنه
يكي از دوستان گفت از تابع sendinput استفاده كن ولي اونم باز همون آشه همون كاسه

void LeftClick ( )
{
INPUT Input={0};
// left down
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
::SendInput(1,&Input,sizeof(INPUT));

// left up
::ZeroMemory(&Input,sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
::SendInput(1,&Input,sizeof(INPUT));
}

اين تابع كليك كردن. اصل كاري رفتن به مختصات مورد نظره

void MouseMove (int x, int y )
{
double fScreenWidth = ::GetSystemMetrics( SM_CXSCREEN )-1;
double fScreenHeight = ::GetSystemMetrics( SM_CYSCREEN )-1;
double fx = x*(65535.0f/fScreenWidth);
double fy = y*(65535.0f/fScreenHeight);
INPUT Input={0};
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE;
Input.mi.dx = fx;
Input.mi.dy = fy;
::SendInput(1,&Input,sizeof(INPUT));
}

ولي توو اينم باز اشاره گر اصلي موس حركت ميكنه . من ميخوام بدون حركت كليك كنه هم اينكه بشه مثلا 20 تا موس مجازي تعريف كرد و همزمان از همشون بشه استفاده كرد . ممنون ميشم كسي راهنمايي كنه

rahnema1
شنبه 26 مهر 1393, 20:11 عصر
سلام،اینجا را ببینید:
http://jstookey.com/arcade/rawmouse
ماوسهای موجود را لیست می کنه که احتمالا بیش از یکی هست که یکی از اونها ماوس اصلی و بقیه فکر کنم مجازی باشه ماوس مجازی را توی sendinput استفاده کنید ببینید جواب میده یانه؟

dj_dj_dj
شنبه 03 آبان 1393, 15:46 عصر
من با استفاده از برنامه GlovePIE با وصل كردن يه موس ديگه به كامپيوتر دو تا كرسر موس ايجاد كردم كه مجزا از هم حركت و كليك ميكنن فقط موندم چطوري با استفاده از تابع sendinput كرسر دوم رو به كار بگيرم . خود برنامه لينكشو قرار دارم (حجمش از حجم تعيين شده زياده نشد آپلود كنم ) اينم لينك نحوه استفاده از برنامه هست

www.youtube.com/watch?v=077J02QuZ3s
اينم مشخصات ديوايس هاي من . ديوايس 0 مشخصات موس دومه كه وصل كردم

124936
برنامه :

http://www.4shared.com/zip/cgpu98vj/glovepie_029.html
ممنون ميشم كسي بتونه كمكم كنه در مورد پارامترهاي sendinput چيارو تغيير بدم