0

別のアプリケーションの特定のテキスト ボックスで Enter キーが押されたときを知る必要があります。テキストボックスを見つけて、user32.dll を使用してそこからテキストを読み書きできます。しかし、どうすれば 1 つの特定のキーを取得できますか?

アプリケーションは単なるチャットです。目標は、このアプリケーションのテキスト ボックスに「/time」のようなものを入力して Enter キーを押すと、たとえば、アプリケーションでこのコマンドを読み取り、現在の時刻を出力することです。

これは、アプリケーションのハンドルとそのテキストフィールドの子を取得し、それを読み書きするために必要なコードです。

    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int uMsg, IntPtr wParam, string lParam);

    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int msg, int Param, System.Text.StringBuilder text);

    [DllImport("user32.dll")]
    private static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

    public delegate bool Win32Callback(IntPtr hwnd, IntPtr lParam);
    [DllImport("user32.Dll")]
    public static extern bool EnumChildWindows(IntPtr parentHandle, Win32Callback callback, IntPtr lParam);

    [DllImport("user32.dll")]
    static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);

    [DllImport("user32.dll")]
    public static extern IntPtr FindWindow(string strClassName, string strWindowName);

    private IntPtr handle = IntPtr.Zero;
    private string childClassName = "TComboEdit";

    public bool findChildHandle(IntPtr hwnd, IntPtr lParam)
    {
        StringBuilder className = new StringBuilder();
        GetClassName(hwnd, className, 120);
        if (className.ToString() == childClassName)
        {
            handle = hwnd;
            return false;
        }
        return true;
    }

    private void findControl(string className, string title)
    {
        IntPtr application = IntPtr.Zero;
        application = FindWindow(className, title);
        if (application == IntPtr.Zero)
            MessageBox.Show("Aplicativo não encontrado");
        else
            EnumChildWindows(application, findChildHandle, IntPtr.Zero);
    }

    private void setTextToHandle(string msg)
    {
        SendMessage(handle, 0x000c, IntPtr.Zero, msg); //set text
        PostMessage(handle, 0x0100, new IntPtr(0x0D), IntPtr.Zero); // key down (enter)
    }

    private void getTextFromHandle()
    {
        StringBuilder t = new StringBuilder();
        SendMessage(handle, 0x0D, 100, t); //get text
        MessageBox.Show(t.ToString());
    }
4

0 に答える 0