MSPaint에서 임의의 그림을 그려야하는 콘솔 응용 프로그램이 있습니다 (마우스를 아래로 - 커서로 무작위로 무언가를 페인트하게하십시오 -> 마우스를 사용하십시오.). 내가 무엇을 달성하고자하는 더 나은 이해를위한 Main
방법) :MSPaint에서 마우스 클릭 시뮬레이션
[DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(long dwFlags, uint dx, uint dy, long cButtons, long dwExtraInfo);
private const int MOUSEEVENTF_LEFTDOWN = 0x201;
private const int MOUSEEVENTF_LEFTUP = 0x202;
private const uint MK_LBUTTON = 0x0001;
public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr parameter);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true)]
public static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam);
static IntPtr childWindow;
private static bool EnumWindow(IntPtr handle, IntPtr pointer)
{
childWindow = handle;
return false;
}
public static void Main(string[] args)
{
OpenPaint(); // Method that opens MSPaint
IntPtr hwndMain = FindWindow("mspaint", null);
IntPtr hwndView = FindWindowEx(hwndMain, IntPtr.Zero, "MSPaintView", null);
// Getting the child windows of MSPaintView because it seems that the class name of the child isn't constant
EnumChildWindows(hwndView, new EnumWindowsProc(EnumWindow), IntPtr.Zero);
Random random = new Random();
Thread.Sleep(500);
// Simulate a left click without releasing it
SendMessage(childWindow, MOUSEEVENTF_LEFTDOWN, new IntPtr(MK_LBUTTON), CreateLParam(random.Next(10, 930), random.Next(150, 880)));
for (int counter = 0; counter < 50; counter++)
{
// Change the cursor position to a random point in the paint area
Cursor.Position = new Point(random.Next(10, 930), random.Next(150, 880));
Thread.Sleep(100);
}
// Release the left click
SendMessage(childWindow, MOUSEEVENTF_LEFTUP, new IntPtr(MK_LBUTTON), CreateLParam(random.Next(10, 930), random.Next(150, 880)));
}
나는 here에서 클릭 시뮬레이션이 코드를 가지고
를 클릭이 시뮬레이션됩니다하지만 아무것도 페인트하지 않습니다 그것은 것으로 보인다.. MSPaint 내에서 클릭이 작동하지 않습니다. 커서가 MSPaint의 "십자가"로 바뀌지 만 언급 한대로 ... 클릭하지 않습니다 ' 작동하지 않는 것 같습니다.
FindWindow
은 hwndMain
의 값을 0으로 설정합니다. mspaint
을 MSPaintApp
으로 변경해도 아무 것도 변경되지 않습니다. hwndMain
의 값은 도움이된다면 여기에, 0
을 유지 내 OpenPaint()
방법 :
private static void OpenPaint()
{
Process.process = new Process();
process.StartInfo.FileName = "mspaint.exe";
process.StartInfo.WindowStyle = "ProcessWindowStyle.Maximized;
process.Start();
}
내가 잘못 뭐하는 거지?
1 단계 : 그림판 이외의 다른 응용 프로그램에서 더 잘 작동하는지보고 한 다음보고하십시오! – TaW
안녕하세요! 나는이 질문을 좋아하고 그것에 대해 궁금해합니다. 이미 답변을 찾았습니까? 아니면 아직도 열려 있습니까? 아직 답을 찾지 못했다면, 오늘 저녁에 직접 해보겠습니다. – TripleEEE
@ TripleEEE 아직 답변을 찾지 못했습니다. 내가 기분이 좋지 않기 때문에 나는 확인할 수 없다. –