0

私は持っている

        [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
    public static extern IntPtr SetWindowPos(string hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);

私の問題は、ラベル内のテキストに基づいて特定のウィンドウを移動できるようにしたいということです。

        private void button1_Click(object sender, EventArgs e)
    {
        const short SWP_NOSIZE = 1;
        const short SWP_NOZORDER = 0X4;
        const int SWP_SHOWWINDOW = 0x0040;

        Process[] processes = Process.GetProcesses();


        foreach (var process in processes)
        {
            IntPtr handle = process.MainWindowHandle;
            string Text = handle.ToString();

            if (handle.ToString() == WindowTextBox.Text)
            {
                SetWindowPos(Text, 0, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW);
            }
        }
    }

これが機能しないことはわかっていましたが、とにかく試してみたかったのですが、WindowTextBox の内容に基づいてウィンドウを移動するにはどうすればよいでしょうか? (SetWindowPos(IntPtr hWnd, [...]) に IntPtr ハ​​ンドルがあり、変更するだけです

SetWindowPos(Text, 0, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW);

SetWindowPos(handle, 0, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW);

どちらも機能しません。)何か提案はありますか?

4

1 に答える 1

0

理解した。使った

[DllImport("user32.dll")]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

行を次のように変更します

IntPtr handle = FindWindow(null, WindowTextBox.Text);

そしてもしそうなら

if (handle != IntPtr.Zero)

それは私が望むように機能します。

于 2012-09-10T00:51:40.683 に答える