Сценарий ниже показывает, что tasklist /v /FO:CSV
не усекает длинные заголовки окон и самостоятельно решает две задачи:
- Часть 1 отображает все полезные заголовки окон вместе с именами изображений и PID в формате
csv
;findstr
используется для сужения вывода до действительно полезных заголовков. - Часть 2 отображает PID и заголовок окна командной строки, из которого был выполнен скрипт (мой собственный
cmd
).
Сценарий:
@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
rem Part 1: ALL USEFUL WINDOW TITLES
echo(
set "_myExcludes=^"conhost ^"dwm ^"nvxdsync ^"nvvsvc ^"dllhost ^"taskhostex"
for /F "tokens=1,2,8,* delims=," %%G in ('
tasklist /V /fo:csv ^| findstr /V "%_myExcludes%"
') do (
if NOT "%%~J"=="N/A" echo %%G,%%~H,%%J
)
rem Part 2: MY OWN cmd WINDOW TITLE
echo(
set "_myTitleTail= - %~0"
for /F "tokens=1,2,8,* delims=," %%G in ('
tasklist /V /fo:csv ^| findstr /I /C:"%_myTitleTail%"
') do (
set "_myTitleBatch=%%~J"
set "_myCmdPIDno=%%~H"
)
call set "_myCmdTitle=%%_myTitleBatch:%_myTitleTail%=%%"
echo _myCmdPIDno=%_myCmdPIDno%
SETLOCAL EnableDelayedExpansion
echo _myCmdTitle=!_myCmdTitle!
ENDLOCAL
Выход:
==> TITLE ...but my title is very, very long, that's why I receive only partial title. Also
I was thinking about wmic utility, but can't find desired flag!!!
==> .SU378790.bat
"Image Name",PID,"Window Title"
"VDeck.exe",4032,"VIA HD Audio Deck"
"chrome.exe",5760,"How to get window title in windows from shell - Super User - Google Chrom
e"
"powershell_ise.exe",5568,"Windows PowerShell ISE"
"cmd.exe",4980,"...but my title is very, very long, that's why I receive only partial title.
Also I was thinking about wmic utility, but can't find desired flag!!! - .SU378790.bat"
"PSPad.exe",5108,"378790.bat"
"cmd.exe",3888,"d:bat"
"cmd.exe",5648,"Administrator: Command Prompt"
_myCmdPIDno=4980
_myCmdTitle=...but my title is very, very long, that's why I receive only partial title. Als
o I was thinking about wmic utility, but can't find desired flag!!!
==>
Ресурсы (требуется чтение):
- (справочник по командам) Индекс AZ командной строки Windows CMD
- (полезные особенности) Синтаксис командной строки Windows CMD Shell
- (
%~G
и т.д. Специальная страница) Аргументы командной строки (параметры) - (специальная страница) EnableDelayedExpansion
- (
SET %variable:StrToFind=NewStr%
) Переменная Изменить / Заменить
In Windows if I want to list all instances (and window titles) of a given application from the command line I run this command:
tasklist /fi "IMAGENAME eq notepad.exe" /v
However I can’t do the same thing for applications such as LibreOffice. For example no matter how many different Writer windows I may have open, there always is only one soffice.bin
and one soffice.exe
process. Using the tasklist
command I can only see one window title associated with soffice.bin
process.
Same thing happens with Microsoft Word (only one winword.exe
process exists and is associated with only one window title).
Is there any way I can list all the window titles of such applications through the command line?
asked Jun 3, 2018 at 23:44
AndroidXAndroidX
2171 gold badge2 silver badges9 bronze badges
3
You can use the following PowerShell script:
Add-Type @"
using System;
using System.Runtime.InteropServices;
using System.Text;
public class Win32 {
public delegate void ThreadDelegate(IntPtr hWnd, IntPtr lParam);
[DllImport("user32.dll")]
public static extern bool EnumThreadWindows(int dwThreadId,
ThreadDelegate lpfn, IntPtr lParam);
[DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern int GetWindowText(IntPtr hwnd,
StringBuilder lpString, int cch);
[DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern Int32 GetWindowTextLength(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern bool IsIconic(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern bool IsWindowVisible(IntPtr hWnd);
public static string GetTitle(IntPtr hWnd) {
var len = GetWindowTextLength(hWnd);
StringBuilder title = new StringBuilder(len + 1);
GetWindowText(hWnd, title, title.Capacity);
return title.ToString();
}
}
"@
$windows = New-Object System.Collections.ArrayList
Get-Process | Where { $_.MainWindowTitle } | foreach {
$_.Threads.ForEach({
[void][Win32]::EnumThreadWindows($_.Id, {
param($hwnd, $lparam)
if ([Win32]::IsIconic($hwnd) -or [Win32]::IsWindowVisible($hwnd)) {
$windows.Add([Win32]::GetTitle($hwnd))
}}, 0)
})}
Write-Output $windows
I wrote a program that allows filtering this list and brings the selected window to the front: activatewindow
answered Oct 14, 2020 at 8:56
MardukMarduk
2482 silver badges6 bronze badges
1
I’ll make our comments into an answer, so you can have conclusion to this.
@LotPings suggested using cmdow.
I suggested this question for help: How to get window title in windows from shell
With these suggestions, you can definitely do what you’re looking for.
answered Jun 14, 2018 at 7:33
Aulis RonkainenAulis Ronkainen
2,50438 gold badges28 silver badges27 bronze badges
In Windows if I want to list all instances (and window titles) of a given application from the command line I run this command:
tasklist /fi "IMAGENAME eq notepad.exe" /v
However I can’t do the same thing for applications such as LibreOffice. For example no matter how many different Writer windows I may have open, there always is only one soffice.bin
and one soffice.exe
process. Using the tasklist
command I can only see one window title associated with soffice.bin
process.
Same thing happens with Microsoft Word (only one winword.exe
process exists and is associated with only one window title).
Is there any way I can list all the window titles of such applications through the command line?
asked Jun 3, 2018 at 23:44
AndroidXAndroidX
2171 gold badge2 silver badges9 bronze badges
3
You can use the following PowerShell script:
Add-Type @"
using System;
using System.Runtime.InteropServices;
using System.Text;
public class Win32 {
public delegate void ThreadDelegate(IntPtr hWnd, IntPtr lParam);
[DllImport("user32.dll")]
public static extern bool EnumThreadWindows(int dwThreadId,
ThreadDelegate lpfn, IntPtr lParam);
[DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern int GetWindowText(IntPtr hwnd,
StringBuilder lpString, int cch);
[DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern Int32 GetWindowTextLength(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern bool IsIconic(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern bool IsWindowVisible(IntPtr hWnd);
public static string GetTitle(IntPtr hWnd) {
var len = GetWindowTextLength(hWnd);
StringBuilder title = new StringBuilder(len + 1);
GetWindowText(hWnd, title, title.Capacity);
return title.ToString();
}
}
"@
$windows = New-Object System.Collections.ArrayList
Get-Process | Where { $_.MainWindowTitle } | foreach {
$_.Threads.ForEach({
[void][Win32]::EnumThreadWindows($_.Id, {
param($hwnd, $lparam)
if ([Win32]::IsIconic($hwnd) -or [Win32]::IsWindowVisible($hwnd)) {
$windows.Add([Win32]::GetTitle($hwnd))
}}, 0)
})}
Write-Output $windows
I wrote a program that allows filtering this list and brings the selected window to the front: activatewindow
answered Oct 14, 2020 at 8:56
MardukMarduk
2482 silver badges6 bronze badges
1
I’ll make our comments into an answer, so you can have conclusion to this.
@LotPings suggested using cmdow.
I suggested this question for help: How to get window title in windows from shell
With these suggestions, you can definitely do what you’re looking for.
answered Jun 14, 2018 at 7:33
Aulis RonkainenAulis Ronkainen
2,50438 gold badges28 silver badges27 bronze badges
1 / 1 / 1 Регистрация: 12.06.2018 Сообщений: 36 |
|
1 |
|
Как получить заголовок окна?06.03.2021, 00:50. Показов 6504. Ответов 9
Добрый вечер! Не могу понять как получить заголовок окна в виде строки. Перелазил весь интернет, перепробовал кучу примеров. Понимаю только одно, что нужно использовать функцию GetWindowText() или SendMessage() c WM_GETTEXT. Я не могу понять как работать с этой функцией. Все что я хочу это получить название окна, которое я получаю через GetForegroundWindow(). Можно какой-нибудь простенький пример работы с этой функцией? Заранее спасибо!
__________________
0 |
oleg-m1973 6574 / 4559 / 1843 Регистрация: 07.05.2019 Сообщений: 13,726 |
||||
06.03.2021, 01:46 |
2 |
|||
Все что я хочу это получить название окна, которое я получаю через GetForegroundWindow(). Можно какой-нибудь простенький пример работы с этой функцией?
0 |
142 / 26 / 4 Регистрация: 06.05.2019 Сообщений: 1,676 Записей в блоге: 4 |
|
22.08.2021, 03:49 |
3 |
Если hWnd руками печатать функция не работает, может это у меня так.
0 |
3222 / 2481 / 429 Регистрация: 03.05.2011 Сообщений: 5,155 Записей в блоге: 20 |
|
22.08.2021, 10:45 |
4 |
может это у меня так конечно только у тебя.
1 |
Nexi99 142 / 26 / 4 Регистрация: 06.05.2019 Сообщений: 1,676 Записей в блоге: 4 |
||||
22.08.2021, 21:14 |
5 |
|||
конечно только у тебя. Я ставлю такую запись
так что не понятно. Там вообще описание странное. Сначала написано что из другого приложения не работает, а ниже написано что из другого процесса будет работать. Есть рекомендация про сообщение, но мне и функции достаточно. Так что руками дескриптор не принимает, хотя в других ситуациях такое преобразование работает стабильно.
0 |
142 / 26 / 4 Регистрация: 06.05.2019 Сообщений: 1,676 Записей в блоге: 4 |
|
23.08.2021, 08:28 |
7 |
проблемы с гуглом видимо тоже до вас туго доходит. Ладно не буду спорить. У каждой функции своя специфика на одних работает на других нет.
0 |
3222 / 2481 / 429 Регистрация: 03.05.2011 Сообщений: 5,155 Записей в блоге: 20 |
|
23.08.2021, 08:31 |
8 |
видимо тоже до вас туго доходит что до меня туго доходит?
1 |
142 / 26 / 4 Регистрация: 06.05.2019 Сообщений: 1,676 Записей в блоге: 4 |
|
23.08.2021, 22:50 |
9 |
что ты вводишь цифры я же выше писал, зачем мне вводить 16ричное значение туда.
0 |
3222 / 2481 / 429 Регистрация: 03.05.2011 Сообщений: 5,155 Записей в блоге: 20 |
|
23.08.2021, 22:56 |
10 |
Да какая нафиг разница в какой системе счисления.
3 |
#include <WinAPI.au3>
#include <Array.au3>
Global $oDict, $aNewWin[1][3] = [[0, 'Title', 'Class']]
$oDict = ObjCreate('Scripting.Dictionary')
If Not IsObj($oDict) Then Exit 1
_GetAllVisibleWindows(0)
__LoadKeyboardLayoutEngSelf()
HotKeySet('+z', '_GetNew');Shift+z
HotKeySet('{Esc}', '_Exit');Esc
While 1
Sleep(100)
WEnd
Func _GetNew()
HotKeySet('+z')
_GetAllVisibleWindows(1)
_ArrayDisplay($aNewWin, 'New Windows')
HotKeySet('+z', '_GetNew')
EndFunc ;==>_GetNew
Func _Exit()
Exit
EndFunc ;==>_Exit
Func _GetAllVisibleWindows($i_Flag)
Local $a_Win, $s_HexHWnd
If $i_Flag Then
ReDim $aNewWin[1][3]
$aNewWin[0][0] = 0
EndIf
$a_Win = WinList()
If $i_Flag Then ReDim $aNewWin[$a_Win[0][0] + 1][3]
For $i = 1 To $a_Win[0][0]
If Not BitAND(WinGetState($a_Win[$i][1]), 2) Then ContinueLoop
$s_HexHWnd = Hex($a_Win[$i][1], 8)
If $oDict.Exists($s_HexHWnd) Then ContinueLoop
$oDict.Add($s_HexHWnd, 0)
If Not $i_Flag Then ContinueLoop
$aNewWin[0][0] += 1
$aNewWin[$aNewWin[0][0]][0] = '0x' & $s_HexHWnd
$aNewWin[$aNewWin[0][0]][1] = WinGetTitle($a_Win[$i][1])
$aNewWin[$aNewWin[0][0]][2] = _WinAPI_GetClassName($a_Win[$i][1])
Next
If $i_Flag Then ReDim $aNewWin[$aNewWin[0][0] + 1][3]
EndFunc ;==>_GetAllVisibleWindows
Func __LoadKeyboardLayoutEngSelf()
Local Const $__KLF_ACTIVATE = 0x00000001, $__KLF_SETFORPROCESS = 0x00000100
Local $a_Res = DllCall('user32.dll', 'long', 'LoadKeyboardLayoutW', 'wstr', '00000409', 'uint', BitOR($__KLF_ACTIVATE, $__KLF_SETFORPROCESS))
If (@error) Or (Not $a_Res[0]) Or (Not StringInStr(Hex($a_Res[0]), '0409')) Then Return 0
Return 1
EndFunc ;==>__LoadKeyboardLayoutEngSelf
Время прочтения
11 мин
Просмотры 8.6K
С выходом Windows 10 компания Microsoft вернула понятие окна в его первозданном виде для приложений из Windows Store. Теперь, используя привычные кнопки в правом верхнем углу, можно менять размер, сворачивать/разворачивать и закрывать окно, независимо от типа приложения. Самое интересное, что Microsoft не отказалась от своего изначального направления – ориентации на контент. Эта философия не универсальна, но она хорошо подходит для целого пласта приложений. Согласитесь, если вы делаете игру или читалку, то стандартный заголовок с цветами заданными автоматически может слегка подпортить дизайн приложения. Поэтому новые широкие возможности настройки заголовка в приложениях универсальной платформы Windows (UWP) стали безусловным плюсом.
Данный материал подготовлен совместно с активным участником сообщества Microsoft Developer, Алексеем Плотниковым, и менеджером по работе с техническими аудиториями, Стасом Павловым. В нем мы поговорим о возможных настройках заголовка внутри UWP-приложения.
1. Скрываем заголовок. Как раз для тех случаев, когда в приложении необходимо полное погружение в контент и заголовок не нужен, существует функция сокрытия заголовка и перевода приложения в полноэкранный режим.
Сделать это крайне просто:
VB.NET
'Переход в полноэкранный режим
ApplicationView.GetForCurrentView.TryEnterFullScreenMode()
'Возврат в оконный режим
ApplicationView.GetForCurrentView.ExitFullScreenMode()
C#
//Переход в полноэкранный режим
ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
//Возврат в оконный режим
ApplicationView.GetForCurrentView().ExitFullScreenMode();
Обратите внимание, что функция TryEnterFullScreenMode возвращает значение Boolean, что позволит убедится в успехе перехода в полноэкранный режим, который не всегда гарантирован.
Данный код лучше всего использовать в случае, когда необходимо перевести приложение в полноэкранный режим и обратно в ответ на действия пользователя. В случае, если требуется запуск приложения в полноэкранном режиме, нужно поместить в начале метода OnLaunched приложения следующий код:
VB.NET
ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.FullScreen
C#
ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.FullScreen;
Приятное дополнение такого подхода в том, что приложение сразу запустится в полноэкранном режиме, включая экран-заставку, а также запомнит данное правило для последующих запусков.
На заметку: для унификации поведения UWP-приложений и WinRT, при переходе в полноэкранный режим можно увидеть строку заголовка если подвести курсор мыши к верхнему краю окна. Это будет полезно при проектировании приложения.
2. Тонкая настройка. На самом деле, возможность полностью заменить стандартный заголовок на свой без необходимости заботится о стандартном поведении вроде перетаскивания окна за заголовок появилась впервые. По сути это значит, что теперь можно разместить на месте заголовка все, что придет в голову. Данный способ позволяет заменить только ту часть заголовка, которая содержит иконку и наименование приложения. Часть с кнопками управления окном заменить на собственную не получится.
Если погрузиться в этот функционал, слово «замена» не совсем подходит. Скорее мы просим платформу скрыть стандартный заголовок и говорим какой элемент в XAML будет выполнять его функции.
Делается всего двумя строчками кода:
VB.NET
'Разрешить использовать собственный заголовок (как следствие убрать стандартный)
Core.CoreApplication.GetCurrentView.TitleBar.ExtendViewIntoTitleBar = True
'Установить указанный элемент как заголовок окна.
Window.Current.SetTitleBar(CustomTitleBar)
С#
//Разрешить использовать собственный заголовок (как следствие убрать стандартный)
CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar = true;
//Установить указанный элемент как заголовок окна.
Window.Current.SetTitleBar(CustomTitleBar);
И вот здесь начинается самое интересное. Указанный элемент может не только сильно отличаться от привычного заголовка, но и располагаться в любом месте окна. Вторая строчка кода не поместит его в нужное место и не даст правильных размеров, она всего лишь уведомит платформу о том, что по мнению разработчика является заголовком. Единственное, что получится в итоге – это возможность перетаскивать окно нажатием на данный элемент, без необходимости дополнительных действий в коде.
Все это крайне важно понимать и помнить, что персонализация никогда не должна идти в разрез с привычками пользователя. Помня это нужно позаботится о том, чтобы заголовок был размещен на месте стандартного заголовка и имел соответствующую высоту и цвет.
Как это выглядит в XAML:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="32"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Background="LightBlue" x:Name="CustomTitleBur">
<TextBlock VerticalAlignment="Center" Margin="10,0,0,0">Заголовок окна</TextBlock>
<Image Margin="20,4,0,4" Source="Assets/StoreLogo.png"></Image>
</StackPanel>
</Grid>
В данном примере видно, что текст заголовка и иконка поменялись местами. Все выглядит предельно просто и понятно, но при этом есть целый ряд важных аспектов.
Во-первых, если сообщить платформе о том, что нужно использовать собственный заголовок, она отдаст ранее не доступную часть окна под макет, а значит все содержимое сдвинется вверх. Учитывая это, нужно позаботиться о том, чтобы в верхней части макета был только элемент заменяющий стандартный заголовок, а также убедиться, что ничто не перекрывается кнопками управления окном. В XAML выше корневой Grid отдает под заголовок одну строку высотой в 32 единицы. Здесь кроется еще один подвох – высота кнопок управления окном зависит от настроек Windows и равна 32 только при стандартных настройках, поэтому уважающий своего пользователя разработчик позаботится об отслеживании изменения настроек и отреагирует на это. В статье MSDN, посвященной методу Window.SetTitleBar можно узнать подробнее о том, как это сделать.
Во-вторых, нужно помнить, что платформа обрабатывает элемент как обычный заголовок, а значит поместив туда кнопку будет невозможно отлавливать события ее нажатия. Все события мыши будут перехватываться платформой и использоваться для перетаскивания окна.
Вам может показаться, что обойти предыдущее ограничение можно просто убрав строчку кода:
VB.NET
Window.Current.SetTitleBar(CustomTitleBar)
C#
Window.Current.SetTitleBar(CustomTitleBar);
Но, платформа просто скроет стандартный заголовок, а необходимый элемент в качестве заголовка не установит. Тогда можно просто определить участки, за которые окно можно перетаскивать и добавить нужные действия в коде? Но, нет, все не так просто. На самом деле, если не вызвать метод SetTitleBar, то все что находится в макете окна попадет на место бывшего заголовка, потеряет возможность отлавливать ввод и будет вести себя как заголовок. Для чего же тогда нужна эта строчка кода? Она нужна для того, чтобы точно определить места, ведущие себя как заголовок. Если необходимо поместить туда кнопку, то она должна быть за пределами элемента CustomTitleBar.
Перепишем наш XAML следующим образом:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="32"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Name="FullScreenButton"
Click="FullScreenButton_Click">
<FontIcon FontFamily="{ThemeResource SymbolThemeFontFamily}" Glyph=""/>
</Button>
<Grid Background="LightBlue" Grid.Column="1" x:Name="CustomTitleBar">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" Margin="10,0,0,0">Заголовок окна</TextBlock>
<Image Margin="20,4,0,4" Source="Assets/StoreLogo.png"></Image>
</StackPanel>
</Grid>
</Grid>
</Grid>
А в коде окна будет написано следующее:
VB.NET
Private Sub Page_Loaded(sender As Object, e As RoutedEventArgs)
Core.CoreApplication.GetCurrentView.TitleBar.ExtendViewIntoTitleBar = True
Window.Current.SetTitleBar(CustomTitleBur)
AddHandler Window.Current.SizeChanged, AddressOf CurrentWindow_SizeChanged
End Sub
Private Sub CurrentWindow_SizeChanged(sender As Object, e As WindowSizeChangedEventArgs)
Dim view = ApplicationView.GetForCurrentView
If Not view.IsFullScreenMode Then
view.ExitFullScreenMode()
CustomTitleBur.Visibility = Visibility.Visible
FullScreenButton.Visibility = Visibility.Visible
End If
End Sub
Private Sub FullScreenButton_Click(sender As Object, e As RoutedEventArgs)
Dim view = ApplicationView.GetForCurrentView
If view.TryEnterFullScreenMode() Then
CustomTitleBur.Visibility = Visibility.Collapsed
FullScreenButton.Visibility = Visibility.Collapsed
End If
End Sub
C#
public MainPage()
{
this.InitializeComponent();
this.Loaded += MainPage_Loaded;
}
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
Windows.ApplicationModel.Core.CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar = true;
Window.Current.SetTitleBar(CustomTitleBar);
Window.Current.SizeChanged += Current_SizeChanged;
FullScreenButton.Click += FullScreenButton_Click;
}
private void FullScreenButton_Click(object sender, RoutedEventArgs e)
{
var view = ApplicationView.GetForCurrentView();
if (!view.TryEnterFullScreenMode())
{
CustomTitleBar.Visibility = Visibility.Visible;
FullScreenButton.Visibility = Visibility.Collapsed;
}
}
private void Current_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e)
{
var view = ApplicationView.GetForCurrentView();
if (!view.IsFullScreenMode)
{
view.ExitFullScreenMode();
CustomTitleBar.Visibility = Visibility.Visible;
FullScreenButton.Visibility = Visibility.Visible;
}
}
В качестве примера, помещаем в заголовок кнопку разворачивания окна в полноэкранный режим. Несмотря на то, что смысла в такой кнопке не так много, о чем станет понятно ниже, данный пример вполне подходит для осваивания тонкостей работы с заголовком.
Итак, рассмотрим пример более подробно. Для начала, чтобы получить возможность вызова события нажатия на кнопку, нужно внести ее за пределы элемента CustomTitleBar. Сам же CustomTitleBar – обернуть в закрашенный Grid, так как без заливки он не сможет отлавливать ввод мыши, и будет невозможно перетаскивать окно за весь заголовок. Кроме описанных ранее строчек, скрывающих стандартный заголовок и устанавливающих необходимый, в события загрузки окна добавляется подписка на событие изменения размеров окна.
Теперь, в тот момент, когда переводим окно в полноэкранный режим, заголовок никуда не исчезает. CustomTitleBar остается на своем месте, но при этом теряет функции заголовка. При наведении курсора мыши в верхнюю часть экрана, сверху появляются кнопки управления окном, которые позволяют вернуться в обычный режим. Если для переходя в полноэкранный режим и скрытия своего заголовка, достаточно отреагировать на событие кнопки, то для того, чтобы узнать, что окно вернулось в обычный режим, придется подписаться на событие изменения размеров окна.
Экспериментируя с данным кодом, можно добиться многих интересных результатов, но не стоит забывать о стандартизации и удобстве. Например, вы можете поместить CustomTitleBar внизу окна и тогда появится возможность перетаскивать окно не за верхнюю, а за нижнюю часть, но пользователь вряд ли скажет за это «спасибо». Хорошо обдумайте необходимость решения, прежде чем его применять. Кстати очень хорошим примером реализации собственного заголовка можно назвать браузер Microsoft Edge, в котором частью заголовка являются вкладки.
3. Смена цвета заголовка. Описанный выше метод крайне интересен и достаточно гибок, но в большинстве сценариев будет излишне создавать свой элемент и усложнять жизнь его правильной настройкой. Намного проще просто перекрасить элементы системного заголовка в цвета приложения. Набор параметров, отвечающих за цвета заголовка, достаточно широк, чтобы достичь гармонии с остальным приложением.
Для сокращения кода можно получить ссылку на текущий TitleBar и далее работать с ней:
VB.NET
Dim tb As ApplicationViewTitleBar = ApplicationView.GetForCurrentView.TitleBar
C#
ApplicationViewTitleBar tb = ApplicationView.GetForCurrentView().TitleBar;
Рассмотрим все свойства, отвечающие за цвета элементов заголовка:
VB.NET
'Устанавливает фона заголовка, но не затрагивает часть с кнопками управления окном.
tb.BackgroundColor = Windows.UI.Colors.LightBlue
'Устанавливает фон под кнопками управления окном
tb.ButtonBackgroundColor = Windows.UI.Colors.LightBlue
'Устанавливает цвет символов внутри кнопок управления окном (черточка, крестик, квадратик).
tb.ButtonForegroundColor = Windows.UI.Colors.Black
'Устанавливает цвет фона кнопок управления окном в момент наведения на них мыши. ВНИМАНИЕ! Не влияет на кнопку закрытия окна.
tb.ButtonHoverBackgroundColor = Windows.UI.Colors.Blue
'Устанавливает цвет символов внутри кнопок управления окном в момент наведения на них мыши. ВНИМАНИЕ! Не влияет на кнопку закрытия окна.
tb.ButtonHoverForegroundColor = Windows.UI.Colors.White
'Устанавливает цвет фона кнопок управления окном в момент, когда приложение не активно
tb.ButtonInactiveBackgroundColor = Windows.UI.Colors.Gray
'Устанавливает цвет символов внутри кнопок управления окном в момент, когда приложение не активно
tb.ButtonInactiveForegroundColor = Windows.UI.Colors.White
'Устанавливает цвет фона кнопок управления окном в момент нажатия на них. ВНИМАНИЕ! Не влияет на кнопку закрытия окна.
tb.ButtonPressedBackgroundColor = Windows.UI.Colors.DarkBlue
'Устанавливает цвет символов внутри кнопок управления окном в момент нажатия на них. ВНИМАНИЕ! Не влияет на кнопку закрытия окна.
tb.ButtonPressedForegroundColor = Windows.UI.Colors.White
'Устанавливает цвет символов заголовка окна
tb.ForegroundColor = Windows.UI.Colors.Black
'Устанавливает фона заголовка в момент, когда приложение не активно
tb.InactiveBackgroundColor = Windows.UI.Colors.Gray
'Устанавливает цвет символов заголовка окна в момент, когда приложение не активно
tb.InactiveForegroundColor = Windows.UI.Colors.White
C#
//Устанавливает фона заголовка, но не затрагивает часть с кнопками управления окном.
tb.BackgroundColor = Windows.UI.Colors.LightBlue;
//Устанавливает фон под кнопками управления окном
tb.ButtonBackgroundColor = Windows.UI.Colors.LightBlue;
//Устанавливает цвет символов внутри кнопок управления окном (черточка, крестик, квадратик).
tb.ButtonForegroundColor = Windows.UI.Colors.Black;
//Устанавливает цвет фона кнопок управления окном в момент наведения на них мыши. ВНИМАНИЕ! Не влияет на кнопку закрытия окна.
tb.ButtonHoverBackgroundColor = Windows.UI.Colors.Blue;
//Устанавливает цвет символов внутри кнопок управления окном в момент наведения на них мыши. ВНИМАНИЕ! Не влияет на кнопку закрытия окна.
tb.ButtonHoverForegroundColor = Windows.UI.Colors.White;
//Устанавливает цвет фона кнопок управления окном в момент, когда приложение не активно
tb.ButtonInactiveBackgroundColor = Windows.UI.Colors.Gray;
//Устанавливает цвет символов внутри кнопок управления окном в момент, когда приложение не активно
tb.ButtonInactiveForegroundColor = Windows.UI.Colors.White;
//Устанавливает цвет фона кнопок управления окном в момент нажатия на них. ВНИМАНИЕ! Не влияет на кнопку закрытия окна.
tb.ButtonPressedBackgroundColor = Windows.UI.Colors.DarkBlue;
//Устанавливает цвет символов внутри кнопок управления окном в момент нажатия на них. ВНИМАНИЕ! Не влияет на кнопку закрытия окна.
tb.ButtonPressedForegroundColor = Windows.UI.Colors.White;
//Устанавливает цвет символов заголовка окна
tb.ForegroundColor = Windows.UI.Colors.Black;
//Устанавливает фона заголовка в момент, когда приложение не активно
tb.InactiveBackgroundColor = Windows.UI.Colors.Gray;
//Устанавливает цвет символов заголовка окна в момент, когда приложение не активно
tb.InactiveForegroundColor = Windows.UI.Colors.White;
Поэкспериментировав с каждым из этих свойств, вы можете добиться гармоничного дизайна и ваше приложение будет успешно отвечать философии ориентации на контент.
Также, возможно использовать свойства, отвечающие за цвета кнопок для адаптации их под ваш персональный заголовок, который можно создать, используя способ, описанный выше.
Стоит заметить, что настройки, отвечающие за цвета кнопок управления окном, также отвечают за кнопку «Назад», которая появилась в UWP-приложениях и расположена в заголовке окна (о ней планируем написать отдельный материал).
На этом описание настройки заголовка в приложениях UWP можно завершить. Стоит заметить, что все выше сказанное актуально для приложений, запускаемых на рабочем столе. Если приложение выполняется в режиме планшета или на мобильном устройстве, то заголовок в нем отсутствует.
Вторая статья из серии «UWP beginner»: Адаптивный дизайн.
Содержание
- Что делать, если в проводнике windows 10 пропал текст? Простые решения проблемы
- Решение проблемы «в проводнике windows 10 пропал текст»
- Шаг 1. Обновление Windows
- Шаг 2. Проверка целостности системных файлов и исправление
- Шаг 3. Обновление драйвера на видеокарту
- Шаг 4. Остановка программ защиты
- Шаг 5. Восстановление Windows
- Основные выводы
- Как включить заголовок в приложении «Параметры» в Windows 10
- Как включить заголовок в приложении «Параметры» в Windows 10
- Как отключить заголовок в приложении «Параметры» в Windows 10
- Как включить заголовок в приложении «Параметры» в Windows 10
- Как включить заголовок в приложении «Параметры» в Windows 10
- Как отключить заголовок в приложении «Параметры» в Windows 10
Что делать, если в проводнике windows 10 пропал текст? Простые решения проблемы
Недавно ко мне обратилась постоянная читательница моих блогов, ученица, которой я несколько лет назад начал плавно поднимать фактически с нуля уровень компьютерной грамотности, с вопросом «Что делать, в проводнике windows 10 пропал текст, а также в документах ворд + стали время от времени исчезать названия папок, файлов, ярлыков».
Я уже привык ко всяким некорректным пояснениям новичков (когда неисправность описывается не так, как на самом деле это выглядит), да и проблем в программной части Windows повидал столько, что меня мало чем можно удивить 🙂
Но этот случай удивил, когда я увидел все своими глазами через TeamViewer. Потому что ранее ни с чем подобным не сталкивался вообще и даже не сразу справился с этой непонятной проблемой.
Как выглядит то, что я описываю, смотрите на изображении ниже, а в данной заметке я продемонстрирую способы, при помощи которых можно избавиться от данной ерунды.
Решение проблемы «в проводнике windows 10 пропал текст»
Выше как раз отображено, как может выглядеть такая проблема. На самом деле проявляет она себя по разному. Текст с названиями и другие надписи в проводнике Windows 10 (кстати, можно встретить такое и в Windows 7 и других ОС этого семейства) могут пропадать время от времени, а могут исчезнуть и вообще не появляться, от чего работа становится невозможной.
При этом затронуты могут быть любые программы, окна проводника, служебные утилиты. В общем все что угодно.
Чтобы исправить данную проблему, я прошел по 4 несложным шагам (5-й дам вам на крайний случай), но, думаю, что в зависимости от причины появления этой ерундовины, вам может помочь какой-то один из них.
Ну что ж, поехали…
Шаг 1. Обновление Windows
Думаю, нет смысла спорить с тем, что обновления системы в конечном счете несут только лишь пользу, а не вред. Да, есть и вред, соглашусь, но это временно 🙂 Такие «кривые» обновляшки все равно чинят и все становится хорошо. А так систему нужно всегда поддерживать в актуальном состоянии, регулярно загружая для нее обновления.
Так вот первым делом нужно попробовать обновить систему, если, например, вы давненько этого делали.
Скажете, а причем тут уже имеющаяся проблема и обновления? А потому что при этом процессе могут быть затронуты нужные системные файлы, после чего проблема само собой исчезнет.
И я не зря поставил этот шаг первым, ведь выполнить обновление легко и к тому же полезно, если давно этого не делали.
Для обновления Windows 10, откройте «Пуск», выберите «Параметры» (шестеренка), перейдите в раздел «Обновление и безопасность» и нажмите там «Проверить наличие обновлений». Скачайте все, что предлагает система и перезагрузитесь.
Подробнее об установке обновлений я рассказывал в отдельных заметках:
Уже после этого шага проблема может исчезнуть в некоторых случаях.
Шаг 2. Проверка целостности системных файлов и исправление
Если не прокатил 1-й шаг, то начинаем химичить уже внутри Windows 🙂 Не пугайтесь этого сложного названия заголовка 2-го шага. Все делается просто, система выполнил действия за вас.
Процесс, который вы сейчас запустите позволит Windows проверить правильность всех системных файлов и если какие-то из них некорректны, неактуальны, то заменит правильными. Тем самым, если исчезание текста в ворде, а также в проводнике и любых названиях Windows, связано именно с повреждением системных файлов, то данный шаг исправит проблему.
Делается это так:
- В поиске наберите «командная строка» и запустите ее от имени администратора.
- В страшном черном окне наберите команду sfc /scannow и нажимаем Enter для запуска сканирования.
Остается только ждать, но при этом можно свободно сворачивать окно и заниматься своими делами. Процесс может идти около получаса, иногда дольше.
Если по завершении проверки в окне написано, что были найдены поврежденные файлы и исправлены (как на картинке выше), то можно надеяться, что ваша проблема устранена. Попробуйте теперь перезагрузить компьютер и проверить.
Шаг 3. Обновление драйвера на видеокарту
Слышал, что подобная проблема может быть связана с драйвером на видеокарту, например, с его повреждением. Воспроизвести проблему у себя не смог, но раз об этом говорят люди, значит способ не безнадежен.
О том, что такое драйвера и как их можно найти и установить для разных устройство вы можете найти здесь » Вообще рекомендую материал к прочтению, как минимум перейдете оттуда на нужную заметку по установке драйвера.
Общая последовательность такая:
- Удаляем старый драйвер стандартным способом, как обычную программу;
- Скачиваем новый с официального сайта (например, с Nvidia или AMD, в зависимости от производителя вашей видеокарты) и устанавливаем.
- Перезагружаем компьютер.
Шаг 4. Остановка программ защиты
Этот шаг я тоже включил сюда не просто так. Антивирусы и другие средства защиты у некоторых пользователей работают настолько криво и так ужасно настроены, что я уже перестаю удивляться поеданию ими даже системных файлов системы.
Особенно это касается тех, кто поставит сразу несколько программ защиты и все они одновременно работают, при этом с максимальными настройками защиты. Отсюда вообще много проблем возникает, таких как отсутствие доступа в интернет, блокировка разных функций системы. Не исключено и пропадание названий файлов, папок, ярлыков в проводнике Windows 10.
Поэтому попробуйте отключить абсолютно всю защиту, работающую на компьютере, кроме встроенного в систему защитника Windows. Перезагрузите компьютер и проверьте, а не исчезла ли проблема?
Шаг 5. Восстановление Windows
Плохо, конечно, если дело дошло до последнего 5-го шага и сам я очень не люблю к нему прибегать, но если ничего из вышеописанного не помогло, то вероятно придется восстанавливать систему.
И хорошо если у вас есть ранее созданная контрольная точка в системе (т.е. состояние Windows до появления проблемы) или резервная копия на какой-то период (опять же, до появления проблемы). Тогда, считайте, неполадка будет устранена после восстановления 🙂
Нужно попробовать следующее:
- Восстановить систему из контрольной точки, если таковая у вас имеется на любой период до того как пропал текст в Windows 10.
- Восстановить систему из ранее созданной резервной копии, если вы ее когда-нибудь создавали и храните.
Если за системой тщательно следите и резервные копии регулярно делаете, то шаг 5 будет для вас палочкой выручалочкой 🙂
Основные выводы
У любой, даже такой, казалось бы редко встречающейся проблемы, когда пропадают названия папок и файлов в windows 10 (или других версиях), исчезает текст в ворде, все буквы, надписи в окнах и подобное творится, всегда можно найти способ лечения.
Именно этот случай, почти на 100% уверен, должен решать один из описанных выше 4-х способов, ну или 5-й, связанный с восстановлением.
Плохо, конечно, если у вас система не настроена на автоматическое создание контрольных точек или не делаете вручную резервные копии диска «С» (на котором установлена система), что позволило бы с легкостью вернуть систему к жизни, без дополнительных заморочек.
Рекомендую об этом позаботиться, ведь это лучше, чем потом мучиться с поиском решения.
Если не помог ни один из описанных в заметке способов, пишите, может сумеем подобрать иной вариант. Также пишите, пожалуйста, вопросы, если что-то непонятно по заметке. Кстати, недавно обнаружилось, что не приходили уведомления о новых комментариях, из-за чего я оставил много людей без ответа. Сейчас ситуация нормализована, теперь проверяю вручную и всем отвечу! 😉
Сделай репост – выиграй ноутбук!
Каждый месяц 1 числа iBook.pro разыгрывает подарки.
- Нажми на одну из кнопок соц. сетей
- Получи персональный купон
- Выиграй ноутбук LENOVO или HP
—> LENOVO или HP от 40-50 т.р., 8-16ГБ DDR4, SSD, экран 15.6″, Windows 10
Спасибо, что поделились своим способом решения проблемы!
Рад помочь и спасибо, что отписались о решении проблемы 🙂
Как включить заголовок в приложении «Параметры» в Windows 10
В данной статье показаны действия, с помощью которых можно включить или отключить заголовок в приложении «Параметры» в операционной системе Windows 10.
Разработчики операционной системы Windows 10 постоянно работают над обновлением встроенного приложения «Параметры», и начиная с Windows 10 версии 1903, пользователям доступен новый заголовок в приложении «Параметры».
При чистой установке или при обновлении операционной системы, заголовок в приложении «Параметры» по умолчанию отключен и не отображается, но при необходимости можно включить или отключить его отображение.
Обновленное приложение «Параметры» имеет новый заголовок, который отображает некоторую важную информацию, связанную с учетной записью пользователя и с операционной системой.
Наряду с информацией об учетной записи пользователя, которая включает ваше имя и адрес электронной почты, используемый для учетной записи Майкрософт, новая область заголовка также содержит ряд ссылок для быстрого доступа к странице параметров Центра Обновления Windows и странице параметров телефона. Кроме того, есть ссылка на OneDrive и Microsoft Rewards.
Как включить заголовок в приложении «Параметры» в Windows 10
Чтобы включить заголовок в приложении «Параметры», в зависимости от разрядности вашей операционной системы, скачайте по ссылкам ниже нужный архив с программой mach2 .
Для 32-х разрядной операционной системы, скачайте архив mach2_0.3.0.0_x86.zip по этой ➯
ссылке
Извлеките файлы из архива в любое место и откройте в проводнике Windows папку с программой mach2.exe
Теперь в этой же папке последовательно выберите меню Файл > Запустить Windows PowerShell ► Запустить Windows PowerShell от имени администратора
При появлении запроса контроля учетных записей нажмите кнопку Да для подтверждения.
В открывшемся окне Администратор: Windows PowerShell выполните следующую команду:
После выполнения команды, чтобы изменения вступили в силу, закройте и заново откройте приложение «Параметры» или перезагрузите компьютер. Результат показан на скриншоте ниже.
Как отключить заголовок в приложении «Параметры» в Windows 10
Чтобы отключить заголовок в приложении «Параметры», в зависимости от разрядности вашей операционной системы, скачайте по ссылкам в предыдущем разделе нужный архив с программой mach2 .
Затем извлеките файлы из архива в любое место и откройте в проводнике Windows папку с программой mach2.exe
Теперь в этой же папке последовательно выберите меню Файл > Запустить Windows PowerShell ► Запустить Windows PowerShell от имени администратора
При появлении запроса контроля учетных записей нажмите кнопку Да для подтверждения.
В открывшемся окне Администратор: Windows PowerShell выполните следующую команду:
После выполнения команды, чтобы изменения вступили в силу, закройте и заново откройте приложение «Параметры» или перезагрузите компьютер. Результат показан на скриншоте ниже.
Используя рассмотренные выше действия, можно включить или отключить заголовок в приложении «Параметры» в операционной системе Windows 10.
Как включить заголовок в приложении «Параметры» в Windows 10
В данной статье показаны действия, с помощью которых можно включить или отключить заголовок в приложении «Параметры» в операционной системе Windows 10.
Разработчики операционной системы Windows 10 постоянно работают над обновлением встроенного приложения «Параметры», и начиная с Windows 10 версии 1903, пользователям доступен новый заголовок в приложении «Параметры».
При чистой установке или при обновлении операционной системы, заголовок в приложении «Параметры» по умолчанию отключен и не отображается, но при необходимости можно включить или отключить его отображение.
Обновленное приложение «Параметры» имеет новый заголовок, который отображает некоторую важную информацию, связанную с учетной записью пользователя и с операционной системой.
Наряду с информацией об учетной записи пользователя, которая включает ваше имя и адрес электронной почты, используемый для учетной записи Майкрософт, новая область заголовка также содержит ряд ссылок для быстрого доступа к странице параметров Центра Обновления Windows и странице параметров телефона. Кроме того, есть ссылка на OneDrive и Microsoft Rewards.
Как включить заголовок в приложении «Параметры» в Windows 10
Чтобы включить заголовок в приложении «Параметры», в зависимости от разрядности вашей операционной системы, скачайте по ссылкам ниже нужный архив с программой mach2 .
Для 32-х разрядной операционной системы, скачайте архив mach2_0.3.0.0_x86.zip по этой ➯
ссылке
Извлеките файлы из архива в любое место и откройте в проводнике Windows папку с программой mach2.exe
Теперь в этой же папке последовательно выберите меню Файл > Запустить Windows PowerShell ► Запустить Windows PowerShell от имени администратора
При появлении запроса контроля учетных записей нажмите кнопку Да для подтверждения.
В открывшемся окне Администратор: Windows PowerShell выполните следующую команду:
После выполнения команды, чтобы изменения вступили в силу, закройте и заново откройте приложение «Параметры» или перезагрузите компьютер. Результат показан на скриншоте ниже.
Как отключить заголовок в приложении «Параметры» в Windows 10
Чтобы отключить заголовок в приложении «Параметры», в зависимости от разрядности вашей операционной системы, скачайте по ссылкам в предыдущем разделе нужный архив с программой mach2 .
Затем извлеките файлы из архива в любое место и откройте в проводнике Windows папку с программой mach2.exe
Теперь в этой же папке последовательно выберите меню Файл > Запустить Windows PowerShell ► Запустить Windows PowerShell от имени администратора
При появлении запроса контроля учетных записей нажмите кнопку Да для подтверждения.
В открывшемся окне Администратор: Windows PowerShell выполните следующую команду:
После выполнения команды, чтобы изменения вступили в силу, закройте и заново откройте приложение «Параметры» или перезагрузите компьютер. Результат показан на скриншоте ниже.
Используя рассмотренные выше действия, можно включить или отключить заголовок в приложении «Параметры» в операционной системе Windows 10.