Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(675)

Side by Side Diff: base/window_utils.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/window_utils.h ('k') | base/wmi_query.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2004-2009 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15
16 #include "omaha/base/window_utils.h"
17
18 #include "base/basictypes.h"
19 #include "omaha/base/constants.h"
20 #include "omaha/base/debug.h"
21 #include "omaha/base/error.h"
22 #include "omaha/base/logging.h"
23 #include "omaha/base/string.h"
24
25 namespace omaha {
26
27 namespace {
28
29 struct FindProcessWindowsRecord {
30 uint32 process_id;
31 uint32 window_flags;
32 CSimpleArray<HWND>* windows;
33 };
34
35 BOOL CALLBACK FindProcessWindowsEnumProc(HWND hwnd, LPARAM lparam) {
36 FindProcessWindowsRecord* enum_record =
37 reinterpret_cast<FindProcessWindowsRecord*>(lparam);
38 ASSERT1(enum_record);
39
40 DWORD process_id = 0;
41 ::GetWindowThreadProcessId(hwnd, &process_id);
42
43 // Only count this window if it is in the right process
44 // and it satisfies all specified window requirements.
45 if (enum_record->process_id != process_id) {
46 return true;
47 }
48 if ((enum_record->window_flags & kWindowMustBeTopLevel) &&
49 ::GetParent(hwnd)) {
50 return true;
51 }
52
53 if ((enum_record->window_flags & kWindowMustHaveSysMenu) &&
54 !(GetWindowLong(hwnd, GWL_STYLE) & WS_SYSMENU)) {
55 return true;
56 }
57
58 if ((enum_record->window_flags & kWindowMustBeVisible) &&
59 !::IsWindowVisible(hwnd)) {
60 return true;
61 }
62
63 enum_record->windows->Add(hwnd);
64 return true;
65 }
66
67 } // namespace
68
69 bool WindowUtils::FindProcessWindows(uint32 process_id,
70 uint32 window_flags,
71 CSimpleArray<HWND>* windows) {
72 ASSERT1(windows);
73 windows->RemoveAll();
74 FindProcessWindowsRecord enum_record = {0};
75 enum_record.process_id = process_id;
76 enum_record.window_flags = window_flags;
77 enum_record.windows = windows;
78 ::EnumWindows(FindProcessWindowsEnumProc,
79 reinterpret_cast<LPARAM>(&enum_record));
80 int num_windows = enum_record.windows->GetSize();
81 return num_windows > 0;
82 }
83
84 void WindowUtils::MakeWindowForeground(HWND wnd) {
85 if (!IsWindowVisible(wnd)) {
86 // If the window is hidden and we call SetWindowPos with SWP_SHOWWINDOW
87 // then the window will be visible.
88 // If the caller wants it visible they should do it themselves first.
89 return;
90 }
91 if (!SetWindowPos(wnd,
92 HWND_TOP,
93 0,
94 0,
95 0,
96 0,
97 SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW)) {
98 UTIL_LOG(LE, (_T("[WindowUtils::MakeWindowForeground]")
99 _T("[SetWindowPos failed][0x%08x]"), HRESULTFromLastError()));
100 }
101 }
102
103 bool WindowUtils::IsMainWindow(HWND wnd) {
104 return NULL == ::GetParent(wnd) && IsWindowVisible(wnd);
105 }
106
107 bool WindowUtils::HasSystemMenu(HWND wnd) {
108 return (GetWindowLong(wnd, GWL_STYLE) & WS_SYSMENU) != 0;
109 }
110
111 // The system displays the system large icon in the ALT+TAB dialog box.
112 // We do not need any small icon in the window caption. However, setting
113 // ICON_BIG has the side effect of the window displaying a scaled down
114 // version of it in the window caption. We could not find any way to
115 // hide that icon, including setting the icon to NULL or handling WM_GETICON
116 // message.
117 HRESULT WindowUtils::SetWindowIcon(HWND hwnd, WORD icon_id, HICON* hicon) {
118 ASSERT1(hwnd);
119 ASSERT1(hicon);
120 *hicon = NULL;
121
122 const int cx = ::GetSystemMetrics(SM_CXICON);
123 const int cy = ::GetSystemMetrics(SM_CYICON);
124 HINSTANCE exe_instance = static_cast<HINSTANCE>(::GetModuleHandle(NULL));
125 HICON icon = reinterpret_cast<HICON>(::LoadImage(exe_instance,
126 MAKEINTRESOURCE(icon_id),
127 IMAGE_ICON,
128 cx,
129 cy,
130 LR_DEFAULTCOLOR));
131 if (!icon) {
132 HRESULT hr = HRESULTFromLastError();
133 CORE_LOG(LE, (_T("[SetWindowIcon - LoadImage failed][0x%x]"), hr));
134 return hr;
135 }
136
137 ::SendMessage(hwnd,
138 WM_SETICON,
139 ICON_BIG,
140 reinterpret_cast<LPARAM>(icon));
141 *hicon = icon;
142 return S_OK;
143 }
144
145
146 } // namespace omaha
147
OLDNEW
« no previous file with comments | « base/window_utils.h ('k') | base/wmi_query.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698