Index: ui/base/win/shell.cc |
=================================================================== |
--- ui/base/win/shell.cc (revision 90470) |
+++ ui/base/win/shell.cc (working copy) |
@@ -1,112 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "ui/base/win/shell.h" |
- |
-#include <shellapi.h> |
-#include <shlobj.h> |
- |
-#include "base/file_path.h" |
-#include "base/native_library.h" |
-#include "base/string_util.h" |
-#include "base/win/scoped_comptr.h" |
-#include "base/win/win_util.h" |
-#include "base/win/windows_version.h" |
- |
-namespace ui { |
-namespace win { |
- |
-namespace { |
- |
-const wchar_t kShell32[] = L"shell32.dll"; |
-const char kSHGetPropertyStoreForWindow[] = "SHGetPropertyStoreForWindow"; |
- |
-// Define the type of SHGetPropertyStoreForWindow is SHGPSFW. |
-typedef DECLSPEC_IMPORT HRESULT (STDAPICALLTYPE *SHGPSFW)(HWND hwnd, |
- REFIID riid, |
- void** ppv); |
- |
-} // namespace |
- |
-// Open an item via a shell execute command. Error code checking and casting |
-// explanation: http://msdn2.microsoft.com/en-us/library/ms647732.aspx |
-bool OpenItemViaShell(const FilePath& full_path) { |
- HINSTANCE h = ::ShellExecuteW( |
- NULL, NULL, full_path.value().c_str(), NULL, |
- full_path.DirName().value().c_str(), SW_SHOWNORMAL); |
- |
- LONG_PTR error = reinterpret_cast<LONG_PTR>(h); |
- if (error > 32) |
- return true; |
- |
- if ((error == SE_ERR_NOASSOC)) |
- return OpenItemWithExternalApp(full_path.value()); |
- |
- return false; |
-} |
- |
-bool OpenItemViaShellNoZoneCheck(const FilePath& full_path) { |
- SHELLEXECUTEINFO sei = { sizeof(sei) }; |
- sei.fMask = SEE_MASK_NOZONECHECKS | SEE_MASK_FLAG_DDEWAIT; |
- sei.nShow = SW_SHOWNORMAL; |
- sei.lpVerb = NULL; |
- sei.lpFile = full_path.value().c_str(); |
- if (::ShellExecuteExW(&sei)) |
- return true; |
- LONG_PTR error = reinterpret_cast<LONG_PTR>(sei.hInstApp); |
- if ((error == SE_ERR_NOASSOC)) |
- return OpenItemWithExternalApp(full_path.value()); |
- return false; |
-} |
- |
-// Show the Windows "Open With" dialog box to ask the user to pick an app to |
-// open the file with. |
-bool OpenItemWithExternalApp(const string16& full_path) { |
- SHELLEXECUTEINFO sei = { sizeof(sei) }; |
- sei.fMask = SEE_MASK_FLAG_DDEWAIT; |
- sei.nShow = SW_SHOWNORMAL; |
- sei.lpVerb = L"openas"; |
- sei.lpFile = full_path.c_str(); |
- return (TRUE == ::ShellExecuteExW(&sei)); |
-} |
- |
-void SetAppIdForWindow(const string16& app_id, HWND hwnd) { |
- // This functionality is only available on Win7+. |
- if (base::win::GetVersion() < base::win::VERSION_WIN7) |
- return; |
- |
- // Load Shell32.dll into memory. |
- // TODO(brg): Remove this mechanism when the Win7 SDK is available in trunk. |
- std::wstring shell32_filename(kShell32); |
- FilePath shell32_filepath(shell32_filename); |
- base::NativeLibrary shell32_library = base::LoadNativeLibrary( |
- shell32_filepath, NULL); |
- |
- if (!shell32_library) |
- return; |
- |
- // Get the function pointer for SHGetPropertyStoreForWindow. |
- void* function = base::GetFunctionPointerFromNativeLibrary( |
- shell32_library, |
- kSHGetPropertyStoreForWindow); |
- |
- if (!function) { |
- base::UnloadNativeLibrary(shell32_library); |
- return; |
- } |
- |
- // Set the application's name. |
- base::win::ScopedComPtr<IPropertyStore> pps; |
- SHGPSFW SHGetPropertyStoreForWindow = static_cast<SHGPSFW>(function); |
- HRESULT result = SHGetPropertyStoreForWindow( |
- hwnd, __uuidof(*pps), reinterpret_cast<void**>(pps.Receive())); |
- if (S_OK == result) |
- base::win::SetAppIdForPropertyStore(pps, app_id.c_str()); |
- |
- // Cleanup. |
- base::UnloadNativeLibrary(shell32_library); |
-} |
- |
-} // namespace win |
-} // namespace ui |