使浏览器以SW_HIDE样式打开新窗口?

时间:2013-11-23 11:18:12

标签: c++ google-chrome browser hide hidden

您好

  • 我想以某种方式迫使Firefox或Chrome浏览器打开浏览器窗口隐藏(窗口在创建时从头开始具有SW_HIDE样式)。

例如:   如果我想打开一个新的浏览器窗口,除了我当前的浏览器,浏览器创建一个新的窗口,但我甚至没有注意到屏幕上发生了什么,因为新的浏览器窗口是隐藏创建的!

我在Windows 7上操作,我在AutoIT中编程,因为我是初学者,但我不想要任何完整的源代码,我只是想要一些如何实现这一点的建议。

对于谁不知道:SW_HIDE是一个'样式'或'属性',可以应用于任何控件/窗口/ GUI,使其从屏幕上消失,但仍然存在,只能在taskmanager中看到

我尝试了什么: 我可以创建一个程序来循环搜索由浏览器进程创建的任何新窗口,当找到一个时,快速将SW_HIDE样式应用于它,消失。但问题是这种方法不够快,因为我仍然可以观察到新窗口一秒钟而且我也松开了窗口和键盘焦点。因此,唯一的解决方案是“破解”浏览器,使其以“SW_HIDE”样式打开任何新窗口,而不是“SW_ACTIVE”样式。

非常感谢你的任何帮助!如果我误导任何问题,我会很快回复。谢谢你!

1 个答案:

答案 0 :(得分:1)

您可以构建自己的修补版本的铬。

在铬中每个新窗口都是由这样的代码创建的:

#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
#include "content/public/browser/navigation_controller.h"

Browser* CreateBrowser(Profile* profile) {
  Browser::CreateParams browser_params(Browser::TYPE_TABBED
      profile,
      chrome::HOST_DESKTOP_TYPE_FIRST);
  browser_params.initial_show_state = ui::SHOW_STATE_NORMAL;
  Browser* browser = new Browser(browser_params);
  browser->window()->Show();
  return browser;
}

// Simplified types definitions:
// class Profile;
//
// namespace ui {
//
// enum WindowShowState {
//   SHOW_STATE_DEFAULT    = 0,
//   SHOW_STATE_NORMAL     = 1,
//   SHOW_STATE_MINIMIZED  = 2,
//   SHOW_STATE_MAXIMIZED  = 3,
//   SHOW_STATE_INACTIVE   = 4,
//   SHOW_STATE_FULLSCREEN = 5,
//   SHOW_STATE_DETACHED   = 6,
//   SHOW_STATE_END        = 7
// };
//
// }  // namespace ui
//
// namespace chrome {
//
// enum HostDestkopType {
//   HOST_DESKTOP_TYPE_FIRST = 0,
//   HOST_DESKTOP_TYPE_NATIVE = HOST_DESTKOP_TYPE_FIRST,
// #if defined(OS_CHROMEOS)
//   HOST_DESKTOP_TYPE_ASH = HOST_DESKTOP_TYPE_NATIVE,
// #else
//   HOST_DESKTOP_TYPE_ASH,
// #endif
//   HOST_DESKTOP_TYPE_COUNT
// };
//
// }  // namespace chrome
//
// class Browser {
//  public:
//   enum Type {
//     TYPE_TABBED,
//     TYPE_POPUP
//   };
//   struct CreateParams {
//     CreateParams(Profile* profile, chrome::HostDesktopType host_desktop_type);
//     CreateParams(Type type, Profile* profile, chrome::HostDesktopType host_desktop_type);
//     static CreateParams CreateForApp(Type type, const std::string& app_name,
//         const gfx::Rect& window_bounds, Profile* profile,
//         chrome::HostDesktopType host_desktop_type);
//     static CreateParams CreateForDevTools(Profile* profile,
//         chrome::HostDesktopType host_desktop_type);
//     Type type;
//     Profile* profile;
//     chrome::HostDesktopType host_desktop_type;
//     std::string app_name;
//     gfx::Rect initial_bounds;
//     ui::WindowShowState initial_show_state;
//     bool is_session_restore;
//     BrowserWindow* window;
//   };
//
// explicit Browser(CreateParams params);
// BrowserWindow* window() const;
// };

你需要: