Audes
@Audes

Не работает FindWindow?

По идее должно работать, т.к. null (nil) означает, получение всех окон, если не знаю класса.
public static void SelectWindow(string title)
        {
            IntPtr ptr = FindWindow(null, title);
            SetFocus(ptr);
        }

Сама суть в том, что мне нужно передать фокус какому-либо окну.
  • Вопрос задан
  • 3487 просмотров
Пригласить эксперта
Ответы на вопрос 2
AlekseyNemiro
@AlekseyNemiro
full-stack developer
У меня работает:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace ConsoleApplication13
{
  class Program
  {
    [DllImportAttribute("User32.dll")]
    private static extern int FindWindow(String ClassName, String WindowName);

    [DllImportAttribute("User32.dll")]
    private static extern IntPtr SetForegroundWindow(int hWnd);

    static void Main(string[] args)
    {
      int hWnd = FindWindow(null, "Калькулятор");
      Console.WriteLine(hWnd);
      if (hWnd > 0)
      {
        Console.WriteLine("К счастью, окно найдено...");
        SetForegroundWindow(hWnd); 
      }
      else
      {
        Console.WriteLine("Окно не найдено!");
      }
      Console.ReadKey();
    }
  }
}

С использованием класса Process, этот код должен активировать все открытые калькуляторы:
static void Main(string[] args)
{
  foreach (var p in Process.GetProcessesByName("calc"))
  {
    SetForegroundWindow(p.MainWindowHandle.ToInt32()); 
  }

  Console.ReadKey();
}
Ответ написан
@vilgeforce
Раздолбай и программист
А что именно не работает? Handle невалидный? Хэндл валидный но не устанавливается фокус?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы