﻿
{"id":5967,"date":"2017-04-13T19:33:16","date_gmt":"2017-04-13T19:33:16","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=5967"},"modified":"2017-06-24T17:04:33","modified_gmt":"2017-06-24T17:04:33","slug":"c-ile-mousea-hukmedelim","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-ile-mousea-hukmedelim\/","title":{"rendered":"C# \u0130le Mouse&#8217;a H\u00fckmedelim"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>\u0130\u00e7eri\u011fimizin ba\u015fl\u0131\u011f\u0131ndan dolay\u0131 C# Mouse eventlar\u0131n\u0131 kullanaca\u011f\u0131m\u0131z\u0131 sanm\u0131\u015f olanlar olabilir. Ba\u015ftan s\u00f6ylemekte fayda var ki, bu makalede Win32 API&#8217;lerinden faydalanarak i\u015fletim sisteminin nimetlerini kullanacak, faremize fiziksel m\u00fcdahalede bulunaca\u011f\u0131z.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-ile-win32-api-entegrasyonu-nasil-yapilir\/\" target=\"_blank\" rel=\"noopener noreferrer\">C# \u0130le Win32 API Entegrasyonu Nas\u0131l Yap\u0131l\u0131r?<\/a> ba\u015fl\u0131kl\u0131 makalemde C# ile Win32 API entegrasyonuna de\u011finmi\u015f bulunmaktay\u0131m. Haliyle bu i\u00e7eri\u011fimizde kullanaca\u011f\u0131m\u0131z yap\u0131lar\u0131 tan\u0131mlayabilmeniz i\u00e7in \u00f6ncelikle verdi\u011fim adresteki makaleye g\u00f6z atman\u0131zda fayda oldu\u011funu belirtiyor, al\u0131\u015f\u0131lagelmi\u015fin d\u0131\u015f\u0131ndaki gramersel kullan\u0131m\u0131 bildi\u011finizi varsayarak ilgili konumuzu ele almaya ba\u015fl\u0131yorum&#8230;<\/p>\n<p>Mouse&#8217;a fiziksel olarak m\u00fcdahale edebilmemiz i\u00e7in &#8220;User32.DLL&#8221; k\u00fct\u00fcphanesindeki nimetlere eri\u015fmemiz gerekmektedir. A\u015fa\u011f\u0131daki s\u0131n\u0131f\u0131m\u0131z ilgili k\u00fct\u00fcphaneyi import ederek fareye h\u00fckmedecek metotlar\u0131 extern etmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Win32\r\n    {\r\n        &#x5B;DllImport(&quot;User32.Dll&quot;)]\r\n        public static extern long SetCursorPos(int x, int y);\r\n\r\n        &#x5B;DllImport(&quot;User32.Dll&quot;)]\r\n        public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point);\r\n\r\n        &#x5B;StructLayout(LayoutKind.Sequential)]\r\n        public struct POINT\r\n        {\r\n            public int x;\r\n            public int y;\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer &#8220;ClientToScreen&#8221; extern metodu farenin lokasyonunu tutmakla, &#8220;SetCursorPos&#8221; extenr metodu ise fareyi ilgili lokasyona \u00e7akmak i\u015fleviyle y\u00fck\u00fcml\u00fcd\u00fcrler.<\/p>\n<p>Hade gelin ilgili s\u0131n\u0131f\u0131 kullanarak faremize hareket kabiliyeti kazand\u0131ral\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Win32.POINT p = new Win32.POINT();\r\n            p.x = 280;\r\n            p.y = 320;\r\n\r\n            Win32.ClientToScreen(IntPtr.Zero, ref p);\r\n            Win32.SetCursorPos(p.x, p.y);\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki gibi kodumuzu olu\u015fturduktan sonra projemizi derleyip \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131z zaman a\u015fa\u011f\u0131daki videoda da oldu\u011fu gibi fademizin lokasyonu de\u011fi\u015fecektir.<br \/>\n<iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/bEJJ1r1BN18\" width=\"450\" height=\"250\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>E\u011fer ki farenin lokasyonunu \u00f6\u011frenmek istiyorsak Win32 s\u0131n\u0131f\u0131m\u0131za &#8220;GetCursorPos&#8221; metodunu extern etmemiz gerekcektir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Win32\r\n    {\r\n        .\r\n        .\r\n        .\r\n        &#x5B;DllImport(&quot;user32.dll&quot;)]\r\n        public static extern bool GetCursorPos(out POINT lpPoint);\r\n        .\r\n        .\r\n        .\r\n    }\r\n<\/pre>\n<p>Bu metodu a\u015fa\u011f\u0131daki gibi kullan\u0131rsak e\u011fer ekran\u0131n herhangi bir yerindeki farenin lokasyonunu elde edebilmekteyiz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Win32.GetCursorPos(out Win32.POINT point);\r\n            Console.WriteLine(point.x + &quot; &quot; + point.y);\r\n        }\r\n    }\r\n<\/pre>\n<p>out olarak gelen point de\u011fi\u015fkeni sayesinde farenin koordinatlar\u0131n\u0131 elde edebilmekteyiz.<\/p>\n<p>Anlayaca\u011f\u0131n\u0131z C# ile Win32 API&#8217;sini kullanarak fareye m\u00fcdahale etmi\u015f bulunmaktay\u0131z. Ama buradan bak\u0131nca biraz \u00f6nce yapm\u0131\u015f oldu\u011fumuz i\u015flemde fare \u00e7ok h\u0131zl\u0131 bir \u015fekilde anl\u0131k olarak verilen lokasyona gitmektedir. E\u011fer ki olaya biraz animasyon katmak isterseniz a\u015fa\u011f\u0131daki gibi bir \u00e7al\u0131\u015fma yapabilirsiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Win32\r\n    {\r\n        .\r\n        .\r\n        .\r\n        &#x5B;DllImport(&quot;user32.dll&quot;)]\r\n        public static extern bool GetCursorPos(out POINT lpPoint);\r\n        public static System.Drawing.Point GetCursorPosition()\r\n        {\r\n            POINT lpPoint;\r\n            GetCursorPos(out lpPoint);\r\n\r\n            return lpPoint;\r\n        }\r\n        .\r\n        .\r\n        .\r\n        &#x5B;StructLayout(LayoutKind.Sequential)]\r\n        public struct POINT\r\n        {\r\n            public int x;\r\n            public int y;\r\n\r\n            public static implicit operator System.Drawing.Point(POINT point)\r\n            {\r\n                return new System.Drawing.Point(point.x, point.y);\r\n            }\r\n        }\r\n        .\r\n        .\r\n        .\r\n    }\r\n<\/pre>\n<p>\u00d6ncelikle Win32 s\u0131n\u0131f\u0131m\u0131zda &#8220;GetCursorPosition&#8221; isimli farenin koordinatlar\u0131n\u0131 bize System.Drawing.Point tipinde d\u00f6nen bir metot olu\u015fturuyoruz. Ayriyetten POINT struct&#8217;\u0131m\u0131zda System.Drawing.Point tipine implicit \u00e7evrimi yapabilmek i\u00e7in &#8220;implicit operator&#8221; yap\u0131s\u0131n\u0131 kullanmaktay\u0131z.<\/p>\n<p>Ve ard\u0131ndan;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static Win32.POINT hedeflenenkonum;\r\n        static int x, y;\r\n        static Timer tmr;\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            hedeflenenkonum = new Win32.POINT();\r\n            hedeflenenkonum.x = 280;\r\n            hedeflenenkonum.y = 320;\r\n\r\n            Win32.ClientToScreen(IntPtr.Zero, ref hedeflenenkonum);\r\n\r\n            tmr = new Timer();\r\n            tmr.Interval = 1;\r\n            tmr.Elapsed += Tmr_Elapsed;\r\n            tmr.Start();\r\n\r\n            Console.Read();\r\n        }\r\n\r\n        private static void Tmr_Elapsed(object sender, ElapsedEventArgs e)\r\n        {\r\n            Win32.ClientToScreen(IntPtr.Zero, ref hedeflenenkonum);\r\n\r\n            if (Win32.GetCursorPosition().X &lt; hedeflenenkonum.x)\r\n            {\r\n                if (Win32.GetCursorPosition().X - Win32.GetCursorPosition().X &lt; 10)\r\n                    Win32.SetCursorPos(Win32.GetCursorPosition().X + 1, Win32.GetCursorPosition().Y);\r\n                else\r\n                    Win32.SetCursorPos(Win32.GetCursorPosition().X + 10, Win32.GetCursorPosition().Y);\r\n            }\r\n            else if (Win32.GetCursorPosition().X &gt; hedeflenenkonum.x)\r\n            {\r\n                if (Win32.GetCursorPosition().X - hedeflenenkonum.x &lt; 10)\r\n                    Win32.SetCursorPos(Win32.GetCursorPosition().X - 1, Win32.GetCursorPosition().Y);\r\n                else\r\n                    Win32.SetCursorPos(Win32.GetCursorPosition().X - 10, Win32.GetCursorPosition().Y);\r\n            }\r\n            if (Win32.GetCursorPosition().Y &lt; hedeflenenkonum.y)\r\n            {\r\n                if (hedeflenenkonum.y - Win32.GetCursorPosition().Y &lt; 10)\r\n                    Win32.SetCursorPos(Win32.GetCursorPosition().X, Win32.GetCursorPosition().Y + 1);\r\n                else\r\n                    Win32.SetCursorPos(Win32.GetCursorPosition().X, Win32.GetCursorPosition().Y + 10);\r\n            }\r\n            else if (Win32.GetCursorPosition().Y &gt; hedeflenenkonum.y)\r\n            {\r\n                if (Win32.GetCursorPosition().Y - hedeflenenkonum.y &lt; 10)\r\n                    Win32.SetCursorPos(Win32.GetCursorPosition().X, Win32.GetCursorPosition().Y - 1);\r\n                else\r\n                    Win32.SetCursorPos(Win32.GetCursorPosition().X, Win32.GetCursorPosition().Y - 10);\r\n            }\r\n\r\n            if (Win32.GetCursorPosition().X == hedeflenenkonum.x &amp;&amp; Win32.GetCursorPosition().Y == hedeflenenkonum.y)\r\n                tmr.Stop();\r\n\r\n        }\r\n    }\r\n<\/pre>\n<p>\u015feklinde kodumuzu in\u015fa edersek e\u011fer a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi bir animasyonlu fare hareketiyle kar\u015f\u0131la\u015faca\u011f\u0131z. Tabi buradaki algoritmik durumu ayr\u0131\u015ft\u0131rmay\u0131 sizlere b\u0131rak\u0131yorum.<br \/>\n<iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/ffNX3hzeAh0\" width=\"450\" height=\"250\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere faremizi Win32 API sayesinde hareket ettirmi\u015f olduk.<\/p>\n<p>D\u00fc\u015f\u00fcnsenize&#8230; Yaz\u0131l\u0131msal olarak fare ve klavye gibi donan\u0131m kontrollerini bot yaz\u0131l\u0131mlar\u0131na entegre ederek yapabileceklerinizin s\u0131n\u0131rs\u0131zl\u0131\u011f\u0131n\u0131 hissedin.<\/p>\n<p>Sonraki yaz\u0131lar\u0131m\u0131zda bu konuya benzer nitelikte olan Win32 API&#8217;leriyle fareye direkt olarak t\u0131klama, s\u00fcr\u00fckleme vs. gibi olaylar yaratt\u0131raca\u011f\u0131z.<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, \u0130\u00e7eri\u011fimizin ba\u015fl\u0131\u011f\u0131ndan dolay\u0131 C# Mouse eventlar\u0131n\u0131 kullanaca\u011f\u0131m\u0131z\u0131 sanm\u0131\u015f olanlar olabilir. Ba\u015ftan s\u00f6ylemekte fayda var ki, bu makalede Win32 API&#8217;lerinden faydalanarak i\u015fletim sisteminin nimetlerini kullanacak, faremize fiziksel m\u00fcdahalede bulunaca\u011f\u0131z. C# \u0130le Win32 API Entegrasyonu&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":3014,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,1856],"tags":[1720,1719,1721,1718,1722,1723,1717,1724,1690],"class_list":["post-5967","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","category-win32","tag-c-ile-fareye-hareket-ettirme","tag-c-mouse-hareket","tag-c-win32-api","tag-clienttoscreen","tag-getcursorpos","tag-implicit-operator","tag-setcursorpos","tag-system-drawing-point","tag-win32-api"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5967","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=5967"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5967\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3014"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=5967"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=5967"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=5967"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}