j0achim Skrevet 1. oktober 2012 Del Skrevet 1. oktober 2012 (endret) Hei hei! Prøver å få till en liten kodesnutt jeg har funnet på nettet som beskriver Control mouse programmatically orginalt skrevet i C++, som jeg har så skrevet om til C#. Tingen er at jeg klarer bare ikke å få den til å fungere. Jeg klarer å gjøre gitt oppgave om jeg ligger ved mouse_event, men da tar den fysisk kontroll over min muse peker. Med denne koden skal det være mulig å jobbe med maskin mens ett bilde vill tegnes i mspaint. I dette tilfelle en spiral. Er det noe jeg har glemt? using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.Threading; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Drawing; namespace ConsoleApplication1 { class Helpers { [DllImport("user32.dll")] public static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 msg, Int32 wParam, Int32 lParam); public static int MakeLParam(Point ptr) { return ((ptr.Y &--#60;&--#60; 16) | (ptr.X & 0xffff)); } } class Program { static void Main(string[] args) { Process proc = Process.GetProcessesByName("mspaint").FirstOrDefault(); try { int px; int py; bool firstPoint = true; for (double i = 0; i &--#60; 1; i += 0.001) { double rad = 10 * 2 * 3.14 * i; double x = Math.Cos(rad) * 100 * i; double y = Math.Sin(rad) * 100 * i; px = (int)x + 300; py = (int)y + 300; if (firstPoint) { Helpers.PostMessage(proc.MainWindowHandle, (uint)WMessages.WM_LBUTTONDOWN | (uint)VKeys.VK_LBUTTON, (int)0x1, (int)Helpers.MakeLParam(new Point(px, py))); firstPoint = false; } Helpers.PostMessage(proc.MainWindowHandle, (uint)WMessages.WM_LBUTTONDOWN, (int)VKeys.VK_LBUTTON, (int)Helpers.MakeLParam(new Point(px, py))); Thread.Sleep(10); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } } #region Enumeration /// &--#60;summary&--#62; /// Virtual Keys /// &--#60;/summary&--#62; public enum VKeys : int { VK_LBUTTON = 0x01, //Left mouse button VK_RBUTTON = 0x02, //Right mouse button VK_CANCEL = 0x03, //Control-break processing VK_MBUTTON = 0x04, //Middle mouse button (three-button mouse) VK_BACK = 0x08, //BACKSPACE key VK_TAB = 0x09, //TAB key VK_CLEAR = 0x0C, //CLEAR key VK_RETURN = 0x0D, //ENTER key VK_SHIFT = 0x10, //SHIFT key VK_CONTROL = 0x11, //CTRL key VK_MENU = 0x12, //ALT key VK_PAUSE = 0x13, //PAUSE key VK_CAPITAL = 0x14, //CAPS LOCK key VK_ESCAPE = 0x1B, //ESC key VK_SPACE = 0x20, //SPACEBAR VK_PRIOR = 0x21, //PAGE UP key VK_NEXT = 0x22, //PAGE DOWN key VK_END = 0x23, //END key VK_HOME = 0x24, //HOME key VK_LEFT = 0x25, //LEFT ARROW key VK_UP = 0x26, //UP ARROW key VK_RIGHT = 0x27, //RIGHT ARROW key VK_DOWN = 0x28, //DOWN ARROW key VK_SELECT = 0x29, //SELECT key VK_PRINT = 0x2A, //PRINT key VK_EXECUTE = 0x2B, //EXECUTE key VK_SNAPSHOT = 0x2C, //PRINT SCREEN key VK_INSERT = 0x2D, //INS key VK_DELETE = 0x2E, //DEL key VK_HELP = 0x2F, //HELP key VK_OEMCOMMA = 0xBC, //OEMComma VK_0 = 0x30, //0 key VK_1 = 0x31, //1 key VK_2 = 0x32, //2 key VK_3 = 0x33, //3 key VK_4 = 0x34, //4 key VK_5 = 0x35, //5 key VK_6 = 0x36, //6 key VK_7 = 0x37, //7 key VK_8 = 0x38, //8 key VK_9 = 0x39, //9 key VK_A = 0x41, //A key VK_B = 0x42, //B key VK_C = 0x43, //C key VK_D = 0x44, //D key VK_E = 0x45, //E key VK_F = 0x46, //F key VK_G = 0x47, //G key VK_H = 0x48, //H key VK_I = 0x49, //I key VK_J = 0x4A, //J key VK_K = 0x4B, //K key VK_L = 0x4C, //L key VK_M = 0x4D, //M key VK_N = 0x4E, //N key VK_O = 0x4F, //O key VK_P = 0x50, //P key VK_Q = 0x51, //Q key VK_R = 0x52, //R key VK_S = 0x53, //S key VK_T = 0x54, //T key VK_U = 0x55, //U key VK_V = 0x56, //V key VK_W = 0x57, //W key VK_X = 0x58, //X key VK_Y = 0x59, //Y key VK_Z = 0x5A, //Z key VK_NUMPAD0 = 0x60, //Numeric keypad 0 key VK_NUMPAD1 = 0x61, //Numeric keypad 1 key VK_NUMPAD2 = 0x62, //Numeric keypad 2 key VK_NUMPAD3 = 0x63, //Numeric keypad 3 key VK_NUMPAD4 = 0x64, //Numeric keypad 4 key VK_NUMPAD5 = 0x65, //Numeric keypad 5 key VK_NUMPAD6 = 0x66, //Numeric keypad 6 key VK_NUMPAD7 = 0x67, //Numeric keypad 7 key VK_NUMPAD8 = 0x68, //Numeric keypad 8 key VK_NUMPAD9 = 0x69, //Numeric keypad 9 key VK_SEPARATOR = 0x6C, //Separator key VK_SUBTRACT = 0x6D, //Subtract key VK_DECIMAL = 0x6E, //Decimal key VK_DIVIDE = 0x6F, //Divide key VK_F1 = 0x70, //F1 key VK_F2 = 0x71, //F2 key VK_F3 = 0x72, //F3 key VK_F4 = 0x73, //F4 key VK_F5 = 0x74, //F5 key VK_F6 = 0x75, //F6 key VK_F7 = 0x76, //F7 key VK_F8 = 0x77, //F8 key VK_F9 = 0x78, //F9 key VK_F10 = 0x79, //F10 key VK_F11 = 0x7A, //F11 key VK_F12 = 0x7B, //F12 key VK_SCROLL = 0x91, //SCROLL LOCK key VK_LSHIFT = 0xA0, //Left SHIFT key VK_RSHIFT = 0xA1, //Right SHIFT key VK_LCONTROL = 0xA2, //Left CONTROL key VK_RCONTROL = 0xA3, //Right CONTROL key VK_LMENU = 0xA4, //Left MENU key VK_RMENU = 0xA5, //Right MENU key VK_PLAY = 0xFA, //Play key VK_ZOOM = 0xFB, //Zoom key } public enum MKMessages : int { MK_LBUTTON = 0x0001 } ///&--#60;summary&--#62; /// Virtual Messages /// &--#60;/summary&--#62; public enum WMessages : int { WM_SETCURSOR = 0x0020, WM_MOUSEMOVE = 0x200, //Simulate mouse move. WM_MOUSEHOVER = 0x2A1, WM_ACTIVATE = 0x021, WM_LBUTTONDOWN = 0x201, //Left mousebutton down WM_LBUTTONUP = 0x202, //Left mousebutton up WM_LBUTTONDBLCLK = 0x203, //Left mousebutton doubleclick WM_RBUTTONDOWN = 0x204, //Right mousebutton down WM_RBUTTONUP = 0x205, //Right mousebutton up WM_RBUTTONDBLCLK = 0x206, //Right mousebutton doubleclick WM_KEYDOWN = 0x100, //Key down WM_KEYUP = 0x101, //Key up WM_CHAR = 0x105, } ///summary&--#62; /// Virtual Mouse Event Flags /// &--#60;/summary&--#62; public enum MouseEventFlags : uint { LEFTDOWN = 0x00000002, LEFTUP = 0x00000004, MIDDLEDOWN = 0x00000020, MIDDLEUP = 0x00000040, MOVE = 0x00000001, ABSOLUTE = 0x00008000, RIGHTDOWN = 0x00000008, RIGHTUP = 0x00000010, WHEEL = 0x00000800, XDOWN = 0x00000080, XUP = 0x00000100 } #endregion } Endret 1. oktober 2012 av j0achim Lenke til kommentar
GeirGrusom Skrevet 1. oktober 2012 Del Skrevet 1. oktober 2012 Sjekk om det funker dersom du starter programmet ditt som administrator. Mener at man ikke kan poste meldinger til andre programmer på den måten uten videre etter Windows Vista, uten at jeg er 100% sikker. Lenke til kommentar
j0achim Skrevet 1. oktober 2012 Forfatter Del Skrevet 1. oktober 2012 (endret) Etter mer frem og tilbake, og se bedre på kode slik som i exempel jeg hadde oversatt la jeg merke til at jeg ikke hadde gjort noe for å få tak i child handles. Nå har jeg ikke oversatt koden som ble brukt for å få tak i riktig handle, men jeg benyttet meg av Spy++ og sendte PostMessage direkte til handle som benyttes av mspaint som draw area. Og jammen da fikk jeg resultater! Endret 1. oktober 2012 av j0achim Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå