انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: کنترل کرسر موس در لینوکس به زبان c++ { حل شد }  (دفعات بازدید: 1266 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین eshahnazi

  • Jr. Member
  • *
  • ارسال: 72
سلام
برنامه ای نوشتم برای تشخیص حرکات مردمک چشم و رهگیری آن. (با استفاده از کتابخانه opencv و به زبان c++ در eclipse , linux).
هدفم این هست که از طریق حرکات مردمک چشم کرسر موس رو حرکت بدم.
همانطور که گفتم کار شناسایی و رهگیری مردمک به پایان رسیده فقط مونده قسمت دوم که باید حرکات مردمک رو بیارم روی کرسر موس که اینجاش رو نمیدونم باید چکار کنم.
مختصات x,y رو برنامه ای که نوشتم بهم میده فقط باید اینا رو بدم به کرسر.
اگر کسی نمونه کد به زبان c++ داشته باشه ممنوم میشم اینجا بزارید.
با تشکر
« آخرین ویرایش: 04 شهریور 1395، 05:51 ب‌ظ توسط eshahnazi »

آفلاین eshahnazi

  • Jr. Member
  • *
  • ارسال: 72
پاسخ : کنترل کرسر موس در لینوکس به زبان c++
« پاسخ #1 : 04 شهریور 1395، 05:39 ب‌ظ »

Download v1 of the RandomLinux.com Android app! Stay up to date on everything that's Linux right from your phone or tablet! Download below!
Xdotool – Mouse

August 21, 2014 Posted in  Around the Web No comments

Xdotool – Mouse

The xdotool is a utility used from the terminal or in a script to manually perform keyboard and mouse input (see the Xdotool – Keyboard article). The commands can also be used to make a script of many xdotool commands to create large tasks. Later articles will cover the xdotool ability to control window and desktop manipulation.

The syntax for xdotool depends on the command being used. Let’s start with sending mouse movements to a window by using the ‘mousemove’ command. The syntax is as follows:

mousemove [options] x y

There are five options available for mousemove which are:

· –window window_id – for mouse movement. The window you specify will be the one used as a relative point for movement
· –screen screen_number – specifies the screen number, screen 0 is your first monitor
· –polar – uses polar coordinates by specifying ‘x’ between 0-360 degrees and ‘y’ as the distance from the center. Based off the specified window by its id
· –clearmodifiers – clears all modifiers such as Shift, CTRL and such keyboard keys as well as a mouse button being pressed manually
· –sync – causes the mousemove command to be sent, but the cursor does not move until the mouse is physically moved. Once moved, the cursor will go to the position specified

NOTE: To find the window_id see the previous article: Xdotool – Keyboard.

If I had a text editor open which had the window id of 46137499 and I wished to move the mouse cursor to the upper left corner of the window I would perform the following command:

xdotool mousemove –window 46137499 0 0

If I wanted to move the cursor to the top left corner of the whole screen, I would do the following:

xdotool mousemove 0 0

NOTE: When no window is specified, the desktop is assumed as the window.

If I wished to use polar coordinates up is 0 or 360 degrees, right is 90, down is 180 and left is 270 degrees. The ‘y’ coordinate is the number of pixels from the center of the window. In the following example, the cursor will be placed 45 degrees and 300 pixels from the center of the desktop:

xdotool mousemove –polar 45 300

NOTE: The cursor is placed in the upper right part of the screen. Any pixel value greater than what would cause the cursor to be off the screen will only place the cursor at the edge of the screen.

There exists another mousemove command which restores the cursor back to where it was before you performed the previous mousemove:

mousemove [options] restore

The options are the same as the mousemove, except –window and –polar do not work. The restore command needs to be used in the same xdotool command as follows:

xdotool mousemove 1000 1000 mousemove restore

NOTE: Multiple commands can be chained together in xdotool command as shown. All the commands can be mixed such as keyboard, mouse, window and desktop commands.

The third mousemove command is:

mousemove_relative [options] x y

This command moves the cursor relative to its current position. The options are as follows:

· –polar – uses polar coordinates by specifying ‘x’ between 0-360 degrees and ‘y’ as the distance from the center, based off the specified window by its id
· –clearmodifiers – clears all modifiers such as Shift, CTRL and such keyboard keys as well as a mouse button being pressed manually
· –sync – causes the mousemove command to be sent, but the cursor does not move until the mouse is physically moved. Once moved, the cursor will go to the position specified

Here, we can move the cursor to the center of the screen and then use the relative command to move it down (180 degrees) and a distance of 50 pixels:

xdotool mousemove –polar 0 0 mousemove_relative –polar 180 50

Another mouse command is the ‘click’ command. Here, we can cause the cursor to perform a mouse click as if the user did physically click a button on the mouse. The syntax is:

click [options] button

The options are as follows:

· –window window_id – for mouse movement, the window you specify will be the one used as a relative point for movement
· –clearmodifiers – clears all modifiers such as Shift, CTRL and such keyboard keys as well as a mouse button being pressed manually
· –repeat – specifies the number of times to click. The default is one which is a single click, specify 2 for a double click
· –delay milliseconds – the number of milliseconds to delay between clicks. The option is only used when the repeat option is used with a value greater than 1

The buttons are numeric from left to right on the mouse or the opposite way if it is as left-handed mouse. For a right-handed mouse, button 1 is the far leftmost, the center button is button 2 if there is one, and the right button would either be 2 or 3 depending if a middle button existed.

NOTE: With some systems, button 4 can be for the middle button up and 5 for the middle button down.

For example, let us use a text editor with a window id of 46137499. We will move the cursor to the top left corner of the window and left click to select it (focus). The cursor is then moved down 10 pixels and right 100 pixels relative to the current position. At this point we will cause the wheel to scroll down 10 times:

xdotool mousemove –window 46137499 0 0 click 1 mousemove_relative 10 110 click –repeat 10 5

The following two commands are similar and work together. The commands are:

mousedown [options] button
mouseup [options] button

Here it is possible to perform drag-and-drop procedures on systems which support it. Place the cursor in a position. Use the mousedown command with the proper button, move the mouse again and use the mouseup command to drop what has been dragged.

For example, let us click on the text editor window and select it with the left mouse button. The mousedown command is used to be able to drag it. The mouse is moved to the desktop coordinates of 10 10. Now the mouseup command is given to drop the window.

xdotool mousemove –window 46137499 0 0 click 1; xdotool mousedown 1; xdotool mousemove 10 10; xdotool mouseup 1

NOTE: In this case, chaining the commands does not work and each command must be seprarate. Chained commands must be experimented with before using in a script.

The next command is the ‘getmouselocation’ which is shown in Figure 1. Here you can see the Terminal executing the ‘getmouselocation’ command while the mouse is on the text editor window. The output for get mouse location is: x:1170 y:19 screen:0 window:46137499.

NOTE: This is another way to get the window id.
xDoTool - Mouse Figure 1.jpg
FIGURE 1​

The getmouselocation has no input, but can accept the –shell option. The –shell option places the four location items in a column rather than a row. The items can be used in a shell script to provide information for variables to use in the scripts.

The next command is the ‘behave_screen_edge’. The syntax is as follows:

behave_screen_edge [options] WHERE COMMAND

This command allows you to specify an edge of a screen which will cause an action to be performed when the mouse hits the specified edge. The command seems to work best when the current window is maximized or touches the edge of the screen that is the “hot spot”.

The options are as follows:

· delay milliseconds – specifies the number of milliseconds which the cursor must be at the WHERE to trigger event
· quiesce milliseconds – delay before next trigger can occur (default 0)

The WHERE options are as follows:

· left
· top-left
· top
· top-right
· right
· bottom-left
· bottom
· bottom-right

A simple command is to execute the gedit text editor command when the cursor touches the left side of the screen:

xdotool behave_screen_edge –quiesce 750 left exec gedit

Try a few of these and my next article will cover the Window commands.

This entry passed through the Full-Text RSS service — if this is your content and you’re reading it on someone else’s site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.

Linux.org


Download v1 of the RandomLinux.com Android app! Stay up to date on everything that's Linux right from your phone or tablet! Download below!
Xdotool – Mouse

August 21, 2014 Posted in  Around the Web No comments

Xdotool – Mouse

The xdotool is a utility used from the terminal or in a script to manually perform keyboard and mouse input (see the Xdotool – Keyboard article). The commands can also be used to make a script of many xdotool commands to create large tasks. Later articles will cover the xdotool ability to control window and desktop manipulation.

The syntax for xdotool depends on the command being used. Let’s start with sending mouse movements to a window by using the ‘mousemove’ command. The syntax is as follows:

mousemove [options] x y

There are five options available for mousemove which are:

· –window window_id – for mouse movement. The window you specify will be the one used as a relative point for movement
· –screen screen_number – specifies the screen number, screen 0 is your first monitor
· –polar – uses polar coordinates by specifying ‘x’ between 0-360 degrees and ‘y’ as the distance from the center. Based off the specified window by its id
· –clearmodifiers – clears all modifiers such as Shift, CTRL and such keyboard keys as well as a mouse button being pressed manually
· –sync – causes the mousemove command to be sent, but the cursor does not move until the mouse is physically moved. Once moved, the cursor will go to the position specified

NOTE: To find the window_id see the previous article: Xdotool – Keyboard.

If I had a text editor open which had the window id of 46137499 and I wished to move the mouse cursor to the upper left corner of the window I would perform the following command:

xdotool mousemove –window 46137499 0 0

If I wanted to move the cursor to the top left corner of the whole screen, I would do the following:

xdotool mousemove 0 0

NOTE: When no window is specified, the desktop is assumed as the window.

If I wished to use polar coordinates up is 0 or 360 degrees, right is 90, down is 180 and left is 270 degrees. The ‘y’ coordinate is the number of pixels from the center of the window. In the following example, the cursor will be placed 45 degrees and 300 pixels from the center of the desktop:

xdotool mousemove –polar 45 300

NOTE: The cursor is placed in the upper right part of the screen. Any pixel value greater than what would cause the cursor to be off the screen will only place the cursor at the edge of the screen.

There exists another mousemove command which restores the cursor back to where it was before you performed the previous mousemove:

mousemove [options] restore

The options are the same as the mousemove, except –window and –polar do not work. The restore command needs to be used in the same xdotool command as follows:

xdotool mousemove 1000 1000 mousemove restore

NOTE: Multiple commands can be chained together in xdotool command as shown. All the commands can be mixed such as keyboard, mouse, window and desktop commands.

The third mousemove command is:

mousemove_relative [options] x y

This command moves the cursor relative to its current position. The options are as follows:

· –polar – uses polar coordinates by specifying ‘x’ between 0-360 degrees and ‘y’ as the distance from the center, based off the specified window by its id
· –clearmodifiers – clears all modifiers such as Shift, CTRL and such keyboard keys as well as a mouse button being pressed manually
· –sync – causes the mousemove command to be sent, but the cursor does not move until the mouse is physically moved. Once moved, the cursor will go to the position specified

Here, we can move the cursor to the center of the screen and then use the relative command to move it down (180 degrees) and a distance of 50 pixels:

xdotool mousemove –polar 0 0 mousemove_relative –polar 180 50

Another mouse command is the ‘click’ command. Here, we can cause the cursor to perform a mouse click as if the user did physically click a button on the mouse. The syntax is:

click [options] button

The options are as follows:

· –window window_id – for mouse movement, the window you specify will be the one used as a relative point for movement
· –clearmodifiers – clears all modifiers such as Shift, CTRL and such keyboard keys as well as a mouse button being pressed manually
· –repeat – specifies the number of times to click. The default is one which is a single click, specify 2 for a double click
· –delay milliseconds – the number of milliseconds to delay between clicks. The option is only used when the repeat option is used with a value greater than 1

The buttons are numeric from left to right on the mouse or the opposite way if it is as left-handed mouse. For a right-handed mouse, button 1 is the far leftmost, the center button is button 2 if there is one, and the right button would either be 2 or 3 depending if a middle button existed.

NOTE: With some systems, button 4 can be for the middle button up and 5 for the middle button down.

For example, let us use a text editor with a window id of 46137499. We will move the cursor to the top left corner of the window and left click to select it (focus). The cursor is then moved down 10 pixels and right 100 pixels relative to the current position. At this point we will cause the wheel to scroll down 10 times:

xdotool mousemove –window 46137499 0 0 click 1 mousemove_relative 10 110 click –repeat 10 5

The following two commands are similar and work together. The commands are:

mousedown [options] button
mouseup [options] button

Here it is possible to perform drag-and-drop procedures on systems which support it. Place the cursor in a position. Use the mousedown command with the proper button, move the mouse again and use the mouseup command to drop what has been dragged.

For example, let us click on the text editor window and select it with the left mouse button. The mousedown command is used to be able to drag it. The mouse is moved to the desktop coordinates of 10 10. Now the mouseup command is given to drop the window.

xdotool mousemove –window 46137499 0 0 click 1; xdotool mousedown 1; xdotool mousemove 10 10; xdotool mouseup 1

NOTE: In this case, chaining the commands does not work and each command must be seprarate. Chained commands must be experimented with before using in a script.

The next command is the ‘getmouselocation’ which is shown in Figure 1. Here you can see the Terminal executing the ‘getmouselocation’ command while the mouse is on the text editor window. The output for get mouse location is: x:1170 y:19 screen:0 window:46137499.

NOTE: This is another way to get the window id.
xDoTool - Mouse Figure 1.jpg
FIGURE 1​

The getmouselocation has no input, but can accept the –shell option. The –shell option places the four location items in a column rather than a row. The items can be used in a shell script to provide information for variables to use in the scripts.

The next command is the ‘behave_screen_edge’. The syntax is as follows:

behave_screen_edge [options] WHERE COMMAND

This command allows you to specify an edge of a screen which will cause an action to be performed when the mouse hits the specified edge. The command seems to work best when the current window is maximized or touches the edge of the screen that is the “hot spot”.

The options are as follows:

· delay milliseconds – specifies the number of milliseconds which the cursor must be at the WHERE to trigger event
· quiesce milliseconds – delay before next trigger can occur (default 0)

The WHERE options are as follows:

· left
· top-left
· top
· top-right
· right
· bottom-left
· bottom
· bottom-right

A simple command is to execute the gedit text editor command when the cursor touches the left side of the screen:

xdotool behave_screen_edge –quiesce 750 left exec gedit

Try a few of these and my next article will cover the Window commands.

This entry passed through the Full-Text RSS service — if this is your content and you’re reading it on someone else’s site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.

Linux.org

آفلاین eshahnazi

  • Jr. Member
  • *
  • ارسال: 72
پاسخ : کنترل کرسر موس در لینوکس به زبان c++
« پاسخ #2 : 04 شهریور 1395، 05:47 ب‌ظ »
به صورت خلاصه
برای انتقال کرسر موس به نقطه مورد نظر توسط ترمینال: اول باید ببنیم xdotool  نصبه یا نه. روی اوبنتو پیش فرض نصبه.
در نهایت برای انتقال موس به نقطه مورد نظرکد زیر رو در ترمینال میزنیم
 مختصات 500 و 500 میره
xdotool mousemove 500 500
برای استفاده در برنامه هایی که به زبان سی ++ نوشه می شوند باید کتابخانه های
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <vector>

اینکلود شده باشند.

نمونه کد:

این تابع هست که قبل از int main() میزاریم
void movemouse(Point &Centroid)
{

}

void mousemove(int x_pos, int y_pos)
{
    ///Strings that will contain the conversions
    string xcord; string ycord;

    ///These are buffers or something? I don't really know... lol.
    stringstream sstr; stringstream sstr2;

    ///Conversion to regular string happens here
    sstr<<5*x_pos;
    xcord = sstr.str();
    sstr2<<5*y_pos;
    ycord = sstr2.str();

    ///Getting the command string
    string command = "xdotool mousemove " + xcord + " " + ycord;

    ///Converting command string to a form that system() accepts.
    const char *com = command.c_str();
    system(com);
}

بعد مختصات رو توسط دستور زیر به تابع میفرستیم:
mousemove(x,y);
ایکس و وای مختصاتی هست که کرسر موس باید بره اونجا.

من این مورد را برای پروژه چشم نویس بکار بردم.
ادرس پروژه در گیت هاب.
https://github.com/Ehsan-Shahnazi/EyeWriter

موفق باشید.