Home | History | Annotate | Download | only in win
      1 /*
      2  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_WIN_DESKTOP_H_
     12 #define WEBRTC_MODULES_DESKTOP_CAPTURE_WIN_DESKTOP_H_
     13 
     14 #include <windows.h>
     15 #include <string>
     16 
     17 #include "webrtc/base/constructormagic.h"
     18 #include "webrtc/system_wrappers/interface/scoped_ptr.h"
     19 
     20 namespace webrtc {
     21 
     22 class Desktop {
     23  public:
     24   ~Desktop();
     25 
     26   // Returns the name of the desktop represented by the object. Return false if
     27   // quering the name failed for any reason.
     28   bool GetName(std::wstring* desktop_name_out) const;
     29 
     30   // Returns true if |other| has the same name as this desktop. Returns false
     31   // in any other case including failing Win32 APIs and uninitialized desktop
     32   // handles.
     33   bool IsSame(const Desktop& other) const;
     34 
     35   // Assigns the desktop to the current thread. Returns false is the operation
     36   // failed for any reason.
     37   bool SetThreadDesktop() const;
     38 
     39   // Returns the desktop by its name or NULL if an error occurs.
     40   static Desktop* GetDesktop(const wchar_t* desktop_name);
     41 
     42   // Returns the desktop currently receiving user input or NULL if an error
     43   // occurs.
     44   static Desktop* GetInputDesktop();
     45 
     46   // Returns the desktop currently assigned to the calling thread or NULL if
     47   // an error occurs.
     48   static Desktop* GetThreadDesktop();
     49 
     50  private:
     51   Desktop(HDESK desktop, bool own);
     52 
     53   // The desktop handle.
     54   HDESK desktop_;
     55 
     56   // True if |desktop_| must be closed on teardown.
     57   bool own_;
     58 
     59   DISALLOW_COPY_AND_ASSIGN(Desktop);
     60 };
     61 
     62 }  // namespace webrtc
     63 
     64 #endif  // WEBRTC_MODULES_DESKTOP_CAPTURE_WIN_DESKTOP_H_
     65