[C#]Ứng dụng C# Winform đơn giản send key đến cửa sổ đang mở

NhanSu

SMod
Thành viên BQT
Chào các bạn. Dạo này box này đang hot. Mình xin góp vui bằng ứng dụng send key đơn giản viết bằng C#. Do khả năng và thời gian có hạn nên chương trình còn thiếu tính năng như bẫy lỗi, tìm cửa sổ theo title (chương trình đang tìm bằng class name), hiển thị title của các cửa sổ để dễ chọn lựa. Các bạn nhập class name vào textbox, bấm Find windows, các cửa sổ tìm được sẽ được load vào combobox, chọn 1 cửa sổ, nhập keys rồi bấm Send.
C#:
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace SendKeyToAnotheApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        [DllImport("user32.dll")]
        public static extern int SetForegroundWindow(IntPtr point);
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
        [DllImport("user32")]
        public static extern int UpdateWindow(IntPtr hwnd);

        private void btnSend_Click(object sender, EventArgs e)
        {
            IntPtr hWnd = (IntPtr)Int64.Parse(comboBox1.Text);
            TopMost = true;
            ShowWindow(hWnd, 9);
            SetForegroundWindow(hWnd);
            SendKeys.Send(txtStringToBeSend.Text);
            TopMost = false;
            UpdateWindow(hWnd);
        }

        private void btnFind_Click(object sender, EventArgs e)
        {
            comboBox1.Items.Clear();
            foreach (Process p in Process.GetProcessesByName(txtName.Text)){
                comboBox1.Items.Add(p.MainWindowHandle);
            }
            comboBox1.Text = comboBox1.Items[0].ToString();

        }
    }
}
Bạn cần đăng nhập để thấy đính kèm


 
Sửa lần cuối:

tuhocvba

Administrator
Thành viên BQT
Ứng dụng này rất hay . Dùng để check handle khi viết code . Rất hay và tiện lợi . Topic như thế này đòi hỏi level các bạn phải cao hơn một xíu so với VBA .
 

NhanSu

SMod
Thành viên BQT
Để check handle thì dùng Spy++ cho nhanh. Sendkeys gửi phím bấm đến cửa sổ đang active nên cần dùng API SetForegroundWindow để activate nhưng khi cửa sổ đang thu nhỏ trên taskbar thì SetForegroundWindow không tác dụng, do vậy mình gọi thêm ShowWindow. Đặt thuộc tính topmost của cửa sổ để tránh notepad che khuất chương trình.
 

tuhocvba

Administrator
Thành viên BQT
Smod cho một bài về spy++ nhé . Cái này mình cũng không biết này .
 

NhanSu

SMod
Thành viên BQT
Mình chỉ dùng Find window của Spy++ thôi. Đây là ứng dụng đi kèm VS, vào menu Tools trong VS để chạy Spy++. Bấm Alt-F3 để sử dụng Find window, kéo hình tròn nhỏ Finder tool rồi thả vào cửa sổ cần tìm, ở đây mình thả vào Notepad, handle sẽ hiện ra 001308BE, chuyển sang cơ số 10 là 1247422, phù hợp với chuơng trình Sendkeys.
Bạn cần đăng nhập để thấy đính kèm
 

tuhocvba

Administrator
Thành viên BQT
Mình thấy rồi . Hay ghê . Gặp được người có kinh nghiệm đỡ bao thời gian tìm hiểu . Hih
 
Top