在C#窗口中设置WinSpy ++ Control ID

时间:2015-06-11 16:14:56

标签: c#

我有一个带有TextBox和其他组件的C#程序。当我用WinSpy ++检查TextBox(或其他)组件时,我得到一个我在C#源代码中找不到的Control ID。例如 - 参见屏幕截图:当我检查带有数字5的TextBox字段时,WinSpy ++检测到控制ID 000209AA。

C# test program

WinSpy TextBox detection

如何识别WinSpy控件ID?是否有可能在C#源代码中设置控件ID?

干杯, Achim的

1 个答案:

答案 0 :(得分:0)

来自user32.dll的

GetDlgCtrlID将提供给定窗口句柄的控件ID(即Control.Handle)。非常简单的形式来证明:

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

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        [DllImport("user32.dll")]
        static extern int GetDlgCtrlID(IntPtr hwnd);

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            MessageBox.Show("Control ID: " + GetDlgCtrlID(textBox1.Handle));
        }
    }
}

我不确定是否有任何方法设置控件ID - 我怀疑控件ID是由Windows窗体在表单构造中以某种方式自动设置的。但是能够检索它应该足以满足大多数应用程序(例如,直接使用Windows API中的PostMessage / SendMessage。)