Информация о процессе в WPF / C # неверна. То же решение работает в Win Forms / C #

1

Хорошо, поэтому я хочу присоединить процесс с помощью С#. Я использовал класс "System.Diagnostic". Итак, что я на самом деле делаю:

//DEFINITIONS
Process[] nameOfProcess;
IntPtr ptrToProcessWindow;
Process getProcess;
//DEFINITIONS

//INVOKE
'[DllImport("user32.dll")]'

 'public static extern bool GetWindowRect(IntPtr hwnd, ref Rect rectangle);'
 //INVOKE

//USING CODE

getProcess = nameOfProcess[0];
ptrToProcessWindow = getProcess.MainWindowHandle;
GetWindowRect(ptrToProcessWindow, ref windowRect);
//USING CODE

Итак, windowRect:

Rect windowRect = new Rect();

windowRect имеют информацию о приложении, например:

Изображение 174551

Но результатом отладки является следующее:

Изображение 174551

Очевидно, что я получаю неправильные значения от процесса. Я уже проверил, найден ли процесс, я также проверил, правильно ли "ptrToWindow" (и это).

Я просто ptrToProcessWindow и windowRect для функции GetWindowRect(,) <--- LOOK AT//ИСПОЛЬЗОВАНИЕ КОДА //

PS Я использую точно такой же метод в С# Win Forms, и он отлично работает.

  • 0
    И еще, если кому-то интересно, что такое nameOfProcess [] -> Process [] nameOfProcess nameOfProcess = Process.GetProcessesByName (processName);
  • 0
    Вы уже смотрели на этот ответ? stackoverflow.com/questions/5098994/...
Теги:
wpf
window
process
size

1 ответ

2
Лучший ответ

Снимок экрана вашего отладчика показывает значения с плавающей запятой. Это не может быть правильно, родная структура RECT Windows использует только целочисленные члены. Таким образом, очевидная догадка заключается в том, что вы использовали тип WPF Rect в своем объявлении pinvoke. Это резкое несоответствие с RECT, ожидается мусор.

Вам придется объявить о себе:

private struct RECT {
    public int Left, Top, Right, Bottom;
}

И исправьте свою декларацию [DllImport], чтобы вместо этого использовать RECT.

Fwiw, структура System.Drawing.Rectangle тоже не соответствует, она использует ширину и высоту вместо правого и нижнего. Он выглядит лучше в отладчике, меньше мусора.

  • 0
    Это верно. Исправлена. Я бы проголосовал, но я только что присоединился. Что вы подразумеваете под «использовать вместо RECT»?
  • 1
    Вы должны исправить свое объявление для GetWindowRect. Измените «Rect» на «RECT».
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню