1
Приведенный ниже код выполняет следующиеUSER32.dll SetFocus завершается с ошибкой Win32 5: отказано в доступе
PushWindowToFront():
- получает текущий идентификатор процесса для справки позже
- звонки user32. функция длл EnumWindows с обратным вызовом EnumWindowsCallback метод
- EnumWindows затем перебирает каждого окна и вызывает функцию обратного вызова для каждого
Callback:
- Проверьте процесс резьбы окна идентификатор совпадает с текущей идентификатор процесса
- если да, то проверьте, если текст окна начинается «Выберите»
- если да, то звоните user32.dll функционировать SetFocus на оконной ручке
- проверка & печати ошибка последнего win32
Однако он всегда возвращает ошибку win32 5 - «Доступ запрещен». Почему приложение не имеет доступа к вызову этой функции для окна, принадлежащего к тому же процессу?
.
public void PushWindowToFront()
{
currentProcessId = System.Diagnostics.Process.GetCurrentProcess().Id;
Win32Methods.EnumWindowsCallbackDelegate callback = new Win32Methods.EnumWindowsCallbackDelegate(this.EnumWindowsCallback);
Win32Methods.EnumWindows(callback, (IntPtr) 0);
}
public bool EnumWindowsCallback(IntPtr hWnd, IntPtr lParam)
{
uint i = 0;
Win32Methods.GetWindowThreadProcessId(hWnd, out i);
if (currentProcessId == i)
{
StringBuilder sb = new StringBuilder(512);
Win32Methods.GetWindowText(hWnd, sb, sb.Capacity);
if (sb.ToString().Split(' ')[0].ToLower().Equals("select"))
{
IntPtr result = Win32Methods.SetFocus(hWnd);
Console.WriteLine("Window found: {0}\r\nSetting focus...\r\nResult: {1}\r\nLastError: {2}",
sb.ToString(), result, Marshal.GetLastWin32Error().ToString());
}
}
return true;
}
Какова ценность 'результата'? –
Значение @David результата равно 0 – Richard
Поток имеет значение, а окно принадлежит потоку, который его создал. –