mirror of
https://github.com/UltraCoderRU/screen-resolution-changer.git
synced 2026-01-28 04:05:14 +00:00
Add sources
This commit is contained in:
parent
19d624f45c
commit
3412245ae7
4 changed files with 244 additions and 0 deletions
118
.clang-format
Normal file
118
.clang-format
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
---
|
||||
BasedOnStyle: WebKit
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignConsecutiveAssignments: false
|
||||
AlignConsecutiveBitFields: false
|
||||
AlignConsecutiveDeclarations: false
|
||||
AlignEscapedNewlines: DontAlign
|
||||
AlignOperands: Align
|
||||
AlignTrailingComments: true
|
||||
AllowAllArgumentsOnNextLine: true
|
||||
AllowAllConstructorInitializersOnNextLine: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
AllowShortBlocksOnASingleLine: Never
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortEnumsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: InlineOnly
|
||||
AllowShortIfStatementsOnASingleLine: Never
|
||||
AllowShortLambdasOnASingleLine: Inline
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: true
|
||||
AlwaysBreakTemplateDeclarations: Yes
|
||||
BinPackArguments: true
|
||||
BinPackParameters: false
|
||||
BraceWrapping:
|
||||
AfterCaseLabel: true
|
||||
AfterClass: true
|
||||
AfterControlStatement: Always
|
||||
AfterEnum: true
|
||||
AfterFunction: true
|
||||
AfterNamespace: false
|
||||
AfterStruct: true
|
||||
AfterUnion: true
|
||||
AfterExternBlock: false
|
||||
BeforeCatch: true
|
||||
BeforeElse: true
|
||||
BeforeLambdaBody: true
|
||||
BeforeWhile: true
|
||||
IndentBraces: false
|
||||
SplitEmptyFunction: true
|
||||
SplitEmptyRecord: true
|
||||
SplitEmptyNamespace: true
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeBraces: Custom
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
BreakInheritanceList: BeforeColon
|
||||
BreakStringLiterals: true
|
||||
ColumnLimit: 100
|
||||
CompactNamespaces: false
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
ContinuationIndentWidth: 4
|
||||
Cpp11BracedListStyle: true
|
||||
DeriveLineEnding: true
|
||||
DerivePointerAlignment: false
|
||||
DisableFormat: false
|
||||
FixNamespaceComments: true
|
||||
IncludeBlocks: Regroup
|
||||
IncludeCategories:
|
||||
- Regex: '^.*Private[.]h"'
|
||||
Priority: 0
|
||||
- Regex: '^".*[.]pb[.]h"'
|
||||
Priority: 2
|
||||
- Regex: '^".*[.]h"'
|
||||
Priority: 1
|
||||
- Regex: '^<boost/.*>'
|
||||
Priority: 5
|
||||
- Regex: '^<.*([.]h|[.]hpp)>'
|
||||
Priority: 3
|
||||
- Regex: '^<queue>'
|
||||
Priority: 6
|
||||
- Regex: '^<Q.*>'
|
||||
Priority: 4
|
||||
- Regex: '^<.*>'
|
||||
Priority: 6
|
||||
IndentCaseBlocks: false
|
||||
IndentCaseLabels: false
|
||||
IndentExternBlock: NoIndent
|
||||
IndentGotoLabels: false
|
||||
IndentPPDirectives: None
|
||||
IndentWidth: 4
|
||||
IndentWrappedFunctionNames: false
|
||||
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||
Language: Cpp
|
||||
MaxEmptyLinesToKeep: 2
|
||||
NamespaceIndentation: None
|
||||
PenaltyExcessCharacter: 10
|
||||
PointerAlignment: Left
|
||||
ReflowComments: true
|
||||
SortIncludes: true
|
||||
SortUsingDeclarations: true
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceAfterLogicalNot: false
|
||||
SpaceAfterTemplateKeyword: true
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeCpp11BracedList: false
|
||||
SpaceBeforeCtorInitializerColon: true
|
||||
SpaceBeforeInheritanceColon: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceBeforeRangeBasedForLoopColon: true
|
||||
SpaceBeforeSquareBrackets: false
|
||||
SpaceInEmptyBlock: false
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInAngles: false
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInConditionalStatement: false
|
||||
SpacesInContainerLiterals: false
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
Standard: c++14
|
||||
StatementMacros: ['Q_UNUSED']
|
||||
TabWidth: 4
|
||||
UseCRLF: false
|
||||
UseTab: ForIndentation
|
||||
|
||||
...
|
||||
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
cmake-build-*
|
||||
.idea
|
||||
9
CMakeLists.txt
Normal file
9
CMakeLists.txt
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
cmake_minimum_required(VERSION 3.1)
|
||||
project(screen-resolution-changer CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
|
||||
|
||||
add_executable(screen-resolution-changer WIN32 main.cpp)
|
||||
115
main.cpp
Normal file
115
main.cpp
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
#include <Windows.h>
|
||||
|
||||
#include <optional>
|
||||
#include <string>
|
||||
|
||||
std::optional<DEVMODE> setScreenResolution(int width, int height)
|
||||
{
|
||||
DEVMODE prevMode;
|
||||
DEVMODE devMode;
|
||||
|
||||
ZeroMemory(&devMode, sizeof(DEVMODE));
|
||||
devMode.dmSize = sizeof(DEVMODE);
|
||||
|
||||
if (!EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devMode))
|
||||
return std::nullopt;
|
||||
|
||||
CopyMemory(&prevMode, &devMode, sizeof(DEVMODE));
|
||||
devMode.dmPelsWidth = width;
|
||||
devMode.dmPelsHeight = height;
|
||||
|
||||
if (ChangeDisplaySettingsEx(NULL, &devMode, NULL, 0, NULL) == DISP_CHANGE_SUCCESSFUL)
|
||||
return prevMode;
|
||||
else
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
bool restoreScreenResolution(DEVMODE& mode)
|
||||
{
|
||||
return ChangeDisplaySettingsEx(NULL, &mode, NULL, 0, NULL) == DISP_CHANGE_SUCCESSFUL;
|
||||
}
|
||||
|
||||
bool executeProgram(std::string command)
|
||||
{
|
||||
STARTUPINFO si;
|
||||
ZeroMemory(&si, sizeof(si));
|
||||
si.cb = sizeof(si);
|
||||
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory(&pi, sizeof(pi));
|
||||
|
||||
if (CreateProcess(NULL, command.data(), NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi))
|
||||
{
|
||||
WaitForSingleObject(pi.hProcess, INFINITE);
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
void showError(const char* message)
|
||||
{
|
||||
MessageBox(NULL, message, "Error", MB_OK);
|
||||
}
|
||||
|
||||
void showUsage()
|
||||
{
|
||||
showError(
|
||||
"Usage:\n"
|
||||
"screen-resolution-changer.exe <width> <height> <executable> [args...]");
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
if (argc < 4)
|
||||
{
|
||||
showUsage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
unsigned int width = 0;
|
||||
unsigned int height = 0;
|
||||
|
||||
try
|
||||
{
|
||||
width = std::stoi(argv[1]);
|
||||
height = std::stoi(argv[2]);
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
showUsage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
std::string command = argv[3];
|
||||
for (int i = 4; i < argc; i++)
|
||||
command.append(" ").append(argv[i]);
|
||||
|
||||
auto prevMode = setScreenResolution(width, height);
|
||||
if (prevMode)
|
||||
{
|
||||
int result = 1;
|
||||
if (executeProgram(command))
|
||||
result = 0;
|
||||
else
|
||||
{
|
||||
result = 1;
|
||||
showError("Failed to start application");
|
||||
}
|
||||
|
||||
if (restoreScreenResolution(*prevMode))
|
||||
return result;
|
||||
else
|
||||
{
|
||||
showError("Failed to restore screen resolution");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
showError("Failed to change screen resolution");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue