16c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org/* 26c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 36c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org * 46c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org * Use of this source code is governed by a BSD-style license 56c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org * that can be found in the LICENSE file in the root of the source 66c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org * tree. An additional intellectual property rights grant can be found 76c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org * in the file PATENTS. All contributing project authors may 86c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org * be found in the AUTHORS file in the root of the source tree. 96c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org */ 106c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 116c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_WIN_DESKTOP_H_ 126c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#define WEBRTC_MODULES_DESKTOP_CAPTURE_WIN_DESKTOP_H_ 136c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 140a9ed7c31eab2a2c73eb0020c8b278762ad58ea5mcasas@webrtc.org#include <windows.h> 15774b3d38a4a0f1a8ec08972a3c543cb5d607ce13henrike@webrtc.org#include <string> 166c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 17774b3d38a4a0f1a8ec08972a3c543cb5d607ce13henrike@webrtc.org#include "webrtc/base/constructormagic.h" 186c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#include "webrtc/system_wrappers/interface/scoped_ptr.h" 196c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 206c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.orgnamespace webrtc { 216c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 226c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.orgclass Desktop { 236c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org public: 246c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org ~Desktop(); 256c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 266c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // Returns the name of the desktop represented by the object. Return false if 276c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // quering the name failed for any reason. 286c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org bool GetName(std::wstring* desktop_name_out) const; 296c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 306c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // Returns true if |other| has the same name as this desktop. Returns false 316c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // in any other case including failing Win32 APIs and uninitialized desktop 326c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // handles. 336c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org bool IsSame(const Desktop& other) const; 346c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 356c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // Assigns the desktop to the current thread. Returns false is the operation 366c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // failed for any reason. 376c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org bool SetThreadDesktop() const; 386c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 396c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // Returns the desktop by its name or NULL if an error occurs. 406c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org static Desktop* GetDesktop(const wchar_t* desktop_name); 416c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 426c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // Returns the desktop currently receiving user input or NULL if an error 436c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // occurs. 446c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org static Desktop* GetInputDesktop(); 456c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 466c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // Returns the desktop currently assigned to the calling thread or NULL if 476c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // an error occurs. 486c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org static Desktop* GetThreadDesktop(); 496c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 506c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org private: 516c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org Desktop(HDESK desktop, bool own); 526c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 536c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // The desktop handle. 546c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org HDESK desktop_; 556c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 566c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // True if |desktop_| must be closed on teardown. 576c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org bool own_; 586c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 596c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org DISALLOW_COPY_AND_ASSIGN(Desktop); 606c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org}; 616c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 626c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org} // namespace webrtc 636c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 646c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#endif // WEBRTC_MODULES_DESKTOP_CAPTURE_WIN_DESKTOP_H_ 65