Я использую 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" с правильными аргументами, но у него та же ошибка