blob: 6659071d8cf38d76e502d46ca63a8cee3a815edd [file] [log] [blame]
// 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 "chrome/browser/printing/printer_manager_dialog.h"
#include <windows.h>
#include <shellapi.h>
#include "base/bind.h"
#include "base/files/file_path.h"
#include "base/path_service.h"
#include "base/task/post_task.h"
#include "base/threading/thread.h"
namespace {
// A helper callback that opens the printer management dialog.
void OpenPrintersDialogCallback() {
base::FilePath sys_dir;
base::PathService::Get(base::DIR_SYSTEM, &sys_dir);
base::FilePath rundll32 = sys_dir.Append(L"rundll32.exe");
base::FilePath shell32dll = sys_dir.Append(L"shell32.dll");
std::wstring args(shell32dll.value());
args.append(L",SHHelpShortcuts_RunDLL PrintersFolder");
ShellExecute(nullptr, L"open", rundll32.value().c_str(), args.c_str(),
nullptr, SW_SHOWNORMAL);
}
} // namespace
namespace printing {
void PrinterManagerDialog::ShowPrinterManagerDialog() {
base::PostTaskWithTraits(
FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_BLOCKING},
base::Bind(OpenPrintersDialogCallback));
}
} // namespace printing