๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ‘จ๐Ÿผ‍๐Ÿ’ป๊ฐœ๋ฐœ/C#

C# - ๋‹ค๋ฅธ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ์ œ์–ดํ•ด ๋ณด์ž. feat.SPY++

by Janger 2022. 8. 24.
728x90
๋ฐ˜์‘ํ˜•


๊ฐ„ํ˜น ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ์™ธ๋ถ€ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ์—ฐ๊ณ„ํ•˜๊ฑฐ๋‚˜ ์ œ์–ดํ•ด์•ผํ•  ์ผ์ด ์žˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋ณธ์ธ์ด ๋งŒ๋“ (์†Œ์Šค๊ฐ€ ์žˆ๋Š”) ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด ์†์‰ฝ๊ฒ ์ง€๋งŒ ์•„๋‹Œ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด๋‹ค.

๊ทธ๋Ÿด๋•Œ๋Š” Window Message๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ชจ๋“  ์œˆ๋„์šฐ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์€ ์œˆ๋„์šฐ์ฆˆ ์•ˆ์—์„œ ๋™์ž‘ํ•˜๊ธฐ๋•Œ๋ฌธ์— ๊ณตํ†ต๋œ ๋ฉ”์‹œ์ง€๋ฅผ ์ด์šฉํ•˜์—ฌ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.


์˜ˆ์ œ

๋‹ค์Œ์€ ๊ณ„์‚ฐ๊ธฐ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์˜ ํ•ธ๋“ค์„ ์ฐพ์•„์„œ ํ•ด๋‹น ํ•ธ๋“ค์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ์˜ˆ์ œ์ด๋‹ค.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Runtime.InteropServices;


namespace WindowsApplication1
{

    public partial class Form1 : Form
    {
        //์‚ฌ์šฉํ•  APIํ•จ์ˆ˜๋ฅผ ์ž„ํฌํŠธ ํ•œ๋‹ค.
        [DllImport("USER32.DLL")]
        public static extern uint FindWindow(string lpClassName,
            string lpWindowName);

        [DllImport("user32.dll")]
        public static extern uint FindWindowEx(uint hWnd1, uint hWnd2, string lpsz1, string lpsz2);

        [DllImport("user32.dll")]
        public static extern uint SendMessage(uint hwnd, uint wMsg, uint wParam, uint lParam);

        [DllImport("user32.dll")]
        public static extern uint PostMessage(uint hwnd, uint wMsg, uint wParam, uint lParam);

        uint handle;


        private void button3_Click(object sender, EventArgs e)
        {
           //ํ•ธ๋“ค์„ ์ฐพ๋Š”๋‹ค. Spy+๋ฅผ ํ†ตํ•ด ์ฐพ์€ ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ์บก์…˜์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์•Œ๊ฒฝ์šฐ์—๋„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋•Œ๋Š” ํ•˜๋‚˜์˜ ์ธ์ž๋ฅผ null๋กœ ๋„˜๊ฒจ ์ฃผ๋ฉด๋œ๋‹ค.
            handle = FindWindow("SciCalc", "๊ณ„์‚ฐ๊ธฐ");
          //์ฐพ์€ ํ•ธ๋“ค์—์„œ ์ž์‹ ์œˆ๋„์šฐ ํ•ธ๋“ค์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” FindWindowEx๋ฅผ ์ด์šฉํ•œ๋‹ค.
            handle = FindWindowEx(handle, 0, "Shell DocObject View", null);
            handle = FindWindowEx(handle, 0, "Internet Explorer_Server", null);
            label1.Text = handle.ToString();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //์ฐพ์€ ํ•ธ๋“ค์„ ํ†ตํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์•„๋ž˜ 16์ง„์ˆ˜๋“ค ์˜ ๊ฐ’์€ ์ŠคํŒŒ์ด ๋ฉ”์„ธ์ง€ ๋กœ๊ทธ์—์„œ ์ฐพ์€ ๊ฐ’์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ํ‚ค๋ฅผ ๋ˆ„๋ฅธ ๋ฉ”์„ธ์ง€(ํƒญํ‚ค๋ˆ„๋ฅธํ›„ ์—”ํ„ฐํ‚ค๋ฅผ ๋ˆ„๋ฅธ๋‹ค.)๋ฅผ ๋ณด๋‚ด๋Š” ์˜ˆ์ œ ์ด๋‹ค.
            PostMessage(handle, 0x0100, 0x9, 0xF0001);
            PostMessage(handle, 0x0101, 0x9, 0xC00F0001);
            PostMessage(handle, 0x0100, 0xD, 0x1C001);
            PostMessage(handle, 0x0102, 0xD, 0xC01C001);
           
        }
}


์ถœ์ฒ˜:
https://kimkitty.net/archives/2276

 

Kim Kitty's Blog

๊น€ํ‚คํ‹ฐ์˜ ์•„์ˆ˜๋ผ์žฅ - C#,PC๊ฒŒ์ž„,์ด์Šˆ,ํŠธ๋ Œ๋“œ

kimkitty.net

 

 

์š”์•ฝ ์ •๋ฆฌ
using System.Runtime.InteropServices;

		private void button1_Click(object sender, EventArgs e)
        {
            //ํ•ธ๋“ค์„ ์ฐพ๋Š”๋‹ค. Spy+๋ฅผ ํ†ตํ•ด ์ฐพ์€ ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ์บก์…˜์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์•Œ๊ฒฝ์šฐ์—๋„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋•Œ๋Š” ํ•˜๋‚˜์˜ ์ธ์ž๋ฅผ null๋กœ ๋„˜๊ฒจ ์ฃผ๋ฉด๋œ๋‹ค.
            handle = FindWindow(null, "Form1");
            handle = FindWindowEx(handle, 0, "WindowsForms10.BUTTON.app.0.141b42a_r7_ad1", null);
            label1.Text = Convert.ToString(handle, 16);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Console.WriteLine("Handle Event: " + handle.ToString());
                const uint BM_CLICK = 0x00F5;

                PostMessage(h, BM_CLICK, 0, 0);
        }

Spy++์—์„œ ์›ํ•˜๋Š” ์œˆ๋„์šฐ์˜ ์ฐฝ์„ ์žก์€ ํ›„์— ์บก์…˜(์œˆ๋„์šฐ ํƒ€์ดํ‹€ ์˜ˆ๋กœ "Form1")๋‚˜ ์ฐฝ์˜ ํด๋ž˜์Šค(WindowsForms10.BUTTON...)์œผ๋กœ ์žก์•„์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. 

 

 

2022-08-28 ์ˆ˜์ •

const uint WM_KEYDOWN = 0x100;
const uint WM_KEYUP = 0x101;
const uint WM_CHAR = 0x102;

PostMessage(handle, WM_KEYDOWN, (int)Keys.Enter, 0);
PostMessage(handle, WM_KEYUP, (int)Keys.Enter, 0);

์œ„๋ฅผ ์•„๋ž˜๋กœ

const uint BM_CLICK = 0x00F5;

PostMessage(h, BM_CLICK, 0, 0);

https://stackoverflow.com/questions/4665463/button-click-in-sendmessage-api

 

Button click in sendmessage API

How can I simulate a button click in the sendmessage API in C#?

stackoverflow.com

 

 

 

 

ํด๋ž˜์Šค๋กœ ์ฐพ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์บก์…˜(ํ…์ŠคํŠธ)์œผ๋กœ ์ฐพ๊ธฐ

์ด๋Ÿฐ์‹์œผ๋กœ "ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘", "ํ”„๋กœ๊ทธ๋žจ ์žฌ๊ฐœ", "ํ”„๋กœ๊ทธ๋žจ ์ •์ง€" ๋ฒ„ํŠผ์˜ ํ…์ŠคํŠธ(์บก์…˜)๋ฅผ ์ธ์‹ํ•ด์„œ ๋ฒ„ํŠผ์„ ์ฐพ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

 

FindWindowEx(handle, 0, null, "ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘");
FindWindowEx(handle, 0, null, "ํ”„๋กœ๊ทธ๋žจ ์žฌ๊ฐœ");
FindWindowEx(handle, 0, null, "ํ”„๋กœ๊ทธ๋žจ ์ •์ง€");

์ด๋Ÿฐ์‹์œผ๋กœ ํด๋ž˜์Šค ์ธ์ž๋Š” null์„ ๊ฑด๋„ค์ฃผ๊ณ  4๋ฒˆ์งธ ์ธ์ž๋กœ ์บก์…˜์„ ๊ฑด๋„ค์ค€๋‹ค. 

 

โ€ป ์ฃผ์˜

๋จผ์ € ๋ฒ„ํŠผ๋“ค์˜ ๋ถ€๋ชจ ํ•ธ๋“ค๋กœ ์ฐพ์•„์ฃผ์–ด์•ผ ํ•œ๋‹ค. spyxx๋กœ ๋ถ€๋ชจ ์š”์†Œ๋ฅผ ์ž˜ ์ฐพ์•„์ฃผ๋ฉด ๋œ๋‹ค. 

728x90
๋ฐ˜์‘ํ˜•