Вызвать TabTip с .NetCore3.1 в WPF - PullRequest
0 голосов
/ 31 марта 2020

Я использую win10 1909, Visual Studio 2019 16.04, WPF с .netcore3.1, тип вывода приложения - windows application. Я столкнулся с проблемой, которая застряла у меня на целый день. Проблема в том, что я не могу использовать System.Diagnostics.Process.Start() для вызова TabTip.exe или osk.exe.

Я знаю, что есть много подобных вопросов по этому поводу, но ни один из них не касается .NetCore Framework. Когда я использую этот код, появляется сообщение об ошибке, указывающее, что мне нужны более высокие полномочия, но я открыл или запустил все как ADMIN.

Я также пытался изменить app.manifest с помощью ClickOnce, но SECURITY не существует вкладка на странице свойств проекта.

Пожалуйста, дайте мне несколько советов, спасибо. (клавиатура .NetCore, мой код отлично работает в. Net Framework)

 public class ScreenKeyBoard
{
    private const uint SWP_NOSIZE = 0x0001;
    private const uint SWP_NOMOVE = 0x0002;
    private const uint SWP_NOZORDER = 0x0004;
    private const uint SWP_NOREDRAW = 0x0008;
    private const uint SWP_NOACTIVATE = 0x0010;
    private const uint SWP_FRAMECHANGED = 0x0020;
    private const uint SWP_SHOWWINDOW = 0x0040;
    private const uint SWP_HIDEWINDOW = 0x0080;
    private const uint SWP_NOCOPYBITS = 0x0100;
    private const uint SWP_NOOWNERZORDER = 0x0200;
    private const uint SWP_NOSENDCHANGING = 0x0400;

    [DllImport("user32.dll")]
    static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X,
        int Y, int cx, int cy, uint uFlags);
    [DllImport("user32.dll")]
    static extern bool SetForegroundWindow(IntPtr hWnd);

    public  void ShowScreenKeyBoard()
    {
        if (System.IO.File.Exists(Environment.SystemDirectory +"\\osk.exe"))
        {
            Process process = new Process();
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.RedirectStandardInput = true;
            process.StartInfo.RedirectStandardError = true;
            process.StartInfo.FileName = "osk.exe";
            process.StartInfo.Arguments = "";
            process.Start();
            process.WaitForInputIdle();
            System.Windows.Interop.WindowInteropHelper winHelper = new WindowInteropHelper(Application.Current.MainWindow);
            IntPtr mainWindowHandle = winHelper.Handle;
            SetWindowPos(process.MainWindowHandle,
                mainWindowHandle,
                0,
                0,
                600,
                200,
                SWP_SHOWWINDOW | SWP_NOZORDER);
            SetForegroundWindow(process.MainWindowHandle);
        }
    }

    public void CloseScreenKeyBoard()
    {
        if (File.Exists(Environment.SystemDirectory+"\\osk.exe"))
        {
            Process process = new Process();
            process.Close();
        }
    }
}

это для "osk.exe", я попытался "TabTip.exe" с правильными аргументами, но у него та же ошибка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...