SendInput always moves mouse pointer to left top corner





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















I would like to programmatically synthesize mouse motion to a point (100,100) on a screen with code below, but it moves to left top side instead. What could be wrong?



#include "stdafx.h"
#include<Windows.h>

int main() {
INPUT input;
input.type = INPUT_MOUSE;
input.mi.dx = 100;
input.mi.dy = 100;
input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
input.mi.mouseData = 0;
input.mi.dwExtraInfo = NULL;
input.mi.time = 0;
SendInput(1, &input, sizeof(INPUT));
return 0;
}


PS. I have compiled it in VS2017 on Windows 10x64. I have run the code on Win7 as well



PPS. When I remove MOUSEEVENTF_ABSOLUTE flag, it moves to relative position.










share|improve this question































    0















    I would like to programmatically synthesize mouse motion to a point (100,100) on a screen with code below, but it moves to left top side instead. What could be wrong?



    #include "stdafx.h"
    #include<Windows.h>

    int main() {
    INPUT input;
    input.type = INPUT_MOUSE;
    input.mi.dx = 100;
    input.mi.dy = 100;
    input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
    input.mi.mouseData = 0;
    input.mi.dwExtraInfo = NULL;
    input.mi.time = 0;
    SendInput(1, &input, sizeof(INPUT));
    return 0;
    }


    PS. I have compiled it in VS2017 on Windows 10x64. I have run the code on Win7 as well



    PPS. When I remove MOUSEEVENTF_ABSOLUTE flag, it moves to relative position.










    share|improve this question



























      0












      0








      0


      1






      I would like to programmatically synthesize mouse motion to a point (100,100) on a screen with code below, but it moves to left top side instead. What could be wrong?



      #include "stdafx.h"
      #include<Windows.h>

      int main() {
      INPUT input;
      input.type = INPUT_MOUSE;
      input.mi.dx = 100;
      input.mi.dy = 100;
      input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
      input.mi.mouseData = 0;
      input.mi.dwExtraInfo = NULL;
      input.mi.time = 0;
      SendInput(1, &input, sizeof(INPUT));
      return 0;
      }


      PS. I have compiled it in VS2017 on Windows 10x64. I have run the code on Win7 as well



      PPS. When I remove MOUSEEVENTF_ABSOLUTE flag, it moves to relative position.










      share|improve this question
















      I would like to programmatically synthesize mouse motion to a point (100,100) on a screen with code below, but it moves to left top side instead. What could be wrong?



      #include "stdafx.h"
      #include<Windows.h>

      int main() {
      INPUT input;
      input.type = INPUT_MOUSE;
      input.mi.dx = 100;
      input.mi.dy = 100;
      input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
      input.mi.mouseData = 0;
      input.mi.dwExtraInfo = NULL;
      input.mi.time = 0;
      SendInput(1, &input, sizeof(INPUT));
      return 0;
      }


      PS. I have compiled it in VS2017 on Windows 10x64. I have run the code on Win7 as well



      PPS. When I remove MOUSEEVENTF_ABSOLUTE flag, it moves to relative position.







      c++ winapi mouseevent






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Feb 28 '18 at 10:22







      Leo

















      asked Feb 28 '18 at 10:11









      LeoLeo

      304112




      304112
























          1 Answer
          1






          active

          oldest

          votes


















          4














          The API call follows documented behavior:




          MOUSEEVENTF_ABSOLUTE: The dx and dy members contain normalized absolute coordinates. [...] see the following Remarks section.




          Normalized coordinates are indeed described in the Remarks section:




          If MOUSEEVENTF_ABSOLUTE value is specified, dx and dy contain normalized absolute coordinates between 0 and 65,535. The event procedure maps these coordinates onto the display surface. Coordinate (0,0) maps onto the upper-left corner of the display surface; coordinate (65535,65535) maps onto the lower-right corner. In a multimonitor system, the coordinates map to the primary monitor.




          To move the mouse to an absolute position, you first need to query the display surface size (e.g. through a call to GetMonitorInfor), and scale the coordinates appropriately.



          The following function normalizes a point, given the point and display surface dimensions in device units as input:



          POINT normalize(POINT const& pt_in_px, RECT const& display_size_in_px)
          {
          POINT pt_normalized{};

          auto const width_in_px{ display_size_in_px.right - display_size_in_px.left };
          auto const height_in_px{ display_size_in_px.bottom - display_size_in_px.top };

          pt_normalized.x = ::MulDiv(pt_in_px.x, 65536, width_in_px);
          pt_normalized.y = ::MulDiv(pt_in_px.y, 65536, height_in_px);

          return pt_normalized;
          }





          share|improve this answer


























          • Thank you! Because of small values of dx and dy in my data I have not noticed any move at all.

            – Leo
            Feb 28 '18 at 10:48













          • Haha, I just though: so this 'works' until we have 64k monitors. As if ever ;)

            – JHBonarius
            Feb 28 '18 at 10:56











          • @JHBonarius: This does work for 64k displays just fine. Only exception is the rounding performed by MulDiv, that starts to map the final rows and columns to 65536, once you get closer to coordinates with values 2^32 - 1. For a hypothetical display with resolution 64k x 64k the function produces perfectly valid values.

            – IInspectable
            Feb 28 '18 at 11:03











          • Yes, sorry. I meant after 64k, so 128k etc ;). Just very hypothetical.. Imagine the bandwidth of a theoretical 128k*128k*120fps monitor... 2 TB/s xD

            – JHBonarius
            Feb 28 '18 at 11:53












          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f49026921%2fsendinput-always-moves-mouse-pointer-to-left-top-corner%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          4














          The API call follows documented behavior:




          MOUSEEVENTF_ABSOLUTE: The dx and dy members contain normalized absolute coordinates. [...] see the following Remarks section.




          Normalized coordinates are indeed described in the Remarks section:




          If MOUSEEVENTF_ABSOLUTE value is specified, dx and dy contain normalized absolute coordinates between 0 and 65,535. The event procedure maps these coordinates onto the display surface. Coordinate (0,0) maps onto the upper-left corner of the display surface; coordinate (65535,65535) maps onto the lower-right corner. In a multimonitor system, the coordinates map to the primary monitor.




          To move the mouse to an absolute position, you first need to query the display surface size (e.g. through a call to GetMonitorInfor), and scale the coordinates appropriately.



          The following function normalizes a point, given the point and display surface dimensions in device units as input:



          POINT normalize(POINT const& pt_in_px, RECT const& display_size_in_px)
          {
          POINT pt_normalized{};

          auto const width_in_px{ display_size_in_px.right - display_size_in_px.left };
          auto const height_in_px{ display_size_in_px.bottom - display_size_in_px.top };

          pt_normalized.x = ::MulDiv(pt_in_px.x, 65536, width_in_px);
          pt_normalized.y = ::MulDiv(pt_in_px.y, 65536, height_in_px);

          return pt_normalized;
          }





          share|improve this answer


























          • Thank you! Because of small values of dx and dy in my data I have not noticed any move at all.

            – Leo
            Feb 28 '18 at 10:48













          • Haha, I just though: so this 'works' until we have 64k monitors. As if ever ;)

            – JHBonarius
            Feb 28 '18 at 10:56











          • @JHBonarius: This does work for 64k displays just fine. Only exception is the rounding performed by MulDiv, that starts to map the final rows and columns to 65536, once you get closer to coordinates with values 2^32 - 1. For a hypothetical display with resolution 64k x 64k the function produces perfectly valid values.

            – IInspectable
            Feb 28 '18 at 11:03











          • Yes, sorry. I meant after 64k, so 128k etc ;). Just very hypothetical.. Imagine the bandwidth of a theoretical 128k*128k*120fps monitor... 2 TB/s xD

            – JHBonarius
            Feb 28 '18 at 11:53
















          4














          The API call follows documented behavior:




          MOUSEEVENTF_ABSOLUTE: The dx and dy members contain normalized absolute coordinates. [...] see the following Remarks section.




          Normalized coordinates are indeed described in the Remarks section:




          If MOUSEEVENTF_ABSOLUTE value is specified, dx and dy contain normalized absolute coordinates between 0 and 65,535. The event procedure maps these coordinates onto the display surface. Coordinate (0,0) maps onto the upper-left corner of the display surface; coordinate (65535,65535) maps onto the lower-right corner. In a multimonitor system, the coordinates map to the primary monitor.




          To move the mouse to an absolute position, you first need to query the display surface size (e.g. through a call to GetMonitorInfor), and scale the coordinates appropriately.



          The following function normalizes a point, given the point and display surface dimensions in device units as input:



          POINT normalize(POINT const& pt_in_px, RECT const& display_size_in_px)
          {
          POINT pt_normalized{};

          auto const width_in_px{ display_size_in_px.right - display_size_in_px.left };
          auto const height_in_px{ display_size_in_px.bottom - display_size_in_px.top };

          pt_normalized.x = ::MulDiv(pt_in_px.x, 65536, width_in_px);
          pt_normalized.y = ::MulDiv(pt_in_px.y, 65536, height_in_px);

          return pt_normalized;
          }





          share|improve this answer


























          • Thank you! Because of small values of dx and dy in my data I have not noticed any move at all.

            – Leo
            Feb 28 '18 at 10:48













          • Haha, I just though: so this 'works' until we have 64k monitors. As if ever ;)

            – JHBonarius
            Feb 28 '18 at 10:56











          • @JHBonarius: This does work for 64k displays just fine. Only exception is the rounding performed by MulDiv, that starts to map the final rows and columns to 65536, once you get closer to coordinates with values 2^32 - 1. For a hypothetical display with resolution 64k x 64k the function produces perfectly valid values.

            – IInspectable
            Feb 28 '18 at 11:03











          • Yes, sorry. I meant after 64k, so 128k etc ;). Just very hypothetical.. Imagine the bandwidth of a theoretical 128k*128k*120fps monitor... 2 TB/s xD

            – JHBonarius
            Feb 28 '18 at 11:53














          4












          4








          4







          The API call follows documented behavior:




          MOUSEEVENTF_ABSOLUTE: The dx and dy members contain normalized absolute coordinates. [...] see the following Remarks section.




          Normalized coordinates are indeed described in the Remarks section:




          If MOUSEEVENTF_ABSOLUTE value is specified, dx and dy contain normalized absolute coordinates between 0 and 65,535. The event procedure maps these coordinates onto the display surface. Coordinate (0,0) maps onto the upper-left corner of the display surface; coordinate (65535,65535) maps onto the lower-right corner. In a multimonitor system, the coordinates map to the primary monitor.




          To move the mouse to an absolute position, you first need to query the display surface size (e.g. through a call to GetMonitorInfor), and scale the coordinates appropriately.



          The following function normalizes a point, given the point and display surface dimensions in device units as input:



          POINT normalize(POINT const& pt_in_px, RECT const& display_size_in_px)
          {
          POINT pt_normalized{};

          auto const width_in_px{ display_size_in_px.right - display_size_in_px.left };
          auto const height_in_px{ display_size_in_px.bottom - display_size_in_px.top };

          pt_normalized.x = ::MulDiv(pt_in_px.x, 65536, width_in_px);
          pt_normalized.y = ::MulDiv(pt_in_px.y, 65536, height_in_px);

          return pt_normalized;
          }





          share|improve this answer















          The API call follows documented behavior:




          MOUSEEVENTF_ABSOLUTE: The dx and dy members contain normalized absolute coordinates. [...] see the following Remarks section.




          Normalized coordinates are indeed described in the Remarks section:




          If MOUSEEVENTF_ABSOLUTE value is specified, dx and dy contain normalized absolute coordinates between 0 and 65,535. The event procedure maps these coordinates onto the display surface. Coordinate (0,0) maps onto the upper-left corner of the display surface; coordinate (65535,65535) maps onto the lower-right corner. In a multimonitor system, the coordinates map to the primary monitor.




          To move the mouse to an absolute position, you first need to query the display surface size (e.g. through a call to GetMonitorInfor), and scale the coordinates appropriately.



          The following function normalizes a point, given the point and display surface dimensions in device units as input:



          POINT normalize(POINT const& pt_in_px, RECT const& display_size_in_px)
          {
          POINT pt_normalized{};

          auto const width_in_px{ display_size_in_px.right - display_size_in_px.left };
          auto const height_in_px{ display_size_in_px.bottom - display_size_in_px.top };

          pt_normalized.x = ::MulDiv(pt_in_px.x, 65536, width_in_px);
          pt_normalized.y = ::MulDiv(pt_in_px.y, 65536, height_in_px);

          return pt_normalized;
          }






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Feb 28 '18 at 10:45

























          answered Feb 28 '18 at 10:32









          IInspectableIInspectable

          26.5k64499




          26.5k64499













          • Thank you! Because of small values of dx and dy in my data I have not noticed any move at all.

            – Leo
            Feb 28 '18 at 10:48













          • Haha, I just though: so this 'works' until we have 64k monitors. As if ever ;)

            – JHBonarius
            Feb 28 '18 at 10:56











          • @JHBonarius: This does work for 64k displays just fine. Only exception is the rounding performed by MulDiv, that starts to map the final rows and columns to 65536, once you get closer to coordinates with values 2^32 - 1. For a hypothetical display with resolution 64k x 64k the function produces perfectly valid values.

            – IInspectable
            Feb 28 '18 at 11:03











          • Yes, sorry. I meant after 64k, so 128k etc ;). Just very hypothetical.. Imagine the bandwidth of a theoretical 128k*128k*120fps monitor... 2 TB/s xD

            – JHBonarius
            Feb 28 '18 at 11:53



















          • Thank you! Because of small values of dx and dy in my data I have not noticed any move at all.

            – Leo
            Feb 28 '18 at 10:48













          • Haha, I just though: so this 'works' until we have 64k monitors. As if ever ;)

            – JHBonarius
            Feb 28 '18 at 10:56











          • @JHBonarius: This does work for 64k displays just fine. Only exception is the rounding performed by MulDiv, that starts to map the final rows and columns to 65536, once you get closer to coordinates with values 2^32 - 1. For a hypothetical display with resolution 64k x 64k the function produces perfectly valid values.

            – IInspectable
            Feb 28 '18 at 11:03











          • Yes, sorry. I meant after 64k, so 128k etc ;). Just very hypothetical.. Imagine the bandwidth of a theoretical 128k*128k*120fps monitor... 2 TB/s xD

            – JHBonarius
            Feb 28 '18 at 11:53

















          Thank you! Because of small values of dx and dy in my data I have not noticed any move at all.

          – Leo
          Feb 28 '18 at 10:48







          Thank you! Because of small values of dx and dy in my data I have not noticed any move at all.

          – Leo
          Feb 28 '18 at 10:48















          Haha, I just though: so this 'works' until we have 64k monitors. As if ever ;)

          – JHBonarius
          Feb 28 '18 at 10:56





          Haha, I just though: so this 'works' until we have 64k monitors. As if ever ;)

          – JHBonarius
          Feb 28 '18 at 10:56













          @JHBonarius: This does work for 64k displays just fine. Only exception is the rounding performed by MulDiv, that starts to map the final rows and columns to 65536, once you get closer to coordinates with values 2^32 - 1. For a hypothetical display with resolution 64k x 64k the function produces perfectly valid values.

          – IInspectable
          Feb 28 '18 at 11:03





          @JHBonarius: This does work for 64k displays just fine. Only exception is the rounding performed by MulDiv, that starts to map the final rows and columns to 65536, once you get closer to coordinates with values 2^32 - 1. For a hypothetical display with resolution 64k x 64k the function produces perfectly valid values.

          – IInspectable
          Feb 28 '18 at 11:03













          Yes, sorry. I meant after 64k, so 128k etc ;). Just very hypothetical.. Imagine the bandwidth of a theoretical 128k*128k*120fps monitor... 2 TB/s xD

          – JHBonarius
          Feb 28 '18 at 11:53





          Yes, sorry. I meant after 64k, so 128k etc ;). Just very hypothetical.. Imagine the bandwidth of a theoretical 128k*128k*120fps monitor... 2 TB/s xD

          – JHBonarius
          Feb 28 '18 at 11:53




















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f49026921%2fsendinput-always-moves-mouse-pointer-to-left-top-corner%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          鏡平學校

          ꓛꓣだゔៀៅຸ໢ທຮ໕໒ ,ໂ'໥໓າ໼ឨឲ៵៭ៈゎゔit''䖳𥁄卿' ☨₤₨こゎもょの;ꜹꟚꞖꞵꟅꞛေၦေɯ,ɨɡ𛃵𛁹ޝ޳ޠ޾,ޤޒޯ޾𫝒𫠁သ𛅤チョ'サノބޘދ𛁐ᶿᶇᶀᶋᶠ㨑㽹⻮ꧬ꧹؍۩وَؠ㇕㇃㇪ ㇦㇋㇋ṜẰᵡᴠ 軌ᵕ搜۳ٰޗޮ޷ސޯ𫖾𫅀ल, ꙭ꙰ꚅꙁꚊꞻꝔ꟠Ꝭㄤﺟޱސꧨꧼ꧴ꧯꧽ꧲ꧯ'⽹⽭⾁⿞⼳⽋២៩ញណើꩯꩤ꩸ꩮᶻᶺᶧᶂ𫳲𫪭𬸄𫵰𬖩𬫣𬊉ၲ𛅬㕦䬺𫝌𫝼,,𫟖𫞽ហៅ஫㆔ాఆఅꙒꚞꙍ,Ꙟ꙱エ ,ポテ,フࢰࢯ𫟠𫞶 𫝤𫟠ﺕﹱﻜﻣ𪵕𪭸𪻆𪾩𫔷ġ,ŧآꞪ꟥,ꞔꝻ♚☹⛵𛀌ꬷꭞȄƁƪƬșƦǙǗdžƝǯǧⱦⱰꓕꓢႋ神 ဴ၀க௭எ௫ឫោ ' េㇷㇴㇼ神ㇸㇲㇽㇴㇼㇻㇸ'ㇸㇿㇸㇹㇰㆣꓚꓤ₡₧ ㄨㄟ㄂ㄖㄎ໗ツڒذ₶।ऩछएोञयूटक़कयँृी,冬'𛅢𛅥ㇱㇵㇶ𥄥𦒽𠣧𠊓𧢖𥞘𩔋цѰㄠſtʯʭɿʆʗʍʩɷɛ,əʏダヵㄐㄘR{gỚṖḺờṠṫảḙḭᴮᵏᴘᵀᵷᵕᴜᴏᵾq﮲ﲿﴽﭙ軌ﰬﶚﶧ﫲Ҝжюїкӈㇴffצּ﬘﭅﬈軌'ffistfflſtffतभफɳɰʊɲʎ𛁱𛁖𛁮𛀉 𛂯𛀞నఋŀŲ 𫟲𫠖𫞺ຆຆ ໹້໕໗ๆทԊꧢꧠ꧰ꓱ⿝⼑ŎḬẃẖỐẅ ,ờỰỈỗﮊDžȩꭏꭎꬻ꭮ꬿꭖꭥꭅ㇭神 ⾈ꓵꓑ⺄㄄ㄪㄙㄅㄇstA۵䞽ॶ𫞑𫝄㇉㇇゜軌𩜛𩳠Jﻺ‚Üမ႕ႌႊၐၸဓၞၞၡ៸wyvtᶎᶪᶹစဎ꣡꣰꣢꣤ٗ؋لㇳㇾㇻㇱ㆐㆔,,㆟Ⱶヤマފ޼ޝަݿݞݠݷݐ',ݘ,ݪݙݵ𬝉𬜁𫝨𫞘くせぉて¼óû×ó£…𛅑הㄙくԗԀ5606神45,神796'𪤻𫞧ꓐ㄁ㄘɥɺꓵꓲ3''7034׉ⱦⱠˆ“𫝋ȍ,ꩲ軌꩷ꩶꩧꩫఞ۔فڱێظペサ神ナᴦᵑ47 9238їﻂ䐊䔉㠸﬎ffiﬣ,לּᴷᴦᵛᵽ,ᴨᵤ ᵸᵥᴗᵈꚏꚉꚟ⻆rtǟƴ𬎎

          Why https connections are so slow when debugging (stepping over) in Java?