簡體   English   中英

獲取上一個活動窗口:獲取以前活動的窗口

[英]Get last active window: Get Previously active window

我正在開發一個需要獲取最后一個活動窗口句柄的應用程序。 假設我的應用程序正在運行,那么我想獲取之前剛剛在我的應用程序之前打開的最后一個活動窗口句柄。

@ EDIT1:這不是重復的問題。 我需要獲取最后一個活動窗口的句柄而不是當前窗口。

這類似於備用SO問題 ,我假設您只是跟蹤活動窗口,然后在更改時您將知道之前的活動窗口

編輯,這基本上是從我鏈接的問題中復制的代碼,該問題是尋找當前活動窗口但是有邏輯來持久化lastHandle並確定何時有新的lastHandle。 它不是經過驗證的,可編譯的實現:

[DllImport("user32.dll")]
  static extern IntPtr GetForegroundWindow();

static IntPtr lastHandle = IntPtr.Zero;

//This will be called by your logic on when to check, I'm assuming you are using a Timer or similar technique.
IntPtr GetLastActive()
{
  IntPtr curHandle = GetForeGroundWindow();
  IntPtr retHandle = IntPtr.Zero;

  if(curHandle != lastHandle)
  {
    //Keep previous for our check
    retHandle = lastHandle;

    //Always set last 
    lastHandle = curHandle;

    if(retHandle != IntPtr.Zero)
      return retHandle;
  }
}

我需要從我打開的上一個窗口的最后一個句柄中獲得相同的內容。 Jamie Altizer的答案很接近,但我修改它以避免在我的應用程序再次獲得焦點時覆蓋之前的窗口。 這是我用計時器和所有東西制作的完整課程。

static class ProcessWatcher
{
    public static void StartWatch()
    {
        _timer = new Timer(100);
        _timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
        _timer.Start();
    }

    static void timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        setLastActive();
    }

    [DllImport("user32.dll")]
    static extern IntPtr GetForegroundWindow();

    public static IntPtr LastHandle
    {
        get
        {
            return _previousToLastHandle;
        }
    }

    private static void setLastActive()
    {
        IntPtr currentHandle = GetForegroundWindow();
        if (currentHandle != _previousHandle)
        {
            _previousToLastHandle = _previousHandle;
            _previousHandle = currentHandle;
        }
    }

    private static Timer _timer;
    private static IntPtr _previousHandle = IntPtr.Zero;
    private static IntPtr _previousToLastHandle = IntPtr.Zero;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM