Выбрать флажки в списке через user32.dll?(С #) - PullRequest
0 голосов
/ 07 октября 2018

У меня есть дескриптор для ListBox из внешнего приложения.

Теперь у меня есть Listbox с x пунктами, которые я хочу выбрать с помощью WinApi.

Я пробовал это с SETCURSEL, нок сожалению, не работает:

private void button2_Click(object sender, EventArgs e)
{
    IntPtr chldWnd = NativeMethods.FindWindow("#32770", "Ansichten einfügen");
    IntPtr ListBoxHandle = NativeMethods.FindWindowEx(chldWnd, IntPtr.Zero, "ListBox", null);
    //MessageBox.Show(ButtonHandle.ToString());
    NativeMethods.SendMessageInt(ListBoxHandle, NativeMethods.CB_SETCURSEL, 1, 2);
}

static class NativeMethods
{
    public const int BM_CLICK = 0x00F5;
    public const int WM_SETTEXT = 0x000C;
    public const int VK_DOWN = 0x28;
    public const int WM_KEYDOWN = 0x100;
    public const int LB_SETSEL = 0x0185;
    public const int CB_SETCURSEL = 0x014E;

    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    public static extern IntPtr SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, string lParam);
    [DllImport("user32.dll", EntryPoint="PostMessage" ,CharSet = CharSet.Unicode)]
    public static extern IntPtr SendMessageInt(IntPtr hWnd, uint Msg, int wParam, int lParam);

    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    public static extern IntPtr PostMessage(IntPtr hwnd, int wsg, IntPtr wParam, String lParam);

    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);

    [DllImport("user32.dll", SetLastError = true)]
    public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);        
}   
...