dj_dj_dj
شنبه 26 مهر 1393, 00: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 تا موس مجازي تعريف كرد و همزمان از همشون بشه استفاده كرد . ممنون ميشم كسي راهنمايي كنه
شايد بحث تكراري باشه و دوباره تاپيك باز كرده باشه
من ميخوام يه برنامه بنويسم به صورت يه موس مجازي كلا جدا از موس فيزيكي باشه كرسر هم نداشته باشه مشكلي نيست فقط ميخوام مثلا بره به موقعيت (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 تا موس مجازي تعريف كرد و همزمان از همشون بشه استفاده كرد . ممنون ميشم كسي راهنمايي كنه