Home | History | Annotate | Download | only in win
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // =============================================================================
      6 // PLEASE READ
      7 //
      8 // In general, you should not be adding stuff to this file.
      9 //
     10 // - If your thing is only used in one place, just put it in a reasonable
     11 //   location in or near that one place. It's nice you want people to be able
     12 //   to re-use your function, but realistically, if it hasn't been necessary
     13 //   before after so many years of development, it's probably not going to be
     14 //   used in other places in the future unless you know of them now.
     15 //
     16 // - If your thing is used by multiple callers and is UI-related, it should
     17 //   probably be in app/win/ instead. Try to put it in the most specific file
     18 //   possible (avoiding the *_util files when practical).
     19 //
     20 // =============================================================================
     21 
     22 #ifndef BASE_WIN_WIN_UTIL_H_
     23 #define BASE_WIN_WIN_UTIL_H_
     24 
     25 #include <windows.h>
     26 
     27 #include <string>
     28 
     29 #include "base/base_export.h"
     30 #include "base/strings/string16.h"
     31 
     32 struct IPropertyStore;
     33 struct _tagpropertykey;
     34 typedef _tagpropertykey PROPERTYKEY;
     35 
     36 namespace base {
     37 namespace win {
     38 
     39 BASE_EXPORT void GetNonClientMetrics(NONCLIENTMETRICS* metrics);
     40 
     41 // Returns the string representing the current user sid.
     42 BASE_EXPORT bool GetUserSidString(std::wstring* user_sid);
     43 
     44 // Returns true if the shift key is currently pressed.
     45 BASE_EXPORT bool IsShiftPressed();
     46 
     47 // Returns true if the ctrl key is currently pressed.
     48 BASE_EXPORT bool IsCtrlPressed();
     49 
     50 // Returns true if the alt key is currently pressed.
     51 BASE_EXPORT bool IsAltPressed();
     52 
     53 // Returns false if user account control (UAC) has been disabled with the
     54 // EnableLUA registry flag. Returns true if user account control is enabled.
     55 // NOTE: The EnableLUA registry flag, which is ignored on Windows XP
     56 // machines, might still exist and be set to 0 (UAC disabled), in which case
     57 // this function will return false. You should therefore check this flag only
     58 // if the OS is Vista or later.
     59 BASE_EXPORT bool UserAccountControlIsEnabled();
     60 
     61 // Sets the boolean value for a given key in given IPropertyStore.
     62 BASE_EXPORT bool SetBooleanValueForPropertyStore(
     63     IPropertyStore* property_store,
     64     const PROPERTYKEY& property_key,
     65     bool property_bool_value);
     66 
     67 // Sets the string value for a given key in given IPropertyStore.
     68 BASE_EXPORT bool SetStringValueForPropertyStore(
     69     IPropertyStore* property_store,
     70     const PROPERTYKEY& property_key,
     71     const wchar_t* property_string_value);
     72 
     73 // Sets the application id in given IPropertyStore. The function is intended
     74 // for tagging application/chromium shortcut, browser window and jump list for
     75 // Win7.
     76 BASE_EXPORT bool SetAppIdForPropertyStore(IPropertyStore* property_store,
     77                                           const wchar_t* app_id);
     78 
     79 // Adds the specified |command| using the specified |name| to the AutoRun key.
     80 // |root_key| could be HKCU or HKLM or the root of any user hive.
     81 BASE_EXPORT bool AddCommandToAutoRun(HKEY root_key, const string16& name,
     82                                      const string16& command);
     83 // Removes the command specified by |name| from the AutoRun key. |root_key|
     84 // could be HKCU or HKLM or the root of any user hive.
     85 BASE_EXPORT bool RemoveCommandFromAutoRun(HKEY root_key, const string16& name);
     86 
     87 // Reads the command specified by |name| from the AutoRun key. |root_key|
     88 // could be HKCU or HKLM or the root of any user hive. Used for unit-tests.
     89 BASE_EXPORT bool ReadCommandFromAutoRun(HKEY root_key,
     90                                         const string16& name,
     91                                         string16* command);
     92 
     93 // Sets whether to crash the process during exit. This is inspected by DLLMain
     94 // and used to intercept unexpected terminations of the process (via calls to
     95 // exit(), abort(), _exit(), ExitProcess()) and convert them into crashes.
     96 // Note that not all mechanisms for terminating the process are covered by
     97 // this. In particular, TerminateProcess() is not caught.
     98 BASE_EXPORT void SetShouldCrashOnProcessDetach(bool crash);
     99 BASE_EXPORT bool ShouldCrashOnProcessDetach();
    100 
    101 // Adjusts the abort behavior so that crash reports can be generated when the
    102 // process is aborted.
    103 BASE_EXPORT void SetAbortBehaviorForCrashReporting();
    104 
    105 // A touch enabled device by this definition is something that has
    106 // integrated multi-touch ready to use and has Windows version > Windows7.
    107 BASE_EXPORT bool IsTouchEnabledDevice();
    108 
    109 // Get the size of a struct up to and including the specified member.
    110 // This is necessary to set compatible struct sizes for different versions
    111 // of certain Windows APIs (e.g. SystemParametersInfo).
    112 #define SIZEOF_STRUCT_WITH_SPECIFIED_LAST_MEMBER(struct_name, member) \
    113     offsetof(struct_name, member) + \
    114     (sizeof static_cast<struct_name*>(NULL)->member)
    115 
    116 // Displays the on screen keyboard on Windows 8 and above. Returns true on
    117 // success.
    118 BASE_EXPORT bool DisplayVirtualKeyboard();
    119 
    120 // Dismisses the on screen keyboard if it is being displayed on Windows 8 and.
    121 // above. Returns true on success.
    122 BASE_EXPORT bool DismissVirtualKeyboard();
    123 
    124 }  // namespace win
    125 }  // namespace base
    126 
    127 #endif  // BASE_WIN_WIN_UTIL_H_
    128