Compare commits
447 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
801096299b | ||
|
|
5ed1de0fcf | ||
|
|
0ec0a382e9 | ||
|
|
e810adb358 | ||
|
|
dc6c94fe4a | ||
|
|
8479c129ff | ||
|
|
3173c2e688 | ||
|
|
730ba0a2f9 | ||
|
|
d26a83287d | ||
|
|
47deb669d1 | ||
|
|
a30f5d801b | ||
|
|
75f4b9f2c5 | ||
|
|
2289f36ba5 | ||
|
|
6322e25e78 | ||
|
|
62c0147548 | ||
|
|
9bd2688da2 | ||
|
|
9649814085 | ||
|
|
1ebc2021f6 | ||
|
|
52b165f250 | ||
|
|
b2ed390bdf | ||
|
|
1588f84c97 | ||
|
|
a3a2fdfe14 | ||
|
|
2c867eb960 | ||
|
|
6fbf4f2a49 | ||
|
|
d4ecb2bcf3 | ||
|
|
c70c6ef4d6 | ||
|
|
5d77d5c700 | ||
|
|
89f096778d | ||
|
|
2b9fc913ad | ||
|
|
4acbf5adf1 | ||
|
|
48ea1b588f | ||
|
|
cb15161fc4 | ||
|
|
d95a612788 | ||
|
|
0a724926ee | ||
|
|
353ed998db | ||
|
|
0afee18f20 | ||
|
|
8154883d49 | ||
|
|
feb4198c0f | ||
|
|
6edf2d9447 | ||
|
|
25f0af1103 | ||
|
|
4f9cc4a94e | ||
|
|
e973f09f4e | ||
|
|
cd0662e11f | ||
|
|
ee43af2824 | ||
|
|
d620ca010c | ||
|
|
6bd77ab45b | ||
|
|
99a490996d | ||
|
|
096ea3b8e9 | ||
|
|
5f10f5b1e8 | ||
|
|
36219383ce | ||
|
|
78862c6558 | ||
|
|
b53a46bb3b | ||
|
|
15a681af3b | ||
|
|
6341ec7d34 | ||
|
|
596c47d371 | ||
|
|
7ff8fec35c | ||
|
|
b96185222c | ||
|
|
3346bd5f0e | ||
|
|
34404feb5b | ||
|
|
552bc1020d | ||
|
|
6d0bb5bef7 | ||
|
|
00d80ce7a9 | ||
|
|
08e1ed54cd | ||
|
|
97a22c59f7 | ||
|
|
d2aa5e9c42 | ||
|
|
2cb0ffab4b | ||
|
|
e3cb2bb4a1 | ||
|
|
5a734c00c1 | ||
|
|
d85ec73a27 | ||
|
|
4b9eb99870 | ||
|
|
c9b939b876 | ||
|
|
9562f77c6f | ||
|
|
7120d2a009 | ||
|
|
4fa4295748 | ||
|
|
23f28a8ce5 | ||
|
|
a94321df04 | ||
|
|
9917f5543c | ||
|
|
78367727ae | ||
|
|
32b83d724d | ||
|
|
77b420483d | ||
|
|
9b7842a5e9 | ||
|
|
bee7f35475 | ||
|
|
2daf1f5434 | ||
|
|
e979bf708f | ||
|
|
4d60b1f36d | ||
|
|
8a7c35c7cc | ||
|
|
2ecdcd196d | ||
|
|
fdd2373b37 | ||
|
|
ca7ed6c7e9 | ||
|
|
0cad6bd7a9 | ||
|
|
4545eac93d | ||
|
|
c43e4937d6 | ||
|
|
e74d730f0c | ||
|
|
676da38b5f | ||
|
|
b3563e0857 | ||
|
|
b2a01a8bdc | ||
|
|
74fd05d048 | ||
|
|
12dc05c5b9 | ||
|
|
e82dab5e7c | ||
|
|
602dfea1a6 | ||
|
|
c13a6e9ded | ||
|
|
e11027963f | ||
|
|
9d2b8b506e | ||
|
|
988c9e11dd | ||
|
|
2c6bb32e4a | ||
|
|
e33a0d05ed | ||
|
|
1c283766aa | ||
|
|
f2ef6d197f | ||
|
|
13ec0f8911 | ||
|
|
fcf213f1a0 | ||
|
|
c73b4fce97 | ||
|
|
aab1e08729 | ||
|
|
cf3a84aa3d | ||
|
|
8d119b386d | ||
|
|
0605e63433 | ||
|
|
4634404ed4 | ||
|
|
dcfaf665cd | ||
|
|
15e791cbfd | ||
|
|
5d86c821f6 | ||
|
|
e5de404e5c | ||
|
|
13aa98e954 | ||
|
|
75c397d7a4 | ||
|
|
0ad8efdb7d | ||
|
|
2064f29433 | ||
|
|
890c50d90e | ||
|
|
bd207113f8 | ||
|
|
650a5ff5c0 | ||
|
|
01ce91a474 | ||
|
|
253e1eb095 | ||
|
|
b95768d547 | ||
|
|
dfbfd16d23 | ||
|
|
3eeac0353a | ||
|
|
5e7c9a4191 | ||
|
|
ee84ba6304 | ||
|
|
d15c6cb073 | ||
|
|
1e683a0884 | ||
|
|
1ad48bf763 | ||
|
|
dcc052a574 | ||
|
|
38fca560df | ||
|
|
7e0459bd44 | ||
|
|
228ad70b8d | ||
|
|
b42e565cd6 | ||
|
|
e021d59737 | ||
|
|
dba7967ad5 | ||
|
|
a7a7170676 | ||
|
|
1d43ca3ce4 | ||
|
|
ff7618f16f | ||
|
|
bb947bf8bf | ||
|
|
63092d8415 | ||
|
|
6fbce2f495 | ||
|
|
8d89a04608 | ||
|
|
0cbc48d526 | ||
|
|
81013ca0be | ||
|
|
af2509fc17 | ||
|
|
136b5b4f55 | ||
|
|
4e2abff942 | ||
|
|
2c8a11fc24 | ||
|
|
8af8823ee4 | ||
|
|
ec0a1b710e | ||
|
|
2ac2e84161 | ||
|
|
14dc1741f7 | ||
|
|
fbed195194 | ||
|
|
0d002edf65 | ||
|
|
28a17562a8 | ||
|
|
583cb677d0 | ||
|
|
1888fe7bd9 | ||
|
|
089b339e61 | ||
|
|
cab4a04339 | ||
|
|
7ab3b450cd | ||
|
|
ea2dc7b75d | ||
|
|
ccd69a8628 | ||
|
|
c1d23159a0 | ||
|
|
1c865624e6 | ||
|
|
4853c09c2c | ||
|
|
08704d6826 | ||
|
|
6edbcf5ecd | ||
|
|
7702dc8e38 | ||
|
|
94391358ef | ||
|
|
feecd193ac | ||
|
|
444f7c76f0 | ||
|
|
701423fa0e | ||
|
|
7b3a6d319b | ||
|
|
8bc9325b3f | ||
|
|
64195c5082 | ||
|
|
2297532323 | ||
|
|
daac8b0a45 | ||
|
|
f061e3f43a | ||
|
|
85e02549f1 | ||
|
|
9053764930 | ||
|
|
64871e5554 | ||
|
|
b1c778b30d | ||
|
|
6932bb1889 | ||
|
|
c90a342ce8 | ||
|
|
f223ca4a33 | ||
|
|
023607da4b | ||
|
|
264631ab77 | ||
|
|
1bd5d79983 | ||
|
|
83b184a061 | ||
|
|
9ff572b8f6 | ||
|
|
cdb633be04 | ||
|
|
7cb9b1f64f | ||
|
|
06be8c726e | ||
|
|
265c6ce417 | ||
|
|
add852ce5d | ||
|
|
d4a5164b16 | ||
|
|
14618ee19e | ||
|
|
0b3a75e373 | ||
|
|
64e390a61f | ||
|
|
1cd808de07 | ||
|
|
d82f1c8d70 | ||
|
|
9189cf0a46 | ||
|
|
3a7c4278a0 | ||
|
|
7065ba8661 | ||
|
|
1bce4a4b51 | ||
|
|
468f9c4034 | ||
|
|
4d347df45c | ||
|
|
d7f1d1d5fd | ||
|
|
6800ae38dd | ||
|
|
9b2b96fbf0 | ||
|
|
04b3a15d8f | ||
|
|
aae0570340 | ||
|
|
b142d566da | ||
|
|
a9115d0dff | ||
|
|
e3a3e81245 | ||
|
|
c50c1807ca | ||
|
|
5767320437 | ||
|
|
74846097db | ||
|
|
5b89556ed3 | ||
|
|
845b182b55 | ||
|
|
b7cfd04560 | ||
|
|
6ffd464ec4 | ||
|
|
e7dd3ce203 | ||
|
|
d06dae9015 | ||
|
|
1b208e1a74 | ||
|
|
6befab190b | ||
|
|
5d3eaa0055 | ||
|
|
667f1a997c | ||
|
|
4542221a58 | ||
|
|
5fd7b74519 | ||
|
|
014ee635d6 | ||
|
|
1dff60d574 | ||
|
|
7395f0be69 | ||
|
|
e3019a313a | ||
|
|
9653b81cd3 | ||
|
|
9713cb6fa4 | ||
|
|
10053eda10 | ||
|
|
ef1bbc1fce | ||
|
|
3fde8c1fa9 | ||
|
|
efd6707e61 | ||
|
|
8032ea3fc7 | ||
|
|
d0a232d888 | ||
|
|
a6bd18f019 | ||
|
|
a09c252c2e | ||
|
|
99d3c61897 | ||
|
|
4a6decb0be | ||
|
|
80b9fdb8ac | ||
|
|
e3c293942c | ||
|
|
42e910e635 | ||
|
|
18b6ae07b2 | ||
|
|
fa2875fbee | ||
|
|
f2bfb24fb4 | ||
|
|
adc81721ac | ||
|
|
9da061d621 | ||
|
|
274c04bf61 | ||
|
|
2d286ca04f | ||
|
|
2c1fa01863 | ||
|
|
0370ef7bc0 | ||
|
|
2f2ef23ee4 | ||
|
|
756ed44741 | ||
|
|
efb6a087b4 | ||
|
|
4e6f55c24d | ||
|
|
c029df357a | ||
|
|
8d19b5f89c | ||
|
|
7683e68df3 | ||
|
|
e45bcdf8a5 | ||
|
|
ab8d42c216 | ||
|
|
d248fcf384 | ||
|
|
9bb5e41a5d | ||
|
|
bc965c003d | ||
|
|
a6cfc91de2 | ||
|
|
9ca6ec657f | ||
|
|
89d7930323 | ||
|
|
e26d26b498 | ||
|
|
a6d0dde4b0 | ||
|
|
f68d53aaf4 | ||
|
|
a2ea3d18fd | ||
|
|
f77fcc940f | ||
|
|
dd4d85f254 | ||
|
|
2afbde814f | ||
|
|
b6b06a3802 | ||
|
|
4d58945688 | ||
|
|
9aaf0159e5 | ||
|
|
3cbaf1eb52 | ||
|
|
c76fbeab37 | ||
|
|
15d580bbe3 | ||
|
|
2ec64bf8b5 | ||
|
|
254be71e88 | ||
|
|
e9ec8f0e8f | ||
|
|
0ef44a0495 | ||
|
|
e725760b24 | ||
|
|
a83ab4884e | ||
|
|
7bfd10c65d | ||
|
|
67b541b145 | ||
|
|
f1ae14652f | ||
|
|
223ead2f4e | ||
|
|
a211dd412f | ||
|
|
550e9fc036 | ||
|
|
8fe01e8790 | ||
|
|
f0abe22b5d | ||
|
|
ef0993e442 | ||
|
|
62ac478761 | ||
|
|
a7e8ba3241 | ||
|
|
b46f0fb887 | ||
|
|
a39c084bdf | ||
|
|
f0c291bea4 | ||
|
|
d04a20367b | ||
|
|
888e49fe40 | ||
|
|
4875a22f38 | ||
|
|
ea2e8a7c24 | ||
|
|
6ec94e4ac3 | ||
|
|
5334d1e4ed | ||
|
|
9f339806d4 | ||
|
|
54a4668e2a | ||
|
|
71d2a6ce05 | ||
|
|
92d1b97b95 | ||
|
|
4b9a53cef8 | ||
|
|
068694d7d1 | ||
|
|
43c6def162 | ||
|
|
306697f026 | ||
|
|
c5a32cc9d5 | ||
|
|
51acd9a612 | ||
|
|
457a37049c | ||
|
|
6d2cece4f2 | ||
|
|
265611009c | ||
|
|
2714b6dca7 | ||
|
|
f6de5eba64 | ||
|
|
13f7c81689 | ||
|
|
8c0d84b65b | ||
|
|
4e6fa6d9b0 | ||
|
|
be133cd238 | ||
|
|
30f678d08f | ||
|
|
cf201632d5 | ||
|
|
003a19d94b | ||
|
|
6c3d4b9cb2 | ||
|
|
aa62330c1c | ||
|
|
954861f2b1 | ||
|
|
e3e9022111 | ||
|
|
24014dd20f | ||
|
|
321bc2623d | ||
|
|
52b07843a2 | ||
|
|
5038ff2315 | ||
|
|
c8f4c4b0d4 | ||
|
|
319401af5d | ||
|
|
aa30f472ad | ||
|
|
b40eb50e90 | ||
|
|
1f47b031f6 | ||
|
|
84a3f01267 | ||
|
|
f9488fbf2f | ||
|
|
43d2ed656a | ||
|
|
e9fa181d4e | ||
|
|
58aa838e51 | ||
|
|
96c85f69fe | ||
|
|
8f215dafab | ||
|
|
b3636fd447 | ||
|
|
ed579f25d6 | ||
|
|
6a71a64c96 | ||
|
|
ac69f1317e | ||
|
|
4b38d380b5 | ||
|
|
9a2f9afe5b | ||
|
|
ce9ec1b6df | ||
|
|
e68282050b | ||
|
|
6b8f61fab4 | ||
|
|
f59070cb96 | ||
|
|
f47a00fde2 | ||
|
|
b15c15974e | ||
|
|
b5c47de3f2 | ||
|
|
6b88fe67d3 | ||
|
|
3ff2a5f946 | ||
|
|
c73c05c24a | ||
|
|
1131035254 | ||
|
|
1c23f8aad4 | ||
|
|
28aeeb7d57 | ||
|
|
202cb84d12 | ||
|
|
0b4da0a66a | ||
|
|
bfa0a08cbc | ||
|
|
1417593413 | ||
|
|
5d4a08e1e2 | ||
|
|
8cc558e750 | ||
|
|
e0fe292358 | ||
|
|
a0bafa8843 | ||
|
|
b0a6163a1c | ||
|
|
f5805871d3 | ||
|
|
c811d940b1 | ||
|
|
a777929070 | ||
|
|
9f72ba3486 | ||
|
|
d02703cf1c | ||
|
|
4630fee687 | ||
|
|
e5890648b9 | ||
|
|
c292226fa2 | ||
|
|
1c17c705de | ||
|
|
27f5ed50d5 | ||
|
|
02ae48092b | ||
|
|
41d92d76cc | ||
|
|
44c3d9f3c7 | ||
|
|
146150b1e7 | ||
|
|
ccf4ae5126 | ||
|
|
249fef0bb1 | ||
|
|
2ee9110016 | ||
|
|
bc1f3ab530 | ||
|
|
3cd62bc9e1 | ||
|
|
16f6f3f934 | ||
|
|
1f4afedc1d | ||
|
|
c705ce2b5b | ||
|
|
75942ebdb2 | ||
|
|
6d142213c8 | ||
|
|
bfcb97b158 | ||
|
|
f97765c5c2 | ||
|
|
19a8b0dc22 | ||
|
|
f209f211b5 | ||
|
|
81a0019b42 | ||
|
|
3778c255bc | ||
|
|
a6b597affe | ||
|
|
4aaba5cee7 | ||
|
|
cbbe944c2b | ||
|
|
f4d066d407 | ||
|
|
cc96ca9946 | ||
|
|
fb95d9abb2 | ||
|
|
15112cb5c8 | ||
|
|
2632a1b46d | ||
|
|
66a2a1d083 | ||
|
|
aad708d686 | ||
|
|
dba6dae254 | ||
|
|
b26ceccc42 | ||
|
|
4ad0857ec6 | ||
|
|
d49136a542 | ||
|
|
4bbd5da4af | ||
|
|
023d7388bd | ||
|
|
e782467585 | ||
|
|
870ca664c8 | ||
|
|
dd4e89cc97 | ||
|
|
d20aaf9410 | ||
|
|
811ea03ad5 | ||
|
|
414167f008 | ||
|
|
7683f2472b | ||
|
|
6fdffecfb9 | ||
|
|
f1af8b87b3 | ||
|
|
13b02b6c2e |
128
.github/CODE_OF_CONDUCT.md
vendored
Normal file
@@ -0,0 +1,128 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
1
.github/CONTRIBUTING.md
vendored
Normal file
@@ -0,0 +1 @@
|
||||
Please, feel free to contribute. Especially if you own model differnt from G14 2022 and can offer extra features or support.
|
||||
13
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
|
||||
custom: https://www.paypal.com/donate/?hosted_button_id=4HMSHS4EBQWTA
|
||||
42
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
|
||||
---
|
||||
|
||||
|
||||
## NOTE
|
||||
Bug reports without clear information or scenario to reproduce and logs from ``%AppData%\GHelper`` will be closed without answer.
|
||||
Please respect time of the developer. Thanks.
|
||||
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**Clear scenario to Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. Explanation of an error or a bug
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**App Logs**
|
||||
Please include and attach log.txt from ``%AppData%\GHelper``
|
||||
|
||||
**Screenshots or screencasts**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Desktop (please complete the following information):**
|
||||
- OS: [e.g. Windows 11]
|
||||
- Laptop model
|
||||
|
||||
**Asus software**
|
||||
- Armoury crate (or it's services installed)
|
||||
- MyASUS installed
|
||||
- Other Asus services running in background
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
16
.github/SECURITY.md
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 0.25+ | :white_check_mark: |
|
||||
| < 0.24 | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Use this section to tell people how to report a vulnerability.
|
||||
|
||||
Tell them where to go, how often they can expect to get an update on a
|
||||
reported vulnerability, what to expect if the vulnerability is accepted or
|
||||
declined, etc.
|
||||
@@ -1,96 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net6.0-windows8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>True</UseWindowsForms>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<IsPublishable>True</IsPublishable>
|
||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||
<StartupObject>GHelper.Program</StartupObject>
|
||||
<ApplicationIcon>Resources\standard.ico</ApplicationIcon>
|
||||
<SupportedOSPlatformVersion>8.0</SupportedOSPlatformVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="Resources\eco.ico" />
|
||||
<None Remove="Resources\icons8-charging-battery-48.png" />
|
||||
<None Remove="Resources\icons8-laptop-48.png" />
|
||||
<None Remove="Resources\icons8-speed-48.png" />
|
||||
<None Remove="Resources\icons8-video-card-48.png" />
|
||||
<None Remove="Resources\ultimate.ico" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="Resources\standard.ico">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
|
||||
<PackageReference Include="System.Management" Version="7.0.0" />
|
||||
<PackageReference Include="TaskScheduler" Version="2.10.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.Management.Infrastructure">
|
||||
<HintPath>..\..\.nuget\packages\microsoft.management.infrastructure\2.0.0\ref\net451\Microsoft.Management.Infrastructure.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Management.Infrastructure.Native">
|
||||
<HintPath>..\..\.nuget\packages\microsoft.management.infrastructure.runtime.win\2.0.0\runtimes\win10-x64\lib\netstandard1.6\Microsoft.Management.Infrastructure.Native.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="Resources\eco.ico">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Resources\icons8-charging-battery-48.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Resources\icons8-laptop-48.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Resources\icons8-speed-48.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Resources\icons8-video-card-48.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Resources\ultimate.ico">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="Properties\Resources.Designer.cs">
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="Properties\Settings.Designer.cs">
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Update="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2023 Serge
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
418
Program.cs
@@ -1,418 +0,0 @@
|
||||
using Microsoft.Win32.TaskScheduler;
|
||||
using Newtonsoft.Json;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Management;
|
||||
using System.Reflection.Metadata.Ecma335;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
public class ASUSWmi
|
||||
{
|
||||
private ManagementObject mo;
|
||||
private ManagementClass classInstance;
|
||||
|
||||
public const int CPU_Fan = 0x00110013;
|
||||
public const int GPU_Fan = 0x00110014;
|
||||
|
||||
public const int PerformanceMode = 0x00120075;
|
||||
|
||||
public const int GPUEco = 0x00090020;
|
||||
public const int GPUMux = 0x00090016;
|
||||
|
||||
public const int BatteryLimit = 0x00120057;
|
||||
public const int ScreenOverdrive = 0x00050019;
|
||||
|
||||
public const int PerformanceBalanced = 0;
|
||||
public const int PerformanceTurbo = 1;
|
||||
public const int PerformanceSilent = 2;
|
||||
|
||||
public const int GPUModeEco = 0;
|
||||
public const int GPUModeStandard = 1;
|
||||
public const int GPUModeUltimate = 2;
|
||||
|
||||
public ASUSWmi()
|
||||
{
|
||||
this.classInstance = new ManagementClass(new ManagementScope("root\\wmi"), new ManagementPath("AsusAtkWmi_WMNB"), null);
|
||||
foreach (ManagementObject mo in this.classInstance.GetInstances())
|
||||
{
|
||||
this.mo = mo;
|
||||
}
|
||||
}
|
||||
|
||||
private int WMICall(string MethodName, int Device_Id, int Control_status = -1)
|
||||
{
|
||||
ManagementBaseObject inParams = this.classInstance.Methods[MethodName].InParameters;
|
||||
inParams["Device_ID"] = Device_Id;
|
||||
if (Control_status != -1)
|
||||
{
|
||||
inParams["Control_status"] = Control_status;
|
||||
}
|
||||
|
||||
ManagementBaseObject outParams = this.mo.InvokeMethod(MethodName, inParams, null);
|
||||
foreach (PropertyData property in outParams.Properties)
|
||||
{
|
||||
if (property.Name == "device_status")
|
||||
{
|
||||
int status;
|
||||
try
|
||||
{
|
||||
status = int.Parse(property.Value.ToString());
|
||||
status -= 65536;
|
||||
return status;
|
||||
} catch
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if (property.Name == "result")
|
||||
{
|
||||
try
|
||||
{
|
||||
return int.Parse(property.Value.ToString());
|
||||
} catch
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
|
||||
}
|
||||
|
||||
public int DeviceGet(int Device_Id)
|
||||
{
|
||||
return this.WMICall("DSTS", Device_Id);
|
||||
}
|
||||
public int DeviceSet(int Device_Id, int Control_status)
|
||||
{
|
||||
return this.WMICall("DEVS", Device_Id, Control_status);
|
||||
}
|
||||
|
||||
public void SubscribeToEvents(Action<object, EventArrivedEventArgs> EventHandler)
|
||||
{
|
||||
|
||||
ManagementEventWatcher watcher = new ManagementEventWatcher();
|
||||
|
||||
watcher.EventArrived += new EventArrivedEventHandler(EventHandler);
|
||||
watcher.Scope = new ManagementScope("root\\wmi");
|
||||
watcher.Query = new WqlEventQuery("SELECT * FROM AsusAtkWmiEvent");
|
||||
|
||||
watcher.Start();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class Startup
|
||||
{
|
||||
|
||||
static string taskName = "GSharpHelper";
|
||||
|
||||
public Startup()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public bool IsScheduled()
|
||||
{
|
||||
TaskService taskService = new TaskService();
|
||||
return (taskService.RootFolder.AllTasks.Any(t => t.Name == taskName));
|
||||
}
|
||||
|
||||
public void Schedule()
|
||||
{
|
||||
TaskService taskService = new TaskService();
|
||||
|
||||
string strExeFilePath = Application.ExecutablePath;
|
||||
|
||||
if (strExeFilePath is null) return;
|
||||
|
||||
Debug.WriteLine(strExeFilePath);
|
||||
TaskDefinition td = TaskService.Instance.NewTask();
|
||||
td.RegistrationInfo.Description = "GSharpHelper Auto Start";
|
||||
|
||||
LogonTrigger lt = new LogonTrigger();
|
||||
td.Triggers.Add(lt);
|
||||
td.Actions.Add(strExeFilePath);
|
||||
td.Principal.RunLevel = TaskRunLevel.Highest;
|
||||
td.Settings.StopIfGoingOnBatteries = false;
|
||||
td.Settings.DisallowStartIfOnBatteries = false;
|
||||
|
||||
TaskService.Instance.RootFolder.RegisterTaskDefinition(taskName, td);
|
||||
}
|
||||
|
||||
public void UnSchedule()
|
||||
{
|
||||
TaskService taskService = new TaskService();
|
||||
taskService.RootFolder.DeleteTask(taskName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class AppConfig
|
||||
{
|
||||
|
||||
string appPath;
|
||||
string configFile;
|
||||
|
||||
public Dictionary<string, object> config = new Dictionary<string, object>();
|
||||
|
||||
public AppConfig()
|
||||
{
|
||||
|
||||
appPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\GHelper";
|
||||
configFile = appPath + "\\config.json";
|
||||
|
||||
if (!System.IO.Directory.Exists(appPath))
|
||||
System.IO.Directory.CreateDirectory(appPath);
|
||||
|
||||
if (File.Exists(configFile))
|
||||
{
|
||||
string text = File.ReadAllText(configFile);
|
||||
config = JsonConvert.DeserializeObject<Dictionary<string, object>>(text);
|
||||
if (config is null)
|
||||
initConfig();
|
||||
}
|
||||
else
|
||||
{
|
||||
initConfig();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void initConfig()
|
||||
{
|
||||
config = new Dictionary<string, object>();
|
||||
config["performance_mode"] = 0;
|
||||
string jsonString = JsonConvert.SerializeObject(config);
|
||||
File.WriteAllText(configFile, jsonString);
|
||||
}
|
||||
|
||||
public int getConfig(string name)
|
||||
{
|
||||
if (config.ContainsKey(name))
|
||||
return int.Parse(config[name].ToString());
|
||||
else return -1;
|
||||
}
|
||||
|
||||
public void setConfig(string name, int value)
|
||||
{
|
||||
config[name] = value;
|
||||
string jsonString = JsonConvert.SerializeObject(config);
|
||||
File.WriteAllText(configFile, jsonString);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class NativeMethods
|
||||
{
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
||||
public struct DEVMODE
|
||||
{
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
|
||||
public string dmDeviceName;
|
||||
|
||||
public short dmSpecVersion;
|
||||
public short dmDriverVersion;
|
||||
public short dmSize;
|
||||
public short dmDriverExtra;
|
||||
public int dmFields;
|
||||
public int dmPositionX;
|
||||
public int dmPositionY;
|
||||
public int dmDisplayOrientation;
|
||||
public int dmDisplayFixedOutput;
|
||||
public short dmColor;
|
||||
public short dmDuplex;
|
||||
public short dmYResolution;
|
||||
public short dmTTOption;
|
||||
public short dmCollate;
|
||||
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
|
||||
public string dmFormName;
|
||||
|
||||
public short dmLogPixels;
|
||||
public short dmBitsPerPel;
|
||||
public int dmPelsWidth;
|
||||
public int dmPelsHeight;
|
||||
public int dmDisplayFlags;
|
||||
public int dmDisplayFrequency;
|
||||
public int dmICMMethod;
|
||||
public int dmICMIntent;
|
||||
public int dmMediaType;
|
||||
public int dmDitherType;
|
||||
public int dmReserved1;
|
||||
public int dmReserved2;
|
||||
public int dmPanningWidth;
|
||||
public int dmPanningHeight;
|
||||
};
|
||||
|
||||
// PInvoke declaration for EnumDisplaySettings Win32 API
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int EnumDisplaySettingsExA(
|
||||
string lpszDeviceName,
|
||||
int iModeNum,
|
||||
ref DEVMODE lpDevMode);
|
||||
|
||||
// PInvoke declaration for ChangeDisplaySettings Win32 API
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int ChangeDisplaySettings(
|
||||
ref DEVMODE lpDevMode,
|
||||
int dwFlags);
|
||||
|
||||
public const int ENUM_CURRENT_SETTINGS = -1;
|
||||
|
||||
|
||||
public static DEVMODE CreateDevmode()
|
||||
{
|
||||
DEVMODE dm = new DEVMODE();
|
||||
dm.dmDeviceName = new String(new char[32]);
|
||||
dm.dmFormName = new String(new char[32]);
|
||||
dm.dmSize = (short)Marshal.SizeOf(dm);
|
||||
return dm;
|
||||
}
|
||||
|
||||
public static int GetRefreshRate()
|
||||
{
|
||||
DEVMODE dm = CreateDevmode();
|
||||
|
||||
int frequency = -1;
|
||||
|
||||
if (0 != NativeMethods.EnumDisplaySettingsExA(null, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm))
|
||||
{
|
||||
Debug.WriteLine(JsonConvert.SerializeObject(dm));
|
||||
frequency = dm.dmDisplayFrequency;
|
||||
}
|
||||
|
||||
return frequency;
|
||||
}
|
||||
|
||||
public static void SetRefreshRate(int frequency = 120)
|
||||
{
|
||||
DEVMODE dm = CreateDevmode();
|
||||
|
||||
if (0 != NativeMethods.EnumDisplaySettingsExA(null,NativeMethods.ENUM_CURRENT_SETTINGS, ref dm))
|
||||
{
|
||||
dm.dmDisplayFrequency = frequency;
|
||||
int iRet = NativeMethods.ChangeDisplaySettings(ref dm, 0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
public static NotifyIcon trayIcon;
|
||||
|
||||
public static ASUSWmi wmi;
|
||||
public static AppConfig config;
|
||||
|
||||
public static SettingsForm settingsForm;
|
||||
public static Startup scheduler;
|
||||
|
||||
// The main entry point for the application
|
||||
public static void Main()
|
||||
{
|
||||
trayIcon = new NotifyIcon
|
||||
{
|
||||
Text = "G14 Helper",
|
||||
Icon = GHelper.Properties.Resources.standard,
|
||||
Visible = true
|
||||
};
|
||||
|
||||
trayIcon.MouseClick += TrayIcon_MouseClick; ;
|
||||
|
||||
config = new AppConfig();
|
||||
|
||||
wmi = new ASUSWmi();
|
||||
wmi.SubscribeToEvents(WatcherEventArrived);
|
||||
|
||||
scheduler = new Startup();
|
||||
|
||||
settingsForm = new SettingsForm();
|
||||
|
||||
settingsForm.InitGPUMode();
|
||||
|
||||
settingsForm.SetPerformanceMode(config.getConfig("performance_mode"));
|
||||
settingsForm.SetBatteryChargeLimit(config.getConfig("charge_limit"));
|
||||
|
||||
settingsForm.VisualiseGPUAuto(config.getConfig("gpu_auto"));
|
||||
settingsForm.VisualiseScreenAuto(config.getConfig("screen_auto"));
|
||||
|
||||
settingsForm.SetStartupCheck(scheduler.IsScheduled());
|
||||
|
||||
Application.Run();
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void WatcherEventArrived(object sender, EventArrivedEventArgs e)
|
||||
{
|
||||
var collection = (ManagementEventWatcher)sender;
|
||||
|
||||
if (e.NewEvent is null) return;
|
||||
|
||||
int EventID = int.Parse(e.NewEvent["EventID"].ToString());
|
||||
|
||||
Debug.WriteLine(EventID);
|
||||
|
||||
switch (EventID)
|
||||
{
|
||||
case 56: // Rog button
|
||||
case 174: // FN+F5
|
||||
settingsForm.BeginInvoke(delegate
|
||||
{
|
||||
settingsForm.CyclePerformanceMode();
|
||||
});
|
||||
return;
|
||||
case 87: // Battery
|
||||
settingsForm.BeginInvoke(delegate
|
||||
{
|
||||
settingsForm.AutoGPUMode(0);
|
||||
settingsForm.AutoScreen(0);
|
||||
});
|
||||
return;
|
||||
case 88: // Plugged
|
||||
settingsForm.SetBatteryChargeLimit(config.getConfig("charge_limit"));
|
||||
settingsForm.BeginInvoke(delegate
|
||||
{
|
||||
settingsForm.AutoGPUMode(1);
|
||||
settingsForm.AutoScreen(1);
|
||||
});
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
static void TrayIcon_MouseClick(object? sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Right)
|
||||
{
|
||||
if (settingsForm.Visible)
|
||||
settingsForm.Hide();
|
||||
else
|
||||
{
|
||||
settingsForm.Show();
|
||||
settingsForm.Activate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void OnExit(object sender, EventArgs e)
|
||||
{
|
||||
trayIcon.Visible = false;
|
||||
Application.Exit();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
133
Properties/Resources.Designer.cs
generated
@@ -1,133 +0,0 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace GHelper.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GHelper.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||
/// </summary>
|
||||
internal static System.Drawing.Icon eco {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("eco", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_charging_battery_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-charging-battery-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_laptop_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-laptop-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_speed_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-speed-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_video_card_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-video-card-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||
/// </summary>
|
||||
internal static System.Drawing.Icon standard {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("standard", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||
/// </summary>
|
||||
internal static System.Drawing.Icon ultimate {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ultimate", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"profiles": {
|
||||
"GHelper": {
|
||||
"commandName": "Project",
|
||||
"workingDirectory": "C:\\Users\\serge\\source\\GHelper"
|
||||
}
|
||||
}
|
||||
}
|
||||
47
README.md
@@ -1,47 +0,0 @@
|
||||
# G14-Helper
|
||||
|
||||
A tiny system tray utility that allows you set performance and GPU profiles for your laptop. Same as ASUS Armory Crate does but without it completely!.
|
||||
|
||||
Designed for Asus Zephyrus G14 2022 (with AMD Radeon iGPU and dGPU). But could and should potentially work for G14 of 2021 and 2020, G15, X FLOW, and other ROG models.
|
||||
|
||||

|
||||
|
||||
## Performance Profile switching
|
||||
|
||||
Profiles are **same** as in Armory Crate, including default fan curves
|
||||
|
||||
1. Silent (minimal or no fans, 45W PPT to CPU)
|
||||
2. Balanced (balanced fans, up to 45W PPT to CPU)
|
||||
3. Turbo (intense fans, 125W PPT total, up to 80W PPT to CPU)
|
||||
|
||||
## GPU Mode switching
|
||||
|
||||
1. Eco mode : only low power iGPU (Radeon 680u) enabled, iGPU drives built in display
|
||||
2. Standard mode (Windows Hybrid) : iGPU and dGPU (Radeon 6700s/6800s) enabled, iGPU drives built in display
|
||||
3. Ultimate mode: iGPU and dGPU enabled, but dGPU drives built in display
|
||||
|
||||
## Extras
|
||||
|
||||
1. **Maximum battery charge rate** limit (60% / 80% / 100%) to preserve your battery
|
||||
2. CPU and GPU relative fan speed monitoring
|
||||
3. Automatic switching of Standard/Eco GPU modes when laptop is plugged / unplugged!
|
||||
4. FN+F5 an M4 (Rog) keys cycle through Performance modes
|
||||
5. Start with windows (optional)
|
||||
|
||||
## How to install
|
||||
|
||||
1. Download latest release from https://github.com/seerge/g14-helper/releases
|
||||
2. Unzip to a folder of your choice
|
||||
3. Run **GHelper.exe**
|
||||
|
||||
Note: Uses low level ASUS WMI commands to do switching and doens't require Armory Crate to be isntalled at all.
|
||||
Therefore requires Administrator priveledges on Windows to run.
|
||||
|
||||
I don`t have Microsoft certificate to sign app yet, so if you set a warning from Windows Defender on launch (Windows Protected your PC), click More Info -> Run anyway.
|
||||
|
||||
Alternatively you can comile and run project by yourself :)
|
||||
|
||||
Settings are located in APPDATA\ROAMING
|
||||
|
||||
P.S.: It's not recommended to use app in combination with Armory Crate, cause they adjust same settings.
|
||||
Please keep in mind, that if you also run MyASUS app periodically it will also try to adjust same battery charge settings
|
||||
482
Settings.Designer.cs
generated
@@ -1,482 +0,0 @@
|
||||
namespace GHelper
|
||||
{
|
||||
partial class SettingsForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.checkStartup = new System.Windows.Forms.CheckBox();
|
||||
this.trackBattery = new System.Windows.Forms.TrackBar();
|
||||
this.labelBattery = new System.Windows.Forms.Label();
|
||||
this.labelBatteryLimit = new System.Windows.Forms.Label();
|
||||
this.pictureBattery = new System.Windows.Forms.PictureBox();
|
||||
this.labelGPUFan = new System.Windows.Forms.Label();
|
||||
this.tableGPU = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.buttonUltimate = new System.Windows.Forms.Button();
|
||||
this.buttonStandard = new System.Windows.Forms.Button();
|
||||
this.buttonEco = new System.Windows.Forms.Button();
|
||||
this.labelGPU = new System.Windows.Forms.Label();
|
||||
this.pictureGPU = new System.Windows.Forms.PictureBox();
|
||||
this.labelCPUFan = new System.Windows.Forms.Label();
|
||||
this.tablePerf = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.buttonTurbo = new System.Windows.Forms.Button();
|
||||
this.buttonBalanced = new System.Windows.Forms.Button();
|
||||
this.buttonSilent = new System.Windows.Forms.Button();
|
||||
this.picturePerf = new System.Windows.Forms.PictureBox();
|
||||
this.labelPerf = new System.Windows.Forms.Label();
|
||||
this.checkGPU = new System.Windows.Forms.CheckBox();
|
||||
this.buttonQuit = new System.Windows.Forms.Button();
|
||||
this.pictureScreen = new System.Windows.Forms.PictureBox();
|
||||
this.labelSreen = new System.Windows.Forms.Label();
|
||||
this.tableScreen = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.button120Hz = new System.Windows.Forms.Button();
|
||||
this.button60Hz = new System.Windows.Forms.Button();
|
||||
this.checkScreen = new System.Windows.Forms.CheckBox();
|
||||
((System.ComponentModel.ISupportInitialize)(this.trackBattery)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBattery)).BeginInit();
|
||||
this.tableGPU.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureGPU)).BeginInit();
|
||||
this.tablePerf.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picturePerf)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureScreen)).BeginInit();
|
||||
this.tableScreen.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// checkStartup
|
||||
//
|
||||
this.checkStartup.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.checkStartup.AutoSize = true;
|
||||
this.checkStartup.Location = new System.Drawing.Point(34, 836);
|
||||
this.checkStartup.Name = "checkStartup";
|
||||
this.checkStartup.Size = new System.Drawing.Size(206, 36);
|
||||
this.checkStartup.TabIndex = 2;
|
||||
this.checkStartup.Text = "Run on Startup";
|
||||
this.checkStartup.UseVisualStyleBackColor = true;
|
||||
this.checkStartup.CheckedChanged += new System.EventHandler(this.checkStartup_CheckedChanged);
|
||||
//
|
||||
// trackBattery
|
||||
//
|
||||
this.trackBattery.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.trackBattery.LargeChange = 20;
|
||||
this.trackBattery.Location = new System.Drawing.Point(23, 744);
|
||||
this.trackBattery.Maximum = 100;
|
||||
this.trackBattery.Minimum = 50;
|
||||
this.trackBattery.Name = "trackBattery";
|
||||
this.trackBattery.Size = new System.Drawing.Size(651, 90);
|
||||
this.trackBattery.SmallChange = 10;
|
||||
this.trackBattery.TabIndex = 3;
|
||||
this.trackBattery.TickFrequency = 10;
|
||||
this.trackBattery.TickStyle = System.Windows.Forms.TickStyle.TopLeft;
|
||||
this.trackBattery.Value = 100;
|
||||
//
|
||||
// labelBattery
|
||||
//
|
||||
this.labelBattery.AutoSize = true;
|
||||
this.labelBattery.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
|
||||
this.labelBattery.Location = new System.Drawing.Point(83, 701);
|
||||
this.labelBattery.Name = "labelBattery";
|
||||
this.labelBattery.Size = new System.Drawing.Size(248, 32);
|
||||
this.labelBattery.TabIndex = 4;
|
||||
this.labelBattery.Text = "Battery Charge Limit";
|
||||
//
|
||||
// labelBatteryLimit
|
||||
//
|
||||
this.labelBatteryLimit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.labelBatteryLimit.AutoSize = true;
|
||||
this.labelBatteryLimit.Location = new System.Drawing.Point(596, 699);
|
||||
this.labelBatteryLimit.Name = "labelBatteryLimit";
|
||||
this.labelBatteryLimit.Size = new System.Drawing.Size(73, 32);
|
||||
this.labelBatteryLimit.TabIndex = 5;
|
||||
this.labelBatteryLimit.Text = "100%";
|
||||
//
|
||||
// pictureBattery
|
||||
//
|
||||
this.pictureBattery.Image = global::GHelper.Properties.Resources.icons8_charging_battery_48;
|
||||
this.pictureBattery.Location = new System.Drawing.Point(32, 693);
|
||||
this.pictureBattery.Name = "pictureBattery";
|
||||
this.pictureBattery.Size = new System.Drawing.Size(48, 48);
|
||||
this.pictureBattery.TabIndex = 6;
|
||||
this.pictureBattery.TabStop = false;
|
||||
//
|
||||
// labelGPUFan
|
||||
//
|
||||
this.labelGPUFan.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.labelGPUFan.AutoSize = true;
|
||||
this.labelGPUFan.Location = new System.Drawing.Point(515, 234);
|
||||
this.labelGPUFan.Name = "labelGPUFan";
|
||||
this.labelGPUFan.Size = new System.Drawing.Size(155, 32);
|
||||
this.labelGPUFan.TabIndex = 8;
|
||||
this.labelGPUFan.Text = "GPU Fan : 0%";
|
||||
//
|
||||
// tableGPU
|
||||
//
|
||||
this.tableGPU.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.tableGPU.ColumnCount = 3;
|
||||
this.tableGPU.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||
this.tableGPU.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||
this.tableGPU.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||
this.tableGPU.Controls.Add(this.buttonUltimate, 2, 0);
|
||||
this.tableGPU.Controls.Add(this.buttonStandard, 1, 0);
|
||||
this.tableGPU.Controls.Add(this.buttonEco, 0, 0);
|
||||
this.tableGPU.Location = new System.Drawing.Point(23, 276);
|
||||
this.tableGPU.Name = "tableGPU";
|
||||
this.tableGPU.RowCount = 1;
|
||||
this.tableGPU.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 106F));
|
||||
this.tableGPU.Size = new System.Drawing.Size(651, 106);
|
||||
this.tableGPU.TabIndex = 7;
|
||||
//
|
||||
// buttonUltimate
|
||||
//
|
||||
this.buttonUltimate.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.buttonUltimate.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.buttonUltimate.FlatAppearance.BorderSize = 0;
|
||||
this.buttonUltimate.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.buttonUltimate.Location = new System.Drawing.Point(444, 10);
|
||||
this.buttonUltimate.Margin = new System.Windows.Forms.Padding(10);
|
||||
this.buttonUltimate.Name = "buttonUltimate";
|
||||
this.buttonUltimate.Size = new System.Drawing.Size(197, 86);
|
||||
this.buttonUltimate.TabIndex = 2;
|
||||
this.buttonUltimate.Text = "Ultimate";
|
||||
this.buttonUltimate.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// buttonStandard
|
||||
//
|
||||
this.buttonStandard.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.buttonStandard.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.buttonStandard.FlatAppearance.BorderSize = 0;
|
||||
this.buttonStandard.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.buttonStandard.Location = new System.Drawing.Point(227, 10);
|
||||
this.buttonStandard.Margin = new System.Windows.Forms.Padding(10);
|
||||
this.buttonStandard.Name = "buttonStandard";
|
||||
this.buttonStandard.Size = new System.Drawing.Size(197, 86);
|
||||
this.buttonStandard.TabIndex = 1;
|
||||
this.buttonStandard.Text = "Standard";
|
||||
this.buttonStandard.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// buttonEco
|
||||
//
|
||||
this.buttonEco.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.buttonEco.CausesValidation = false;
|
||||
this.buttonEco.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.buttonEco.FlatAppearance.BorderSize = 0;
|
||||
this.buttonEco.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.buttonEco.Location = new System.Drawing.Point(10, 10);
|
||||
this.buttonEco.Margin = new System.Windows.Forms.Padding(10);
|
||||
this.buttonEco.Name = "buttonEco";
|
||||
this.buttonEco.Size = new System.Drawing.Size(197, 86);
|
||||
this.buttonEco.TabIndex = 0;
|
||||
this.buttonEco.Text = "Eco";
|
||||
this.buttonEco.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// labelGPU
|
||||
//
|
||||
this.labelGPU.AutoSize = true;
|
||||
this.labelGPU.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
|
||||
this.labelGPU.Location = new System.Drawing.Point(82, 234);
|
||||
this.labelGPU.Name = "labelGPU";
|
||||
this.labelGPU.Size = new System.Drawing.Size(136, 32);
|
||||
this.labelGPU.TabIndex = 9;
|
||||
this.labelGPU.Text = "GPU Mode";
|
||||
//
|
||||
// pictureGPU
|
||||
//
|
||||
this.pictureGPU.Image = global::GHelper.Properties.Resources.icons8_video_card_48;
|
||||
this.pictureGPU.Location = new System.Drawing.Point(32, 226);
|
||||
this.pictureGPU.Name = "pictureGPU";
|
||||
this.pictureGPU.Size = new System.Drawing.Size(48, 48);
|
||||
this.pictureGPU.TabIndex = 10;
|
||||
this.pictureGPU.TabStop = false;
|
||||
//
|
||||
// labelCPUFan
|
||||
//
|
||||
this.labelCPUFan.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.labelCPUFan.AutoSize = true;
|
||||
this.labelCPUFan.Location = new System.Drawing.Point(517, 39);
|
||||
this.labelCPUFan.Name = "labelCPUFan";
|
||||
this.labelCPUFan.Size = new System.Drawing.Size(154, 32);
|
||||
this.labelCPUFan.TabIndex = 12;
|
||||
this.labelCPUFan.Text = "CPU Fan : 0%";
|
||||
//
|
||||
// tablePerf
|
||||
//
|
||||
this.tablePerf.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.tablePerf.ColumnCount = 3;
|
||||
this.tablePerf.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||
this.tablePerf.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||
this.tablePerf.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||
this.tablePerf.Controls.Add(this.buttonTurbo, 2, 0);
|
||||
this.tablePerf.Controls.Add(this.buttonBalanced, 1, 0);
|
||||
this.tablePerf.Controls.Add(this.buttonSilent, 0, 0);
|
||||
this.tablePerf.Location = new System.Drawing.Point(23, 79);
|
||||
this.tablePerf.Name = "tablePerf";
|
||||
this.tablePerf.RowCount = 1;
|
||||
this.tablePerf.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 106F));
|
||||
this.tablePerf.Size = new System.Drawing.Size(651, 106);
|
||||
this.tablePerf.TabIndex = 11;
|
||||
//
|
||||
// buttonTurbo
|
||||
//
|
||||
this.buttonTurbo.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.buttonTurbo.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.buttonTurbo.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
|
||||
this.buttonTurbo.FlatAppearance.BorderSize = 0;
|
||||
this.buttonTurbo.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.buttonTurbo.Location = new System.Drawing.Point(444, 10);
|
||||
this.buttonTurbo.Margin = new System.Windows.Forms.Padding(10);
|
||||
this.buttonTurbo.Name = "buttonTurbo";
|
||||
this.buttonTurbo.Size = new System.Drawing.Size(197, 86);
|
||||
this.buttonTurbo.TabIndex = 2;
|
||||
this.buttonTurbo.Text = "Turbo";
|
||||
this.buttonTurbo.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// buttonBalanced
|
||||
//
|
||||
this.buttonBalanced.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.buttonBalanced.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.buttonBalanced.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192)))));
|
||||
this.buttonBalanced.FlatAppearance.BorderSize = 0;
|
||||
this.buttonBalanced.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.buttonBalanced.Location = new System.Drawing.Point(227, 10);
|
||||
this.buttonBalanced.Margin = new System.Windows.Forms.Padding(10);
|
||||
this.buttonBalanced.Name = "buttonBalanced";
|
||||
this.buttonBalanced.Size = new System.Drawing.Size(197, 86);
|
||||
this.buttonBalanced.TabIndex = 1;
|
||||
this.buttonBalanced.Text = "Balanced";
|
||||
this.buttonBalanced.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// buttonSilent
|
||||
//
|
||||
this.buttonSilent.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.buttonSilent.CausesValidation = false;
|
||||
this.buttonSilent.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.buttonSilent.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(192)))));
|
||||
this.buttonSilent.FlatAppearance.BorderSize = 0;
|
||||
this.buttonSilent.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.buttonSilent.Location = new System.Drawing.Point(10, 10);
|
||||
this.buttonSilent.Margin = new System.Windows.Forms.Padding(10);
|
||||
this.buttonSilent.Name = "buttonSilent";
|
||||
this.buttonSilent.Size = new System.Drawing.Size(197, 86);
|
||||
this.buttonSilent.TabIndex = 0;
|
||||
this.buttonSilent.Text = "Silent";
|
||||
this.buttonSilent.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// picturePerf
|
||||
//
|
||||
this.picturePerf.Image = global::GHelper.Properties.Resources.icons8_speed_48;
|
||||
this.picturePerf.Location = new System.Drawing.Point(32, 29);
|
||||
this.picturePerf.Name = "picturePerf";
|
||||
this.picturePerf.Size = new System.Drawing.Size(48, 48);
|
||||
this.picturePerf.TabIndex = 14;
|
||||
this.picturePerf.TabStop = false;
|
||||
//
|
||||
// labelPerf
|
||||
//
|
||||
this.labelPerf.AutoSize = true;
|
||||
this.labelPerf.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
|
||||
this.labelPerf.Location = new System.Drawing.Point(83, 37);
|
||||
this.labelPerf.Name = "labelPerf";
|
||||
this.labelPerf.Size = new System.Drawing.Size(234, 32);
|
||||
this.labelPerf.TabIndex = 13;
|
||||
this.labelPerf.Text = "Performance Mode";
|
||||
//
|
||||
// checkGPU
|
||||
//
|
||||
this.checkGPU.AutoSize = true;
|
||||
this.checkGPU.Location = new System.Drawing.Point(34, 385);
|
||||
this.checkGPU.Name = "checkGPU";
|
||||
this.checkGPU.Size = new System.Drawing.Size(614, 36);
|
||||
this.checkGPU.TabIndex = 15;
|
||||
this.checkGPU.Text = "Switch to Eco on battery and Standard when plugged";
|
||||
this.checkGPU.UseVisualStyleBackColor = true;
|
||||
this.checkGPU.CheckedChanged += new System.EventHandler(this.checkGPU_CheckedChanged);
|
||||
//
|
||||
// buttonQuit
|
||||
//
|
||||
this.buttonQuit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonQuit.BackColor = System.Drawing.SystemColors.ButtonFace;
|
||||
this.buttonQuit.Location = new System.Drawing.Point(551, 830);
|
||||
this.buttonQuit.Name = "buttonQuit";
|
||||
this.buttonQuit.Size = new System.Drawing.Size(120, 46);
|
||||
this.buttonQuit.TabIndex = 16;
|
||||
this.buttonQuit.Text = "Quit";
|
||||
this.buttonQuit.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// pictureScreen
|
||||
//
|
||||
this.pictureScreen.Image = global::GHelper.Properties.Resources.icons8_laptop_48;
|
||||
this.pictureScreen.Location = new System.Drawing.Point(32, 463);
|
||||
this.pictureScreen.Name = "pictureScreen";
|
||||
this.pictureScreen.Size = new System.Drawing.Size(48, 48);
|
||||
this.pictureScreen.TabIndex = 18;
|
||||
this.pictureScreen.TabStop = false;
|
||||
//
|
||||
// labelSreen
|
||||
//
|
||||
this.labelSreen.AutoSize = true;
|
||||
this.labelSreen.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
|
||||
this.labelSreen.Location = new System.Drawing.Point(82, 471);
|
||||
this.labelSreen.Name = "labelSreen";
|
||||
this.labelSreen.Size = new System.Drawing.Size(176, 32);
|
||||
this.labelSreen.TabIndex = 17;
|
||||
this.labelSreen.Text = "Laptop Screen";
|
||||
//
|
||||
// tableScreen
|
||||
//
|
||||
this.tableScreen.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.tableScreen.ColumnCount = 3;
|
||||
this.tableScreen.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||
this.tableScreen.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||
this.tableScreen.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||
this.tableScreen.Controls.Add(this.button120Hz, 1, 0);
|
||||
this.tableScreen.Controls.Add(this.button60Hz, 0, 0);
|
||||
this.tableScreen.Location = new System.Drawing.Point(23, 513);
|
||||
this.tableScreen.Name = "tableScreen";
|
||||
this.tableScreen.RowCount = 1;
|
||||
this.tableScreen.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 106F));
|
||||
this.tableScreen.Size = new System.Drawing.Size(651, 103);
|
||||
this.tableScreen.TabIndex = 19;
|
||||
//
|
||||
// button120Hz
|
||||
//
|
||||
this.button120Hz.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.button120Hz.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button120Hz.FlatAppearance.BorderSize = 0;
|
||||
this.button120Hz.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button120Hz.Location = new System.Drawing.Point(227, 10);
|
||||
this.button120Hz.Margin = new System.Windows.Forms.Padding(10);
|
||||
this.button120Hz.Name = "button120Hz";
|
||||
this.button120Hz.Size = new System.Drawing.Size(197, 86);
|
||||
this.button120Hz.TabIndex = 1;
|
||||
this.button120Hz.Text = "120Hz + OD";
|
||||
this.button120Hz.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// button60Hz
|
||||
//
|
||||
this.button60Hz.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.button60Hz.CausesValidation = false;
|
||||
this.button60Hz.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.button60Hz.FlatAppearance.BorderSize = 0;
|
||||
this.button60Hz.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button60Hz.Location = new System.Drawing.Point(10, 10);
|
||||
this.button60Hz.Margin = new System.Windows.Forms.Padding(10);
|
||||
this.button60Hz.Name = "button60Hz";
|
||||
this.button60Hz.Size = new System.Drawing.Size(197, 86);
|
||||
this.button60Hz.TabIndex = 0;
|
||||
this.button60Hz.Text = "60Hz";
|
||||
this.button60Hz.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// checkScreen
|
||||
//
|
||||
this.checkScreen.AutoSize = true;
|
||||
this.checkScreen.Location = new System.Drawing.Point(34, 622);
|
||||
this.checkScreen.Name = "checkScreen";
|
||||
this.checkScreen.Size = new System.Drawing.Size(562, 36);
|
||||
this.checkScreen.TabIndex = 20;
|
||||
this.checkScreen.Text = "Switch 60Hz on battery, and back when plugged";
|
||||
this.checkScreen.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// SettingsForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(13F, 32F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(705, 900);
|
||||
this.Controls.Add(this.checkScreen);
|
||||
this.Controls.Add(this.tableScreen);
|
||||
this.Controls.Add(this.pictureScreen);
|
||||
this.Controls.Add(this.labelSreen);
|
||||
this.Controls.Add(this.buttonQuit);
|
||||
this.Controls.Add(this.checkGPU);
|
||||
this.Controls.Add(this.picturePerf);
|
||||
this.Controls.Add(this.labelPerf);
|
||||
this.Controls.Add(this.labelCPUFan);
|
||||
this.Controls.Add(this.tablePerf);
|
||||
this.Controls.Add(this.pictureGPU);
|
||||
this.Controls.Add(this.labelGPU);
|
||||
this.Controls.Add(this.labelGPUFan);
|
||||
this.Controls.Add(this.tableGPU);
|
||||
this.Controls.Add(this.pictureBattery);
|
||||
this.Controls.Add(this.labelBatteryLimit);
|
||||
this.Controls.Add(this.labelBattery);
|
||||
this.Controls.Add(this.trackBattery);
|
||||
this.Controls.Add(this.checkStartup);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.MaximizeBox = false;
|
||||
this.MdiChildrenMinimizedAnchorBottom = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "SettingsForm";
|
||||
this.Padding = new System.Windows.Forms.Padding(10);
|
||||
this.ShowIcon = false;
|
||||
this.ShowInTaskbar = false;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "G14 Helper";
|
||||
this.Load += new System.EventHandler(this.Settings_Load);
|
||||
((System.ComponentModel.ISupportInitialize)(this.trackBattery)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBattery)).EndInit();
|
||||
this.tableGPU.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureGPU)).EndInit();
|
||||
this.tablePerf.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.picturePerf)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureScreen)).EndInit();
|
||||
this.tableScreen.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private CheckBox checkStartup;
|
||||
private TrackBar trackBattery;
|
||||
private Label labelBattery;
|
||||
private Label labelBatteryLimit;
|
||||
private PictureBox pictureBattery;
|
||||
private Label labelGPUFan;
|
||||
private TableLayoutPanel tableGPU;
|
||||
private Button buttonUltimate;
|
||||
private Button buttonStandard;
|
||||
private Button buttonEco;
|
||||
private Label labelGPU;
|
||||
private PictureBox pictureGPU;
|
||||
private Label labelCPUFan;
|
||||
private TableLayoutPanel tablePerf;
|
||||
private Button buttonTurbo;
|
||||
private Button buttonBalanced;
|
||||
private Button buttonSilent;
|
||||
private PictureBox picturePerf;
|
||||
private Label labelPerf;
|
||||
private CheckBox checkGPU;
|
||||
private Button buttonQuit;
|
||||
private PictureBox pictureScreen;
|
||||
private Label labelSreen;
|
||||
private TableLayoutPanel tableScreen;
|
||||
private Button button120Hz;
|
||||
private Button button60Hz;
|
||||
private CheckBox checkScreen;
|
||||
}
|
||||
}
|
||||
470
Settings.cs
@@ -1,470 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Timers;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
public partial class SettingsForm : Form
|
||||
{
|
||||
|
||||
static Color colorEco = Color.FromArgb(255, 6, 180, 138);
|
||||
static Color colorStandard = Color.FromArgb(255, 58, 174, 239);
|
||||
static Color colorTurbo = Color.FromArgb(255, 255, 32, 32);
|
||||
|
||||
static int buttonInactive = 0;
|
||||
static int buttonActive = 5;
|
||||
|
||||
static System.Timers.Timer aTimer = default!;
|
||||
|
||||
public SettingsForm()
|
||||
{
|
||||
|
||||
InitializeComponent();
|
||||
|
||||
FormClosing += SettingsForm_FormClosing;
|
||||
|
||||
buttonSilent.FlatAppearance.BorderColor = colorEco;
|
||||
buttonBalanced.FlatAppearance.BorderColor = colorStandard;
|
||||
buttonTurbo.FlatAppearance.BorderColor = colorTurbo;
|
||||
|
||||
buttonEco.FlatAppearance.BorderColor = colorEco;
|
||||
buttonStandard.FlatAppearance.BorderColor = colorStandard;
|
||||
buttonUltimate.FlatAppearance.BorderColor = colorTurbo;
|
||||
|
||||
buttonSilent.Click += ButtonSilent_Click;
|
||||
buttonBalanced.Click += ButtonBalanced_Click;
|
||||
buttonTurbo.Click += ButtonTurbo_Click;
|
||||
|
||||
buttonEco.Click += ButtonEco_Click;
|
||||
buttonStandard.Click += ButtonStandard_Click;
|
||||
buttonUltimate.Click += ButtonUltimate_Click;
|
||||
|
||||
VisibleChanged += SettingsForm_VisibleChanged;
|
||||
|
||||
trackBattery.Scroll += trackBatteryChange;
|
||||
|
||||
button60Hz.Click += Button60Hz_Click;
|
||||
button120Hz.Click += Button120Hz_Click;
|
||||
|
||||
buttonQuit.Click += ButtonQuit_Click;
|
||||
|
||||
checkScreen.CheckedChanged += checkScreen_CheckedChanged;
|
||||
|
||||
SetTimer();
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void Button120Hz_Click(object? sender, EventArgs e)
|
||||
{
|
||||
SetScreen(120, 1);
|
||||
}
|
||||
|
||||
private void Button60Hz_Click(object? sender, EventArgs e)
|
||||
{
|
||||
SetScreen(60, 0);
|
||||
}
|
||||
|
||||
|
||||
public void SetScreen(int frequency = -1, int overdrive = -1)
|
||||
{
|
||||
if (frequency > 0)
|
||||
NativeMethods.SetRefreshRate(frequency);
|
||||
if (overdrive > 0)
|
||||
Program.wmi.DeviceSet(ASUSWmi.ScreenOverdrive, overdrive);
|
||||
InitScreen(frequency, overdrive);
|
||||
}
|
||||
|
||||
|
||||
public void InitScreen(int frequency = -1, int overdrive = -1)
|
||||
{
|
||||
|
||||
if (frequency < 0)
|
||||
frequency = NativeMethods.GetRefreshRate();
|
||||
|
||||
if (overdrive < 0)
|
||||
overdrive = Program.wmi.DeviceGet(ASUSWmi.ScreenOverdrive);
|
||||
|
||||
button60Hz.FlatAppearance.BorderSize = buttonInactive;
|
||||
button120Hz.FlatAppearance.BorderSize = buttonInactive;
|
||||
|
||||
if (frequency == 60)
|
||||
{
|
||||
button60Hz.FlatAppearance.BorderSize = buttonActive;
|
||||
} else if (frequency == 120)
|
||||
{
|
||||
button120Hz.FlatAppearance.BorderSize = buttonActive;
|
||||
}
|
||||
|
||||
Program.config.setConfig("frequency", frequency);
|
||||
Program.config.setConfig("overdrive", overdrive);
|
||||
}
|
||||
|
||||
private void ButtonQuit_Click(object? sender, EventArgs e)
|
||||
{
|
||||
Close();
|
||||
Program.trayIcon.Visible = false;
|
||||
Application.Exit();
|
||||
}
|
||||
|
||||
private void SettingsForm_FormClosing(object? sender, FormClosingEventArgs e)
|
||||
{
|
||||
if (e.CloseReason == CloseReason.UserClosing)
|
||||
{
|
||||
e.Cancel = true;
|
||||
Hide();
|
||||
}
|
||||
}
|
||||
|
||||
private void ButtonUltimate_Click(object? sender, EventArgs e)
|
||||
{
|
||||
SetGPUMode(ASUSWmi.GPUModeUltimate);
|
||||
}
|
||||
|
||||
private void ButtonStandard_Click(object? sender, EventArgs e)
|
||||
{
|
||||
SetGPUMode(ASUSWmi.GPUModeStandard);
|
||||
}
|
||||
|
||||
private void ButtonEco_Click(object? sender, EventArgs e)
|
||||
{
|
||||
SetGPUMode(ASUSWmi.GPUModeEco);
|
||||
}
|
||||
|
||||
private static void SetTimer()
|
||||
{
|
||||
aTimer = new System.Timers.Timer(1000);
|
||||
aTimer.Elapsed += OnTimedEvent;
|
||||
aTimer.AutoReset = true;
|
||||
}
|
||||
|
||||
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
|
||||
{
|
||||
var cpuFan = Math.Round(Program.wmi.DeviceGet(ASUSWmi.CPU_Fan) / 0.6);
|
||||
var gpuFan = Math.Round(Program.wmi.DeviceGet(ASUSWmi.GPU_Fan) / 0.6);
|
||||
|
||||
Program.settingsForm.BeginInvoke(delegate
|
||||
{
|
||||
Program.settingsForm.labelCPUFan.Text = "CPU Fan: " + cpuFan.ToString() + "%";
|
||||
Program.settingsForm.labelGPUFan.Text = "GPU Fan: " + gpuFan.ToString() + "%";
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void SettingsForm_VisibleChanged(object? sender, EventArgs e)
|
||||
{
|
||||
if (this.Visible)
|
||||
{
|
||||
InitScreen();
|
||||
|
||||
this.Left = Screen.FromControl(this).Bounds.Width - 10 - this.Width;
|
||||
this.Top = Screen.FromControl(this).Bounds.Height - 100 - this.Height;
|
||||
this.Activate();
|
||||
aTimer.Enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
aTimer.Enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetPerformanceMode(int PerformanceMode = ASUSWmi.PerformanceBalanced)
|
||||
{
|
||||
|
||||
buttonSilent.FlatAppearance.BorderSize = buttonInactive;
|
||||
buttonBalanced.FlatAppearance.BorderSize = buttonInactive;
|
||||
buttonTurbo.FlatAppearance.BorderSize = buttonInactive;
|
||||
|
||||
switch (PerformanceMode)
|
||||
{
|
||||
case ASUSWmi.PerformanceSilent:
|
||||
buttonSilent.FlatAppearance.BorderSize = buttonActive;
|
||||
labelPerf.Text = "Peformance Mode: Silent";
|
||||
break;
|
||||
case ASUSWmi.PerformanceTurbo:
|
||||
buttonTurbo.FlatAppearance.BorderSize = buttonActive;
|
||||
labelPerf.Text = "Peformance Mode: Turbo";
|
||||
break;
|
||||
default:
|
||||
buttonBalanced.FlatAppearance.BorderSize = buttonActive;
|
||||
labelPerf.Text = "Peformance Mode: Balanced";
|
||||
PerformanceMode = ASUSWmi.PerformanceBalanced;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Program.config.setConfig("performance_mode", PerformanceMode);
|
||||
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, PerformanceMode);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void CyclePerformanceMode()
|
||||
{
|
||||
SetPerformanceMode(Program.config.getConfig("performance_mode") + 1);
|
||||
}
|
||||
|
||||
public void AutoScreen (int Plugged = 1)
|
||||
{
|
||||
int ScreenAuto = Program.config.getConfig("screen_auto");
|
||||
if (ScreenAuto != 1) return;
|
||||
|
||||
if (Plugged == 1)
|
||||
SetScreen(120, 1);
|
||||
else
|
||||
SetScreen(60, 0);
|
||||
|
||||
}
|
||||
|
||||
public void AutoGPUMode(int Plugged = 1)
|
||||
{
|
||||
|
||||
int GpuAuto = Program.config.getConfig("gpu_auto");
|
||||
if (GpuAuto != 1) return;
|
||||
|
||||
int eco = Program.wmi.DeviceGet(ASUSWmi.GPUEco);
|
||||
int mux = Program.wmi.DeviceGet(ASUSWmi.GPUMux);
|
||||
|
||||
int GPUMode;
|
||||
|
||||
if (mux == 0) // GPU in Ultimate, ignore
|
||||
return;
|
||||
else
|
||||
{
|
||||
if (eco == 1 && Plugged == 1) // Eco going Standard on plugged
|
||||
{
|
||||
GPUMode = ASUSWmi.GPUModeStandard;
|
||||
VisualiseGPUMode(GPUMode);
|
||||
Program.wmi.DeviceSet(ASUSWmi.GPUEco, 0);
|
||||
Program.config.setConfig("gpu_mode", GPUMode);
|
||||
}
|
||||
else if (eco == 0 && Plugged == 0) // Standard going Eco on plugged
|
||||
{
|
||||
GPUMode = ASUSWmi.GPUModeEco;
|
||||
VisualiseGPUMode(GPUMode);
|
||||
Program.wmi.DeviceSet(ASUSWmi.GPUEco, 1);
|
||||
Program.config.setConfig("gpu_mode", GPUMode);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int InitGPUMode()
|
||||
{
|
||||
|
||||
int eco = Program.wmi.DeviceGet(ASUSWmi.GPUEco);
|
||||
int mux = Program.wmi.DeviceGet(ASUSWmi.GPUMux);
|
||||
|
||||
int GpuMode;
|
||||
|
||||
if (mux == 0)
|
||||
GpuMode = ASUSWmi.GPUModeUltimate;
|
||||
else
|
||||
{
|
||||
if (eco == 1)
|
||||
GpuMode = ASUSWmi.GPUModeEco;
|
||||
else
|
||||
GpuMode = ASUSWmi.GPUModeStandard;
|
||||
|
||||
if (mux != 1)
|
||||
Disable_Ultimate();
|
||||
}
|
||||
|
||||
Program.config.setConfig("gpu_mode", GpuMode);
|
||||
VisualiseGPUMode(GpuMode);
|
||||
|
||||
return GpuMode;
|
||||
|
||||
}
|
||||
|
||||
public void SetGPUMode(int GPUMode = ASUSWmi.GPUModeStandard)
|
||||
{
|
||||
|
||||
int CurrentGPU = Program.config.getConfig("gpu_mode");
|
||||
|
||||
if (CurrentGPU == GPUMode)
|
||||
return;
|
||||
|
||||
var restart = false;
|
||||
var changed = false;
|
||||
|
||||
if (CurrentGPU == ASUSWmi.GPUModeUltimate)
|
||||
{
|
||||
DialogResult dialogResult = MessageBox.Show("Switching off Ultimate Mode requires restart", "Reboot now?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
Program.wmi.DeviceSet(ASUSWmi.GPUMux, 1);
|
||||
restart = true;
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
else if (GPUMode == ASUSWmi.GPUModeUltimate)
|
||||
{
|
||||
DialogResult dialogResult = MessageBox.Show(" Ultimate Mode requires restart", "Reboot now?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
Program.wmi.DeviceSet(ASUSWmi.GPUMux, 0);
|
||||
restart = true;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
}
|
||||
else if (GPUMode == ASUSWmi.GPUModeEco)
|
||||
{
|
||||
VisualiseGPUMode(GPUMode);
|
||||
Program.wmi.DeviceSet(ASUSWmi.GPUEco, 1);
|
||||
changed = true;
|
||||
}
|
||||
else if (GPUMode == ASUSWmi.GPUModeStandard)
|
||||
{
|
||||
VisualiseGPUMode(GPUMode);
|
||||
Program.wmi.DeviceSet(ASUSWmi.GPUEco, 0);
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (changed)
|
||||
Program.config.setConfig("gpu_mode", GPUMode);
|
||||
|
||||
if (restart)
|
||||
{
|
||||
VisualiseGPUMode(GPUMode);
|
||||
Process.Start("shutdown", "/r /t 1");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void VisualiseGPUAuto(int GPUAuto)
|
||||
{
|
||||
checkGPU.Checked = (GPUAuto == 1);
|
||||
}
|
||||
|
||||
public void VisualiseScreenAuto(int ScreenAuto)
|
||||
{
|
||||
checkScreen.Checked = (ScreenAuto == 1);
|
||||
}
|
||||
|
||||
public void VisualiseGPUMode(int GPUMode)
|
||||
{
|
||||
|
||||
buttonEco.FlatAppearance.BorderSize = buttonInactive;
|
||||
buttonStandard.FlatAppearance.BorderSize = buttonInactive;
|
||||
buttonUltimate.FlatAppearance.BorderSize = buttonInactive;
|
||||
|
||||
switch (GPUMode)
|
||||
{
|
||||
case ASUSWmi.GPUModeEco:
|
||||
buttonEco.FlatAppearance.BorderSize = buttonActive;
|
||||
labelGPU.Text = "GPU Mode: Eco (iGPU only)";
|
||||
Program.trayIcon.Icon = GHelper.Properties.Resources.eco;
|
||||
break;
|
||||
case ASUSWmi.GPUModeUltimate:
|
||||
buttonUltimate.FlatAppearance.BorderSize = buttonActive;
|
||||
labelGPU.Text = "GPU Mode: Ultimate (dGPU exclusive)";
|
||||
Program.trayIcon.Icon = GHelper.Properties.Resources.ultimate;
|
||||
break;
|
||||
default:
|
||||
buttonStandard.FlatAppearance.BorderSize = buttonActive;
|
||||
labelGPU.Text = "GPU Mode: Eco (iGPU and dGPU)";
|
||||
Program.trayIcon.Icon = GHelper.Properties.Resources.standard;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void ButtonSilent_Click(object? sender, EventArgs e)
|
||||
{
|
||||
SetPerformanceMode(ASUSWmi.PerformanceSilent);
|
||||
}
|
||||
|
||||
private void ButtonBalanced_Click(object? sender, EventArgs e)
|
||||
{
|
||||
SetPerformanceMode(ASUSWmi.PerformanceBalanced);
|
||||
}
|
||||
|
||||
private void ButtonTurbo_Click(object? sender, EventArgs e)
|
||||
{
|
||||
SetPerformanceMode(ASUSWmi.PerformanceTurbo);
|
||||
}
|
||||
|
||||
private void Settings_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void Disable_Ultimate()
|
||||
{
|
||||
buttonUltimate.Enabled = false;
|
||||
}
|
||||
|
||||
public void SetStartupCheck(bool status)
|
||||
{
|
||||
checkStartup.Checked = status;
|
||||
}
|
||||
private void checkStartup_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
CheckBox chk = (CheckBox)sender;
|
||||
if (chk.Checked)
|
||||
{
|
||||
Program.scheduler.Schedule();
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.scheduler.UnSchedule();
|
||||
}
|
||||
}
|
||||
|
||||
public void SetBatteryChargeLimit (int limit = 100)
|
||||
{
|
||||
|
||||
if (limit < 50 || limit > 100) limit = 100;
|
||||
|
||||
labelBatteryLimit.Text = limit.ToString() + "%";
|
||||
trackBattery.Value = limit;
|
||||
Program.wmi.DeviceSet(ASUSWmi.BatteryLimit, limit);
|
||||
Program.config.setConfig("charge_limit", limit);
|
||||
|
||||
}
|
||||
|
||||
private void trackBatteryChange(object sender, EventArgs e)
|
||||
{
|
||||
TrackBar bar = (TrackBar)sender;
|
||||
SetBatteryChargeLimit(bar.Value);
|
||||
}
|
||||
|
||||
private void checkGPU_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
CheckBox chk = (CheckBox)sender;
|
||||
if (chk.Checked)
|
||||
{
|
||||
Program.config.setConfig("gpu_auto", 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.config.setConfig("gpu_auto", 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void checkScreen_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
CheckBox chk = (CheckBox)sender;
|
||||
if (chk.Checked)
|
||||
{
|
||||
Program.config.setConfig("screen_auto", 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.config.setConfig("screen_auto", 0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
325
app/ASUSWmi.cs
Normal file
@@ -0,0 +1,325 @@
|
||||
using System.Management;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
public class ASUSWmi
|
||||
{
|
||||
|
||||
const string FILE_NAME = @"\\.\\ATKACPI";
|
||||
const uint CONTROL_CODE = 0x0022240C;
|
||||
|
||||
const uint DSTS = 0x53545344;
|
||||
const uint DEVS = 0x53564544;
|
||||
|
||||
public const uint UniversalControl = 0x00100021;
|
||||
public const int KB_Light_Up = 0xc4;
|
||||
public const int KB_Light_Down = 0xc5;
|
||||
|
||||
public const int ChargerMode = 0x0012006C;
|
||||
|
||||
public const int ChargerUSB = 2;
|
||||
public const int ChargerBarrel = 1;
|
||||
|
||||
public const uint CPU_Fan = 0x00110013;
|
||||
public const uint GPU_Fan = 0x00110014;
|
||||
public const uint Mid_Fan = 0x00110031;
|
||||
|
||||
public const uint PerformanceMode = 0x00120075; // Thermal Control
|
||||
|
||||
public const uint GPUEco = 0x00090020;
|
||||
public const uint GPUXGConnected = 0x00090018;
|
||||
public const uint GPUXG = 0x00090019;
|
||||
public const uint GPUMux = 0x00090016;
|
||||
|
||||
public const uint BatteryLimit = 0x00120057;
|
||||
public const uint ScreenOverdrive = 0x00050019;
|
||||
public const uint ScreenMiniled = 0x0005001E;
|
||||
|
||||
public const uint DevsCPUFanCurve = 0x00110024;
|
||||
public const uint DevsGPUFanCurve = 0x00110025;
|
||||
public const uint DevsMidFanCurve = 0x00110032;
|
||||
|
||||
public const int Temp_CPU = 0x00120094;
|
||||
public const int Temp_GPU = 0x00120097;
|
||||
|
||||
public const int PPT_TotalA0 = 0x001200A0; // Total PPT on 2022 (PPT_LIMIT_SLOW ) and CPU PPT on 2021
|
||||
public const int PPT_EDCA1 = 0x001200A1; // CPU EDC
|
||||
public const int PPT_TDCA2 = 0x001200A2; // CPU TDC
|
||||
public const int PPT_APUA3 = 0x001200A3; // APU PPT ON 2021, doesn't work on 2022
|
||||
|
||||
public const int PPT_CPUB0 = 0x001200B0; // CPU PPT on 2022 (PPT_LIMIT_APU)
|
||||
public const int PPT_CPUB1 = 0x001200B1; // Total PPT on 2022 (PPT_LIMIT_SLOW)
|
||||
|
||||
public const int PPT_APUC0 = 0x001200C0; // does nothing on G14 2022
|
||||
public const int PPT_APUC1 = 0x001200C1; // Actual Power Limit (PPT_LIMIT_FAST) AND Sustained Power Limit (STAPM_LIMIT)
|
||||
public const int PPT_APUC2 = 0x001200C2; // does nothing on G14 2022
|
||||
|
||||
public const int TUF_KB_BRIGHTNESS = 0x00050021;
|
||||
public const int TUF_KB = 0x00100056;
|
||||
public const int TUF_KB_STATE = 0x00100057;
|
||||
|
||||
public const int PerformanceBalanced = 0;
|
||||
public const int PerformanceTurbo = 1;
|
||||
public const int PerformanceSilent = 2;
|
||||
|
||||
public const int GPUModeEco = 0;
|
||||
public const int GPUModeStandard = 1;
|
||||
public const int GPUModeUltimate = 2;
|
||||
|
||||
|
||||
public const int MaxTotal = 250;
|
||||
public const int MinTotal = 5;
|
||||
public const int DefaultTotal = 125;
|
||||
|
||||
public const int MaxCPU = 130;
|
||||
public const int MinCPU = 5;
|
||||
public const int DefaultCPU = 80;
|
||||
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
|
||||
private static extern IntPtr CreateFile(
|
||||
string lpFileName,
|
||||
uint dwDesiredAccess,
|
||||
uint dwShareMode,
|
||||
IntPtr lpSecurityAttributes,
|
||||
uint dwCreationDisposition,
|
||||
uint dwFlagsAndAttributes,
|
||||
IntPtr hTemplateFile
|
||||
);
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
private static extern bool DeviceIoControl(
|
||||
IntPtr hDevice,
|
||||
uint dwIoControlCode,
|
||||
byte[] lpInBuffer,
|
||||
uint nInBufferSize,
|
||||
byte[] lpOutBuffer,
|
||||
uint nOutBufferSize,
|
||||
ref uint lpBytesReturned,
|
||||
IntPtr lpOverlapped
|
||||
);
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
private static extern bool CloseHandle(IntPtr hObject);
|
||||
|
||||
private const uint GENERIC_READ = 0x80000000;
|
||||
private const uint GENERIC_WRITE = 0x40000000;
|
||||
private const uint OPEN_EXISTING = 3;
|
||||
private const uint FILE_ATTRIBUTE_NORMAL = 0x80;
|
||||
private const uint FILE_SHARE_READ = 1;
|
||||
private const uint FILE_SHARE_WRITE = 2;
|
||||
|
||||
private IntPtr handle;
|
||||
|
||||
public ASUSWmi()
|
||||
{
|
||||
handle = CreateFile(
|
||||
FILE_NAME,
|
||||
GENERIC_READ | GENERIC_WRITE,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||
IntPtr.Zero,
|
||||
OPEN_EXISTING,
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
IntPtr.Zero
|
||||
);
|
||||
if (handle == new IntPtr(-1))
|
||||
{
|
||||
throw new Exception("Can't connect to ACPI");
|
||||
}
|
||||
}
|
||||
|
||||
public void Control(uint dwIoControlCode, byte[] lpInBuffer, byte[] lpOutBuffer)
|
||||
{
|
||||
uint lpBytesReturned = 0;
|
||||
bool result = DeviceIoControl(
|
||||
handle,
|
||||
dwIoControlCode,
|
||||
lpInBuffer,
|
||||
(uint)lpInBuffer.Length,
|
||||
lpOutBuffer,
|
||||
(uint)lpOutBuffer.Length,
|
||||
ref lpBytesReturned,
|
||||
IntPtr.Zero
|
||||
);
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
CloseHandle(handle);
|
||||
}
|
||||
|
||||
|
||||
protected byte[] CallMethod(uint MethodID, byte[] args)
|
||||
{
|
||||
byte[] acpiBuf = new byte[8 + args.Length];
|
||||
byte[] outBuffer = new byte[20];
|
||||
|
||||
BitConverter.GetBytes((uint)MethodID).CopyTo(acpiBuf, 0);
|
||||
BitConverter.GetBytes((uint)args.Length).CopyTo(acpiBuf, 4);
|
||||
Array.Copy(args, 0, acpiBuf, 8, args.Length);
|
||||
|
||||
// if (MethodID == DEVS) Debug.WriteLine(BitConverter.ToString(acpiBuf, 0, acpiBuf.Length));
|
||||
|
||||
Control(CONTROL_CODE, acpiBuf, outBuffer);
|
||||
|
||||
return outBuffer;
|
||||
|
||||
}
|
||||
|
||||
public int DeviceSet(uint DeviceID, int Status, string logName)
|
||||
{
|
||||
byte[] args = new byte[8];
|
||||
BitConverter.GetBytes((uint)DeviceID).CopyTo(args, 0);
|
||||
BitConverter.GetBytes((uint)Status).CopyTo(args, 4);
|
||||
|
||||
byte[] status = CallMethod(DEVS, args);
|
||||
int result = BitConverter.ToInt32(status, 0);
|
||||
|
||||
Logger.WriteLine(logName + " = " + Status + " : " + (result == 1 ? "OK" : result));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public int DeviceSet(uint DeviceID, byte[] Params, string logName)
|
||||
{
|
||||
byte[] args = new byte[4 + Params.Length];
|
||||
BitConverter.GetBytes((uint)DeviceID).CopyTo(args, 0);
|
||||
Params.CopyTo(args, 4);
|
||||
|
||||
byte[] status = CallMethod(DEVS, args);
|
||||
int result = BitConverter.ToInt32(status, 0);
|
||||
|
||||
Logger.WriteLine(logName + " = " + BitConverter.ToString(Params) + " : " + (result == 1 ? "OK" : result));
|
||||
return BitConverter.ToInt32(status, 0);
|
||||
}
|
||||
|
||||
|
||||
public int DeviceGet(uint DeviceID)
|
||||
{
|
||||
byte[] args = new byte[8];
|
||||
BitConverter.GetBytes((uint)DeviceID).CopyTo(args, 0);
|
||||
byte[] status = CallMethod(DSTS, args);
|
||||
|
||||
return BitConverter.ToInt32(status, 0) - 65536;
|
||||
|
||||
}
|
||||
|
||||
public byte[] DeviceGetBuffer(uint DeviceID, uint Status = 0)
|
||||
{
|
||||
byte[] args = new byte[8];
|
||||
BitConverter.GetBytes((uint)DeviceID).CopyTo(args, 0);
|
||||
BitConverter.GetBytes((uint)Status).CopyTo(args, 4);
|
||||
|
||||
return CallMethod(DSTS, args);
|
||||
}
|
||||
|
||||
|
||||
public int SetFanCurve(int device, byte[] curve)
|
||||
{
|
||||
|
||||
if (curve.Length != 16) return -1;
|
||||
if (curve.All(singleByte => singleByte == 0)) return -1;
|
||||
|
||||
int result;
|
||||
|
||||
for (int i = 8; i < curve.Length; i++)
|
||||
{
|
||||
curve[i] = Math.Max((byte)0, Math.Min((byte)99, curve[i])); // it seems to be a bug, when some old model's bios can go nuts if fan is set to 100%
|
||||
}
|
||||
|
||||
switch (device)
|
||||
{
|
||||
case 1:
|
||||
result = DeviceSet(DevsGPUFanCurve, curve, "FanGPU");
|
||||
break;
|
||||
case 2:
|
||||
result = DeviceSet(DevsMidFanCurve, curve, "FanMid");
|
||||
break;
|
||||
default:
|
||||
result = DeviceSet(DevsCPUFanCurve, curve, "FanCPU");
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public byte[] GetFanCurve(int device, int mode = 0)
|
||||
{
|
||||
uint fan_mode;
|
||||
|
||||
// because it's asus, and modes are swapped here
|
||||
switch (mode)
|
||||
{
|
||||
case 1: fan_mode = 2; break;
|
||||
case 2: fan_mode = 1; break;
|
||||
default: fan_mode = 0; break;
|
||||
}
|
||||
|
||||
switch (device)
|
||||
{
|
||||
case 1:
|
||||
return DeviceGetBuffer(DevsGPUFanCurve, fan_mode);
|
||||
case 2:
|
||||
return DeviceGetBuffer(DevsMidFanCurve, fan_mode);
|
||||
default:
|
||||
return DeviceGetBuffer(DevsCPUFanCurve, fan_mode);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void TUFKeyboardBrightness(int brightness)
|
||||
{
|
||||
int param = 0x80 | (brightness & 0x7F);
|
||||
DeviceSet(TUF_KB_BRIGHTNESS, param, "TUF Brightness");
|
||||
}
|
||||
|
||||
public void TUFKeyboardRGB(int mode, Color color, int speed)
|
||||
{
|
||||
|
||||
byte[] setting = new byte[12];
|
||||
setting[0] = (byte)0xB4;
|
||||
setting[1] = (byte)mode;
|
||||
setting[2] = color.R;
|
||||
setting[3] = color.G;
|
||||
setting[4] = color.B;
|
||||
setting[5] = (byte)speed;
|
||||
|
||||
DeviceSet(TUF_KB, setting, "TUF RGB");
|
||||
//Debug.WriteLine(BitConverter.ToString(setting));
|
||||
|
||||
}
|
||||
|
||||
const int ASUS_WMI_KEYBOARD_POWER_BOOT = 0x03 << 16;
|
||||
const int ASUS_WMI_KEYBOARD_POWER_AWAKE = 0x0C << 16;
|
||||
const int ASUS_WMI_KEYBOARD_POWER_SLEEP = 0x30 << 16;
|
||||
const int ASUS_WMI_KEYBOARD_POWER_SHUTDOWN = 0xC0 << 16;
|
||||
public void TUFKeyboardPower(bool awake = true, bool boot = false, bool sleep = false, bool shutdown = false)
|
||||
{
|
||||
int state = 0xbd;
|
||||
|
||||
if (boot) state = state | ASUS_WMI_KEYBOARD_POWER_BOOT;
|
||||
if (awake) state = state | ASUS_WMI_KEYBOARD_POWER_AWAKE;
|
||||
if (sleep) state = state | ASUS_WMI_KEYBOARD_POWER_SLEEP;
|
||||
if (shutdown) state = state | ASUS_WMI_KEYBOARD_POWER_SHUTDOWN;
|
||||
|
||||
state = state | 0x01 << 8;
|
||||
|
||||
DeviceSet(TUF_KB_STATE, state, "TUF_KB");
|
||||
}
|
||||
|
||||
public void SubscribeToEvents(Action<object, EventArrivedEventArgs> EventHandler)
|
||||
{
|
||||
try
|
||||
{
|
||||
ManagementEventWatcher watcher = new ManagementEventWatcher();
|
||||
watcher.EventArrived += new EventArrivedEventHandler(EventHandler);
|
||||
watcher.Scope = new ManagementScope("root\\wmi");
|
||||
watcher.Query = new WqlEventQuery("SELECT * FROM AsusAtkWmiEvent");
|
||||
watcher.Start();
|
||||
} catch
|
||||
{
|
||||
Logger.WriteLine("Can't connect to ASUS WMI events");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
466
app/AnimeMatrix/AnimeMatrixDevice.cs
Normal file
@@ -0,0 +1,466 @@
|
||||
// Source thanks to https://github.com/vddCore/Starlight with some adjustments from me
|
||||
|
||||
using Starlight.Communication;
|
||||
using System.Management;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Text;
|
||||
using System.Globalization;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using OSD;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Starlight.AnimeMatrix
|
||||
{
|
||||
public class BuiltInAnimation
|
||||
{
|
||||
public enum Startup
|
||||
{
|
||||
GlitchConstruction,
|
||||
StaticEmergence
|
||||
}
|
||||
|
||||
public enum Shutdown
|
||||
{
|
||||
GlitchOut,
|
||||
SeeYa
|
||||
}
|
||||
|
||||
public enum Sleeping
|
||||
{
|
||||
BannerSwipe,
|
||||
Starfield
|
||||
}
|
||||
|
||||
public enum Running
|
||||
{
|
||||
BinaryBannerScroll,
|
||||
RogLogoGlitch
|
||||
}
|
||||
|
||||
public byte AsByte { get; }
|
||||
|
||||
public BuiltInAnimation(
|
||||
Running running,
|
||||
Sleeping sleeping,
|
||||
Shutdown shutdown,
|
||||
Startup startup
|
||||
)
|
||||
{
|
||||
AsByte |= (byte)(((int)running & 0x01) << 0);
|
||||
AsByte |= (byte)(((int)sleeping & 0x01) << 1);
|
||||
AsByte |= (byte)(((int)shutdown & 0x01) << 2);
|
||||
AsByte |= (byte)(((int)startup & 0x01) << 3);
|
||||
}
|
||||
}
|
||||
|
||||
internal class AnimeMatrixPacket : Packet
|
||||
{
|
||||
public AnimeMatrixPacket(byte[] command)
|
||||
: base(0x5E, 640, command)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public enum AnimeType
|
||||
{
|
||||
GA401,
|
||||
GA402
|
||||
}
|
||||
|
||||
|
||||
|
||||
public enum BrightnessMode : byte
|
||||
{
|
||||
Off = 0,
|
||||
Dim = 1,
|
||||
Medium = 2,
|
||||
Full = 3
|
||||
}
|
||||
|
||||
|
||||
public class AnimeMatrixDevice : Device
|
||||
{
|
||||
int UpdatePageLength = 490;
|
||||
int LedCount = 1450;
|
||||
|
||||
byte[] _displayBuffer;
|
||||
List<byte[]> frames = new List<byte[]>();
|
||||
|
||||
public int MaxRows = 61;
|
||||
//public int FullRows = 11;
|
||||
//public int FullEvenRows = -1;
|
||||
|
||||
public int dx = 0;
|
||||
public int MaxColumns = 34;
|
||||
|
||||
private int frameIndex = 0;
|
||||
|
||||
private static AnimeType _model = AnimeType.GA402;
|
||||
|
||||
public AnimeMatrixDevice()
|
||||
: base(0x0B05, 0x193B, 640)
|
||||
{
|
||||
string model = GetModel();
|
||||
if (model.Contains("401"))
|
||||
{
|
||||
|
||||
_model = AnimeType.GA401;
|
||||
|
||||
MaxColumns = 33;
|
||||
dx = 1;
|
||||
|
||||
MaxRows = 55;
|
||||
LedCount = 1245;
|
||||
|
||||
UpdatePageLength = 410;
|
||||
}
|
||||
|
||||
|
||||
_displayBuffer = new byte[LedCount];
|
||||
|
||||
}
|
||||
|
||||
|
||||
public string GetModel()
|
||||
{
|
||||
using (var searcher = new ManagementObjectSearcher(@"Select * from Win32_ComputerSystem"))
|
||||
{
|
||||
foreach (var process in searcher.Get())
|
||||
return process["Model"].ToString();
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
public byte[] GetBuffer()
|
||||
{
|
||||
return _displayBuffer;
|
||||
}
|
||||
|
||||
public void PresentNextFrame()
|
||||
{
|
||||
if (frameIndex >= frames.Count) frameIndex = 0;
|
||||
_displayBuffer = frames[frameIndex];
|
||||
Present();
|
||||
frameIndex++;
|
||||
}
|
||||
|
||||
public void ClearFrames()
|
||||
{
|
||||
frames.Clear();
|
||||
frameIndex = 0;
|
||||
}
|
||||
|
||||
public void AddFrame()
|
||||
{
|
||||
frames.Add(_displayBuffer.ToArray());
|
||||
}
|
||||
|
||||
public void SendRaw(params byte[] data)
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(data));
|
||||
}
|
||||
|
||||
|
||||
public static int FirstX(int y)
|
||||
{
|
||||
switch (_model)
|
||||
{
|
||||
case AnimeType.GA401:
|
||||
if (y < 5)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (y + 1) / 2 - 3;
|
||||
}
|
||||
default:
|
||||
return (int)Math.Ceiling(Math.Max(0, y - 11) / 2F);
|
||||
}
|
||||
}
|
||||
|
||||
public static int Width(int y)
|
||||
{
|
||||
switch (_model)
|
||||
{
|
||||
case AnimeType.GA401:
|
||||
return 33;
|
||||
default:
|
||||
return 34;
|
||||
}
|
||||
}
|
||||
|
||||
public static int Pitch(int y)
|
||||
{
|
||||
switch (_model)
|
||||
{
|
||||
case AnimeType.GA401:
|
||||
switch (y)
|
||||
{
|
||||
case 0:
|
||||
case 2:
|
||||
case 4:
|
||||
return 33;
|
||||
case 1:
|
||||
case 3:
|
||||
return 35;
|
||||
default:
|
||||
return 36 - y / 2;
|
||||
}
|
||||
default:
|
||||
return Width(y) - FirstX(y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int RowToLinearAddress(int y)
|
||||
{
|
||||
int ret = 0;
|
||||
for (var i = 0; i < y; i++)
|
||||
ret += Pitch(i);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
public void SetLedPlanar(int x, int y, byte value)
|
||||
{
|
||||
if (!IsRowInRange(y)) return;
|
||||
|
||||
if (x >= FirstX(y) && x < Width(y))
|
||||
SetLedLinear(RowToLinearAddress(y) - FirstX(y) + x + dx, value);
|
||||
}
|
||||
|
||||
public void WakeUp()
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(Encoding.ASCII.GetBytes("ASUS Tech.Inc.")));
|
||||
}
|
||||
|
||||
public void SetLedLinear(int address, byte value)
|
||||
{
|
||||
if (!IsAddressableLed(address)) return;
|
||||
_displayBuffer[address] = value;
|
||||
}
|
||||
|
||||
public void SetLedLinearImmediate(int address, byte value)
|
||||
{
|
||||
if (!IsAddressableLed(address)) return;
|
||||
_displayBuffer[address] = value;
|
||||
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
||||
.AppendData(BitConverter.GetBytes((ushort)(address + 1)))
|
||||
.AppendData(BitConverter.GetBytes((ushort)0x0001))
|
||||
.AppendData(value)
|
||||
);
|
||||
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x03));
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void Clear(bool present = false)
|
||||
{
|
||||
for (var i = 0; i < _displayBuffer.Length; i++)
|
||||
_displayBuffer[i] = 0;
|
||||
|
||||
if (present)
|
||||
Present();
|
||||
}
|
||||
|
||||
public void Present()
|
||||
{
|
||||
|
||||
int page = 0;
|
||||
int start, end;
|
||||
|
||||
while (page * UpdatePageLength < LedCount)
|
||||
{
|
||||
start = page * UpdatePageLength;
|
||||
end = Math.Min(LedCount, (page + 1) * UpdatePageLength);
|
||||
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
||||
.AppendData(BitConverter.GetBytes((ushort)(start + 1)))
|
||||
.AppendData(BitConverter.GetBytes((ushort)(end - start)))
|
||||
.AppendData(_displayBuffer[start..end])
|
||||
);
|
||||
|
||||
page++;
|
||||
}
|
||||
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x03));
|
||||
}
|
||||
|
||||
public void SetDisplayState(bool enable)
|
||||
{
|
||||
if (enable)
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(0xC3, 0x01)
|
||||
.AppendData(0x00));
|
||||
}
|
||||
else
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(0xC3, 0x01)
|
||||
.AppendData(0x80));
|
||||
}
|
||||
}
|
||||
|
||||
public void SetBrightness(BrightnessMode mode)
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x04)
|
||||
.AppendData((byte)mode)
|
||||
);
|
||||
}
|
||||
|
||||
public void SetBuiltInAnimation(bool enable)
|
||||
{
|
||||
var enabled = enable ? (byte)0x00 : (byte)0x80;
|
||||
Set(Packet<AnimeMatrixPacket>(0xC4, 0x01, enabled));
|
||||
}
|
||||
|
||||
public void SetBuiltInAnimation(bool enable, BuiltInAnimation animation)
|
||||
{
|
||||
SetBuiltInAnimation(enable);
|
||||
Set(Packet<AnimeMatrixPacket>(0xC5, animation.AsByte));
|
||||
}
|
||||
|
||||
|
||||
public void PresentClock()
|
||||
{
|
||||
int second = DateTime.Now.Second;
|
||||
|
||||
if (CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern.Contains("H"))
|
||||
PresentTextDiagonal(DateTime.Now.ToString("H" + ((second % 2 == 0)?":":" ") + "mm"));
|
||||
else
|
||||
PresentTextDiagonal(DateTime.Now.ToString("h" + ((second % 2 == 0) ? ":" : " ") + "mmtt"));
|
||||
}
|
||||
|
||||
public void PresentText(string text1, string text2 = "")
|
||||
{
|
||||
using (Bitmap bmp = new Bitmap(MaxColumns * 3, MaxRows))
|
||||
{
|
||||
using (Graphics g = Graphics.FromImage(bmp))
|
||||
{
|
||||
g.CompositingQuality = CompositingQuality.HighQuality;
|
||||
g.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
|
||||
using (Font font = new Font("Arial", 24F, GraphicsUnit.Pixel))
|
||||
{
|
||||
SizeF textSize = g.MeasureString(text1, font);
|
||||
g.DrawString(text1, font, Brushes.White, (MaxColumns*3 - textSize.Width)+3, -3);
|
||||
}
|
||||
|
||||
if (text2.Length > 0)
|
||||
using (Font font = new Font("Arial", 18F, GraphicsUnit.Pixel))
|
||||
{
|
||||
SizeF textSize = g.MeasureString(text2, font);
|
||||
g.DrawString(text2, font, Brushes.White, (MaxColumns * 3 - textSize.Width)+1, 25);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
GenerateFrame(bmp, InterpolationMode.Bicubic);
|
||||
Present();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void GenerateFrame(Image image, InterpolationMode interpolation = InterpolationMode.High)
|
||||
{
|
||||
|
||||
int width = MaxColumns/2 * 6;
|
||||
int height = MaxRows;
|
||||
|
||||
int targetWidth = MaxColumns * 2;
|
||||
|
||||
float scale;
|
||||
|
||||
using (Bitmap bmp = new Bitmap(targetWidth, height))
|
||||
{
|
||||
scale = Math.Min((float)width / (float)image.Width, (float)height / (float)image.Height);
|
||||
|
||||
using (var graph = Graphics.FromImage(bmp))
|
||||
{
|
||||
var scaleWidth = (float)(image.Width * scale);
|
||||
var scaleHeight = (float)(image.Height * scale);
|
||||
|
||||
graph.InterpolationMode = interpolation;
|
||||
graph.CompositingQuality = CompositingQuality.HighQuality;
|
||||
graph.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
|
||||
graph.DrawImage(image, (float)Math.Round(targetWidth - scaleWidth * targetWidth / width), 0, (float)Math.Round(scaleWidth * targetWidth / width), scaleHeight);
|
||||
|
||||
}
|
||||
|
||||
for (int y = 0; y < bmp.Height; y++)
|
||||
{
|
||||
for (int x = 0; x < bmp.Width; x++)
|
||||
if (x % 2 == (y+dx) % 2)
|
||||
{
|
||||
var pixel = bmp.GetPixel(x, y);
|
||||
var color = (pixel.R + pixel.G + pixel.B) / 3;
|
||||
if (color < 10) color = 0;
|
||||
SetLedPlanar(x / 2, y, (byte)color);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void SetLedDiagonal(int x, int y, byte color, int delta = 10)
|
||||
{
|
||||
//x+=delta;
|
||||
y-=delta;
|
||||
|
||||
int dx = (x - y)/2;
|
||||
int dy = x + y;
|
||||
SetLedPlanar(dx, dy, color);
|
||||
}
|
||||
|
||||
public void PresentTextDiagonal(string text)
|
||||
{
|
||||
|
||||
Clear();
|
||||
|
||||
int maxX = (int)Math.Sqrt(MaxRows * MaxRows + MaxColumns * MaxColumns);
|
||||
|
||||
using (Bitmap bmp = new Bitmap(maxX, MaxRows))
|
||||
{
|
||||
using (Graphics g = Graphics.FromImage(bmp))
|
||||
{
|
||||
g.CompositingQuality = CompositingQuality.HighQuality;
|
||||
g.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
|
||||
using (Font font = new Font("Calibri", 16F, GraphicsUnit.Pixel))
|
||||
{
|
||||
SizeF textSize = g.MeasureString(text, font);
|
||||
g.DrawString(text, font, Brushes.White, 4, 0);
|
||||
}
|
||||
}
|
||||
|
||||
for (int y = 0; y < bmp.Height; y++)
|
||||
{
|
||||
for (int x = 0; x < bmp.Width; x++)
|
||||
{
|
||||
var pixel = bmp.GetPixel(x, y);
|
||||
var color = (pixel.R + pixel.G + pixel.B) / 3;
|
||||
SetLedDiagonal(x, y, (byte)color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Present();
|
||||
}
|
||||
|
||||
private bool IsRowInRange(int row)
|
||||
{
|
||||
return (row >= 0 && row < MaxRows);
|
||||
}
|
||||
|
||||
private bool IsAddressableLed(int address)
|
||||
{
|
||||
return (address >= 0 && address < LedCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,4 +3,8 @@
|
||||
<System.Windows.Forms.ApplicationConfigurationSection>
|
||||
<add key="DpiAwareness" value="PerMonitorV2" />
|
||||
</System.Windows.Forms.ApplicationConfigurationSection>
|
||||
</configuration>
|
||||
<appSettings>
|
||||
<add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
|
||||
</appSettings>
|
||||
</configuration>
|
||||
|
||||
208
app/AppConfig.cs
Normal file
@@ -0,0 +1,208 @@
|
||||
using System.Diagnostics;
|
||||
using System.Management;
|
||||
using System.Text.Json;
|
||||
|
||||
public class AppConfig
|
||||
{
|
||||
|
||||
public string appPath;
|
||||
string configFile;
|
||||
|
||||
string _model;
|
||||
|
||||
public Dictionary<string, object> config = new Dictionary<string, object>();
|
||||
|
||||
public AppConfig()
|
||||
{
|
||||
|
||||
appPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\GHelper";
|
||||
configFile = appPath + "\\config.json";
|
||||
|
||||
if (!System.IO.Directory.Exists(appPath))
|
||||
System.IO.Directory.CreateDirectory(appPath);
|
||||
|
||||
if (File.Exists(configFile))
|
||||
{
|
||||
string text = File.ReadAllText(configFile);
|
||||
try
|
||||
{
|
||||
config = JsonSerializer.Deserialize<Dictionary<string, object>>(text);
|
||||
}
|
||||
catch
|
||||
{
|
||||
initConfig();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
initConfig();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public string GetModel()
|
||||
{
|
||||
if (_model is null)
|
||||
{
|
||||
_model = "";
|
||||
using (var searcher = new ManagementObjectSearcher(@"Select * from Win32_ComputerSystem"))
|
||||
{
|
||||
foreach (var process in searcher.Get())
|
||||
{
|
||||
_model = process["Model"].ToString();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return _model;
|
||||
}
|
||||
public bool ContainsModel(string contains)
|
||||
{
|
||||
|
||||
GetModel();
|
||||
return (_model is not null && _model.Contains(contains));
|
||||
|
||||
}
|
||||
private void initConfig()
|
||||
{
|
||||
config = new Dictionary<string, object>();
|
||||
config["performance_mode"] = 0;
|
||||
string jsonString = JsonSerializer.Serialize(config);
|
||||
File.WriteAllText(configFile, jsonString);
|
||||
}
|
||||
|
||||
public int getConfig(string name, bool performance = false)
|
||||
{
|
||||
|
||||
if (config.ContainsKey(name))
|
||||
return int.Parse(config[name].ToString());
|
||||
else return -1;
|
||||
}
|
||||
|
||||
public string getConfigString(string name)
|
||||
{
|
||||
if (config.ContainsKey(name))
|
||||
return config[name].ToString();
|
||||
else return null;
|
||||
}
|
||||
|
||||
public void setConfig(string name, int value)
|
||||
{
|
||||
config[name] = value;
|
||||
string jsonString = JsonSerializer.Serialize(config, new JsonSerializerOptions { WriteIndented = true });
|
||||
try
|
||||
{
|
||||
File.WriteAllText(configFile, jsonString);
|
||||
} catch (Exception e)
|
||||
{
|
||||
Debug.Write(e.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public void setConfig(string name, string value)
|
||||
{
|
||||
config[name] = value;
|
||||
string jsonString = JsonSerializer.Serialize(config, new JsonSerializerOptions { WriteIndented = true });
|
||||
try
|
||||
{
|
||||
File.WriteAllText(configFile, jsonString);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Write(e.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public string getParamName(int device, string paramName = "fan_profile")
|
||||
{
|
||||
int mode = getConfig("performance_mode");
|
||||
string name;
|
||||
|
||||
if (device == 1)
|
||||
name = "gpu";
|
||||
else if (device == 2)
|
||||
name = "mid";
|
||||
else
|
||||
name = "cpu";
|
||||
|
||||
return paramName + "_" + name + "_" + mode;
|
||||
}
|
||||
|
||||
public byte[] getFanConfig(int device)
|
||||
{
|
||||
string curveString = getConfigString(getParamName(device));
|
||||
byte[] curve = { };
|
||||
|
||||
if (curveString is not null)
|
||||
curve = StringToBytes(curveString);
|
||||
|
||||
return curve;
|
||||
}
|
||||
|
||||
public void setFanConfig(int device, byte[] curve)
|
||||
{
|
||||
string bitCurve = BitConverter.ToString(curve);
|
||||
setConfig(getParamName(device), bitCurve);
|
||||
}
|
||||
|
||||
|
||||
public static byte[] StringToBytes(string str)
|
||||
{
|
||||
String[] arr = str.Split('-');
|
||||
byte[] array = new byte[arr.Length];
|
||||
for (int i = 0; i < arr.Length; i++) array[i] = Convert.ToByte(arr[i], 16);
|
||||
return array;
|
||||
}
|
||||
|
||||
public byte[] getDefaultCurve(int device)
|
||||
{
|
||||
int mode = getConfig("performance_mode");
|
||||
byte[] curve;
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case 1:
|
||||
if (device == 1)
|
||||
curve = StringToBytes("14-3F-44-48-4C-50-54-62-16-1F-26-2D-39-47-55-5F");
|
||||
else
|
||||
curve = StringToBytes("14-3F-44-48-4C-50-54-62-11-1A-22-29-34-43-51-5A");
|
||||
break;
|
||||
case 2:
|
||||
if (device == 1)
|
||||
curve = StringToBytes("3C-41-42-46-47-4B-4C-62-08-11-11-1D-1D-26-26-2D");
|
||||
else
|
||||
curve = StringToBytes("3C-41-42-46-47-4B-4C-62-03-0C-0C-16-16-22-22-29");
|
||||
break;
|
||||
default:
|
||||
if (device == 1)
|
||||
curve = StringToBytes("3A-3D-40-44-48-4D-51-62-0C-16-1D-1F-26-2D-34-4A");
|
||||
else
|
||||
curve = StringToBytes("3A-3D-40-44-48-4D-51-62-08-11-16-1A-22-29-30-45");
|
||||
break;
|
||||
}
|
||||
|
||||
return curve;
|
||||
}
|
||||
|
||||
public string getConfigPerfString(string name)
|
||||
{
|
||||
int mode = getConfig("performance_mode");
|
||||
return getConfigString(name + "_" + mode);
|
||||
}
|
||||
|
||||
public int getConfigPerf(string name)
|
||||
{
|
||||
int mode = getConfig("performance_mode");
|
||||
return getConfig(name + "_" + mode);
|
||||
}
|
||||
|
||||
public void setConfigPerf(string name, int value)
|
||||
{
|
||||
int mode = getConfig("performance_mode");
|
||||
setConfig(name + "_" + mode, value);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
288
app/Aura.cs
Normal file
@@ -0,0 +1,288 @@
|
||||
using HidLibrary;
|
||||
using System.Diagnostics;
|
||||
using static Starlight.AnimeMatrix.BuiltInAnimation;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
|
||||
[Flags]
|
||||
public enum AuraDev19b6 : uint
|
||||
{
|
||||
BootLogo = 1,
|
||||
BootKeyb = 1 << 1,
|
||||
AwakeLogo = 1 << 2,
|
||||
AwakeKeyb = 1 << 3,
|
||||
SleepLogo = 1 << 4,
|
||||
SleepKeyb = 1 << 5,
|
||||
ShutdownLogo = 1 << 6,
|
||||
ShutdownKeyb = 1 << 7,
|
||||
BootBar = 1u << (7 + 2),
|
||||
AwakeBar = 1u << (7 + 3),
|
||||
SleepBar = 1u << (7 + 4),
|
||||
ShutdownBar = 1u << (7 + 5),
|
||||
BootLid = 1u << (15 + 1),
|
||||
AwakeLid = 1u << (15 + 2),
|
||||
SleepLid = 1u << (15 + 3),
|
||||
ShutdownLid = 1u << (15 + 4)
|
||||
}
|
||||
|
||||
public static class AuraDev19b6Extensions
|
||||
{
|
||||
public static byte[] ToBytes(this AuraDev19b6[] controls)
|
||||
{
|
||||
uint a = 0;
|
||||
foreach (var n in controls)
|
||||
{
|
||||
a |= (uint)n;
|
||||
}
|
||||
return new byte[] { 0x5d, 0xbd, 0x01, (byte)(a & 0xff), (byte)((a & 0xff00) >> 8), (byte)((a & 0xff0000) >> 16) };
|
||||
}
|
||||
|
||||
public static ushort BitOr(this AuraDev19b6 self, AuraDev19b6 rhs)
|
||||
{
|
||||
return (ushort)(self | rhs);
|
||||
}
|
||||
|
||||
public static ushort BitAnd(this AuraDev19b6 self, AuraDev19b6 rhs)
|
||||
{
|
||||
return (ushort)(self & rhs);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Aura
|
||||
{
|
||||
|
||||
static byte[] MESSAGE_SET = { 0x5d, 0xb5, 0, 0, 0 };
|
||||
static byte[] MESSAGE_APPLY = { 0x5d, 0xb4 };
|
||||
|
||||
static int[] deviceIds = { 0x1a30, 0x1854, 0x1869, 0x1866, 0x19b6, 0x1822, 0x1837, 0x1854, 0x184a, 0x183d, 0x8502, 0x1807, 0x17e0 };
|
||||
|
||||
private static int mode = 0;
|
||||
private static int speed = 1;
|
||||
public static Color Color1 = Color.White;
|
||||
public static Color Color2 = Color.Black;
|
||||
|
||||
|
||||
public static Dictionary<int, string> GetSpeeds()
|
||||
{
|
||||
return new Dictionary<int, string>
|
||||
{
|
||||
{ 0, Properties.Strings.AuraSlow },
|
||||
{ 1, Properties.Strings.AuraNormal },
|
||||
{ 2, Properties.Strings.AuraFast }
|
||||
};
|
||||
}
|
||||
|
||||
static Dictionary<int, string> _modes = new Dictionary<int, string>
|
||||
{
|
||||
{ 0, Properties.Strings.AuraStatic },
|
||||
{ 1, Properties.Strings.AuraBreathe },
|
||||
{ 2, Properties.Strings.AuraColorCycle },
|
||||
{ 3, Properties.Strings.AuraRainbow },
|
||||
{ 10, Properties.Strings.AuraStrobe },
|
||||
};
|
||||
|
||||
static Dictionary<int, string> _modesStrix = new Dictionary<int, string>
|
||||
{
|
||||
{ 0, Properties.Strings.AuraStatic },
|
||||
{ 1, Properties.Strings.AuraBreathe },
|
||||
{ 2, Properties.Strings.AuraColorCycle },
|
||||
{ 3, Properties.Strings.AuraRainbow },
|
||||
{ 4, "Star" },
|
||||
{ 5, "Rain" },
|
||||
{ 6, "Highlight" },
|
||||
{ 7, "Laser" },
|
||||
{ 8, "Ripple" },
|
||||
{ 10, Properties.Strings.AuraStrobe},
|
||||
{ 11, "Comet" },
|
||||
{ 12, "Flash" },
|
||||
};
|
||||
|
||||
|
||||
public static Dictionary<int, string> GetModes()
|
||||
{
|
||||
if (Program.config.ContainsModel("TUF"))
|
||||
{
|
||||
_modes.Remove(3);
|
||||
}
|
||||
|
||||
if (Program.config.ContainsModel("401"))
|
||||
{
|
||||
_modes.Remove(2);
|
||||
_modes.Remove(3);
|
||||
}
|
||||
|
||||
if (Program.config.ContainsModel("Strix") || Program.config.ContainsModel("Scar"))
|
||||
{
|
||||
return _modesStrix;
|
||||
}
|
||||
|
||||
return _modes;
|
||||
}
|
||||
|
||||
|
||||
public static int Mode
|
||||
{
|
||||
get { return mode; }
|
||||
set
|
||||
{
|
||||
if (GetModes().ContainsKey(value))
|
||||
mode = value;
|
||||
else
|
||||
mode = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool HasSecondColor()
|
||||
{
|
||||
return (mode == 1 && !Program.config.ContainsModel("TUF"));
|
||||
}
|
||||
|
||||
public static int Speed
|
||||
{
|
||||
get { return speed; }
|
||||
set
|
||||
{
|
||||
if (GetSpeeds().ContainsKey(value))
|
||||
speed = value;
|
||||
else
|
||||
speed = 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void SetColor(int colorCode)
|
||||
{
|
||||
Color1 = Color.FromArgb(colorCode);
|
||||
}
|
||||
|
||||
public static void SetColor2(int colorCode)
|
||||
{
|
||||
Color2 = Color.FromArgb(colorCode);
|
||||
}
|
||||
|
||||
public static byte[] AuraMessage(int mode, Color color, Color color2, int speed)
|
||||
{
|
||||
|
||||
byte[] msg = new byte[17];
|
||||
msg[0] = 0x5d;
|
||||
msg[1] = 0xb3;
|
||||
msg[2] = 0x00; // Zone
|
||||
msg[3] = (byte)mode; // Aura Mode
|
||||
msg[4] = (byte)(color.R); // R
|
||||
msg[5] = (byte)(color.G); // G
|
||||
msg[6] = (byte)(color.B); // B
|
||||
msg[7] = (byte)speed; // aura.speed as u8;
|
||||
msg[8] = 0; // aura.direction as u8;
|
||||
msg[10] = (byte)(color2.R); // R
|
||||
msg[11] = (byte)(color2.G); // G
|
||||
msg[12] = (byte)(color2.B); // B
|
||||
return msg;
|
||||
}
|
||||
|
||||
|
||||
public static void ApplyBrightness(int brightness)
|
||||
{
|
||||
HidDevice[] HidDeviceList = HidDevices.Enumerate(0x0b05, deviceIds).ToArray();
|
||||
|
||||
byte[] msg = { 0x5d, 0xba, 0xc5, 0xc4, (byte)brightness };
|
||||
|
||||
foreach (HidDevice device in HidDeviceList)
|
||||
if (device.IsConnected && device.Description.Contains("HID"))
|
||||
{
|
||||
device.OpenDevice();
|
||||
device.Write(msg);
|
||||
device.CloseDevice();
|
||||
}
|
||||
|
||||
Logger.WriteLine("USB-KB = " + BitConverter.ToString(msg));
|
||||
|
||||
if (Program.config.ContainsModel("TUF"))
|
||||
Program.wmi.TUFKeyboardBrightness(brightness);
|
||||
}
|
||||
|
||||
|
||||
public static void ApplyAuraPower(bool awake = true, bool boot = false, bool sleep = false, bool shutdown = false)
|
||||
{
|
||||
HidDevice[] HidDeviceList = HidDevices.Enumerate(0x0b05, 0x19b6).ToArray();
|
||||
|
||||
List<AuraDev19b6> flags = new List<AuraDev19b6>();
|
||||
|
||||
if (awake) flags.Add(AuraDev19b6.AwakeKeyb);
|
||||
if (boot) flags.Add(AuraDev19b6.BootKeyb);
|
||||
if (sleep) flags.Add(AuraDev19b6.SleepKeyb);
|
||||
if (shutdown) flags.Add(AuraDev19b6.ShutdownKeyb);
|
||||
|
||||
flags.Add(AuraDev19b6.AwakeBar);
|
||||
flags.Add(AuraDev19b6.BootBar);
|
||||
flags.Add(AuraDev19b6.SleepBar);
|
||||
flags.Add(AuraDev19b6.ShutdownBar);
|
||||
|
||||
flags.Add(AuraDev19b6.AwakeLid);
|
||||
flags.Add(AuraDev19b6.BootLid);
|
||||
flags.Add(AuraDev19b6.SleepLid);
|
||||
flags.Add(AuraDev19b6.ShutdownLid);
|
||||
|
||||
flags.Add(AuraDev19b6.AwakeLogo);
|
||||
flags.Add(AuraDev19b6.BootLogo);
|
||||
flags.Add(AuraDev19b6.SleepLogo);
|
||||
flags.Add(AuraDev19b6.ShutdownLogo);
|
||||
|
||||
byte[] msg = AuraDev19b6Extensions.ToBytes(flags.ToArray());
|
||||
|
||||
Debug.WriteLine(BitConverter.ToString(msg));
|
||||
|
||||
foreach (HidDevice device in HidDeviceList)
|
||||
if (device.IsConnected && device.Description.Contains("HID"))
|
||||
{
|
||||
device.OpenDevice();
|
||||
device.Write(msg);
|
||||
device.CloseDevice();
|
||||
}
|
||||
|
||||
Logger.WriteLine("USB-KB = " + BitConverter.ToString(msg));
|
||||
|
||||
if (Program.config.ContainsModel("TUF"))
|
||||
Program.wmi.TUFKeyboardPower(awake, boot, sleep, shutdown);
|
||||
|
||||
}
|
||||
|
||||
public static void ApplyAura()
|
||||
{
|
||||
|
||||
HidDevice[] HidDeviceList = HidDevices.Enumerate(0x0b05, deviceIds).ToArray();
|
||||
|
||||
int _speed;
|
||||
|
||||
switch (Speed)
|
||||
{
|
||||
case 1:
|
||||
_speed = 0xeb;
|
||||
break;
|
||||
case 2:
|
||||
_speed = 0xf5;
|
||||
break;
|
||||
default:
|
||||
_speed = 0xe1;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
byte[] msg = AuraMessage(Mode, Color1, Color2, _speed);
|
||||
foreach (HidDevice device in HidDeviceList)
|
||||
if (device.IsConnected && device.Description.Contains("HID"))
|
||||
{
|
||||
device.OpenDevice();
|
||||
device.Write(msg);
|
||||
device.Write(MESSAGE_SET);
|
||||
device.Write(MESSAGE_APPLY);
|
||||
device.CloseDevice();
|
||||
}
|
||||
|
||||
if (Program.config.ContainsModel("TUF"))
|
||||
Program.wmi.TUFKeyboardRGB(Mode, Color1, _speed);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
45
app/Communication/Device.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
// Source thanks to https://github.com/vddCore/Starlight :)
|
||||
|
||||
using Starlight.Communication.Platform;
|
||||
using System.Configuration;
|
||||
|
||||
namespace Starlight.Communication
|
||||
{
|
||||
public abstract class Device : IDisposable
|
||||
{
|
||||
private static UsbProvider _usbProvider;
|
||||
|
||||
private static ushort _vendorId;
|
||||
private static ushort _productId;
|
||||
private static int _maxFeatureReportLength;
|
||||
|
||||
protected Device(ushort vendorId, ushort productId, int maxFeatureReportLength)
|
||||
{
|
||||
_vendorId = vendorId;
|
||||
_productId = productId;
|
||||
_maxFeatureReportLength = maxFeatureReportLength;
|
||||
SetProvider();
|
||||
}
|
||||
|
||||
public void SetProvider()
|
||||
{
|
||||
_usbProvider = new WindowsUsbProvider(_vendorId, _productId, _maxFeatureReportLength);
|
||||
}
|
||||
|
||||
protected T Packet<T>(params byte[] command) where T : Packet
|
||||
{
|
||||
return (T)Activator.CreateInstance(typeof(T), command)!;
|
||||
}
|
||||
|
||||
public void Set(Packet packet)
|
||||
=> _usbProvider?.Set(packet.Data);
|
||||
|
||||
public byte[] Get(Packet packet)
|
||||
=> _usbProvider?.Get(packet.Data);
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_usbProvider?.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
58
app/Communication/Packet.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
// Source thanks to https://github.com/vddCore/Starlight :)
|
||||
|
||||
namespace Starlight.Communication
|
||||
{
|
||||
public abstract class Packet
|
||||
{
|
||||
private int _currentDataIndex = 1;
|
||||
|
||||
public byte[] Data { get; }
|
||||
|
||||
internal Packet(byte reportId, int packetLength, params byte[] data)
|
||||
{
|
||||
if (packetLength < 1)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(
|
||||
nameof(packetLength),
|
||||
"Packet length must be at least 1."
|
||||
);
|
||||
}
|
||||
|
||||
Data = new byte[packetLength];
|
||||
Data[0] = reportId;
|
||||
|
||||
if (data.Length > 0)
|
||||
{
|
||||
if (_currentDataIndex >= Data.Length)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(
|
||||
nameof(data),
|
||||
"Your packet length does not allow for initial data to be appended."
|
||||
);
|
||||
}
|
||||
|
||||
AppendData(data);
|
||||
}
|
||||
}
|
||||
|
||||
public Packet AppendData(params byte[] data)
|
||||
=> AppendData(out _, data);
|
||||
|
||||
public Packet AppendData(out int bytesWritten, params byte[] data)
|
||||
{
|
||||
bytesWritten = 0;
|
||||
|
||||
for (var i = 0;
|
||||
i < data.Length && _currentDataIndex < Data.Length - 1;
|
||||
i++, bytesWritten++, _currentDataIndex++)
|
||||
{
|
||||
if (_currentDataIndex > Data.Length - 1)
|
||||
break;
|
||||
|
||||
Data[_currentDataIndex] = data[i];
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
19
app/Communication/Platform/UsbProvider.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
namespace Starlight.Communication.Platform
|
||||
{
|
||||
internal abstract class UsbProvider : IDisposable
|
||||
{
|
||||
protected ushort VendorID { get; }
|
||||
protected ushort ProductID { get; }
|
||||
|
||||
protected UsbProvider(ushort vendorId, ushort productId)
|
||||
{
|
||||
VendorID = vendorId;
|
||||
ProductID = productId;
|
||||
}
|
||||
|
||||
public abstract void Set(byte[] data);
|
||||
public abstract byte[] Get(byte[] data);
|
||||
|
||||
public abstract void Dispose();
|
||||
}
|
||||
}
|
||||
79
app/Communication/Platform/WindowsUsbProvider.cs
Normal file
@@ -0,0 +1,79 @@
|
||||
using System.ComponentModel;
|
||||
using HidSharp;
|
||||
|
||||
namespace Starlight.Communication.Platform
|
||||
{
|
||||
internal class WindowsUsbProvider : UsbProvider
|
||||
{
|
||||
protected HidDevice HidDevice { get; }
|
||||
protected HidStream HidStream { get; }
|
||||
|
||||
public WindowsUsbProvider(ushort vendorId, ushort productId, int maxFeatureReportLength)
|
||||
: base(vendorId, productId)
|
||||
{
|
||||
try
|
||||
{
|
||||
HidDevice = DeviceList.Local
|
||||
.GetHidDevices(vendorId, productId)
|
||||
.First(x => x.GetMaxFeatureReportLength() == maxFeatureReportLength);
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw new IOException("AniMe Matrix control device was not found on your machine.");
|
||||
}
|
||||
|
||||
var config = new OpenConfiguration();
|
||||
config.SetOption(OpenOption.Interruptible, true);
|
||||
config.SetOption(OpenOption.Exclusive, false);
|
||||
config.SetOption(OpenOption.Priority, 10);
|
||||
|
||||
HidStream = HidDevice.Open(config);
|
||||
}
|
||||
|
||||
public override void Set(byte[] data)
|
||||
{
|
||||
WrapException(() =>
|
||||
{
|
||||
HidStream.SetFeature(data);
|
||||
HidStream.Flush();
|
||||
});
|
||||
}
|
||||
|
||||
public override byte[] Get(byte[] data)
|
||||
{
|
||||
var outData = new byte[data.Length];
|
||||
Array.Copy(data, outData, data.Length);
|
||||
|
||||
WrapException(() =>
|
||||
{
|
||||
HidStream.GetFeature(outData);
|
||||
HidStream.Flush();
|
||||
});
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
HidStream.Dispose();
|
||||
}
|
||||
|
||||
private void WrapException(Action action)
|
||||
{
|
||||
try
|
||||
{
|
||||
action();
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
if (e.InnerException is Win32Exception w32e)
|
||||
{
|
||||
if (w32e.NativeErrorCode != 0)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
170
app/ControlHelper.cs
Normal file
@@ -0,0 +1,170 @@
|
||||
using CustomControls;
|
||||
using WinFormsSliderBar;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Windows.Forms.DataVisualization.Charting;
|
||||
|
||||
public static class ControlHelper
|
||||
{
|
||||
|
||||
static bool _invert = false;
|
||||
static float _scale = 1;
|
||||
|
||||
public static void Adjust(RForm container, bool invert = false)
|
||||
{
|
||||
|
||||
container.BackColor = RForm.formBack;
|
||||
container.ForeColor = RForm.foreMain;
|
||||
|
||||
_invert = invert;
|
||||
AdjustControls(container.Controls);
|
||||
_invert = false;
|
||||
|
||||
}
|
||||
|
||||
public static void Resize(RForm container, float baseScale = 2)
|
||||
{
|
||||
_scale = GetDpiScale(container).Value / baseScale;
|
||||
if (Math.Abs(_scale - 1) > 0.2) ResizeControls(container.Controls);
|
||||
|
||||
}
|
||||
|
||||
private static void ResizeControls(Control.ControlCollection controls)
|
||||
{
|
||||
foreach (Control control in controls)
|
||||
{
|
||||
var button = control as RButton;
|
||||
if (button != null && button.Image is not null)
|
||||
button.Image = ResizeImage(button.Image);
|
||||
|
||||
/*
|
||||
var pictureBox = control as PictureBox;
|
||||
if (pictureBox != null && pictureBox.BackgroundImage is not null)
|
||||
pictureBox.BackgroundImage = ResizeImage(pictureBox.BackgroundImage);
|
||||
*/
|
||||
|
||||
ResizeControls(control.Controls);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static void AdjustControls(Control.ControlCollection controls)
|
||||
{
|
||||
foreach (Control control in controls)
|
||||
{
|
||||
var button = control as RButton;
|
||||
if (button != null)
|
||||
{
|
||||
button.BackColor = button.Secondary ? RForm.buttonSecond : RForm.buttonMain;
|
||||
button.ForeColor = RForm.foreMain;
|
||||
|
||||
button.FlatStyle = FlatStyle.Flat;
|
||||
button.FlatAppearance.BorderColor = RForm.borderMain;
|
||||
|
||||
if (button.Image is not null)
|
||||
button.Image = AdjustImage(button.Image);
|
||||
}
|
||||
|
||||
var pictureBox = control as PictureBox;
|
||||
if (pictureBox != null && pictureBox.BackgroundImage is not null)
|
||||
pictureBox.BackgroundImage = AdjustImage(pictureBox.BackgroundImage);
|
||||
|
||||
|
||||
var combo = control as RComboBox;
|
||||
if (combo != null)
|
||||
{
|
||||
combo.BackColor = RForm.buttonMain;
|
||||
combo.ForeColor = RForm.foreMain;
|
||||
combo.BorderColor = RForm.buttonMain;
|
||||
combo.ButtonColor = RForm.buttonMain;
|
||||
combo.ArrowColor = RForm.foreMain;
|
||||
}
|
||||
|
||||
var gb = control as GroupBox;
|
||||
if (gb != null)
|
||||
{
|
||||
gb.ForeColor = RForm.foreMain;
|
||||
}
|
||||
|
||||
var sl = control as Slider;
|
||||
if (sl != null)
|
||||
{
|
||||
sl.borderColor = RForm.buttonMain;
|
||||
}
|
||||
|
||||
var chk = control as CheckBox;
|
||||
if (chk != null && chk.Padding.Left > 5)
|
||||
{
|
||||
chk.BackColor = RForm.buttonSecond;
|
||||
}
|
||||
|
||||
var chart = control as Chart;
|
||||
if (chart != null)
|
||||
{
|
||||
chart.BackColor = RForm.chartMain;
|
||||
chart.ChartAreas[0].BackColor = RForm.chartMain;
|
||||
|
||||
chart.ChartAreas[0].AxisX.TitleForeColor = RForm.foreMain;
|
||||
chart.ChartAreas[0].AxisY.TitleForeColor = RForm.foreMain;
|
||||
|
||||
chart.ChartAreas[0].AxisX.LabelStyle.ForeColor = RForm.foreMain;
|
||||
chart.ChartAreas[0].AxisY.LabelStyle.ForeColor = RForm.foreMain;
|
||||
|
||||
chart.ChartAreas[0].AxisX.MajorTickMark.LineColor = RForm.foreMain;
|
||||
chart.ChartAreas[0].AxisY.MajorTickMark.LineColor = RForm.foreMain;
|
||||
|
||||
chart.ChartAreas[0].AxisX.MajorGrid.LineColor = RForm.chartGrid;
|
||||
chart.ChartAreas[0].AxisY.MajorGrid.LineColor = RForm.chartGrid;
|
||||
chart.ChartAreas[0].AxisX.LineColor = RForm.chartGrid;
|
||||
chart.ChartAreas[0].AxisY.LineColor = RForm.chartGrid;
|
||||
|
||||
chart.Titles[0].ForeColor = RForm.foreMain;
|
||||
|
||||
}
|
||||
|
||||
AdjustControls(control.Controls);
|
||||
}
|
||||
}
|
||||
|
||||
public static Lazy<float> GetDpiScale(Control control)
|
||||
{
|
||||
return new Lazy<float>(() =>
|
||||
{
|
||||
using (var graphics = control.CreateGraphics())
|
||||
return graphics.DpiX / 96.0f;
|
||||
});
|
||||
}
|
||||
|
||||
private static Image ResizeImage(Image image)
|
||||
{
|
||||
var newSize = new Size((int)(image.Width * _scale), (int)(image.Height * _scale));
|
||||
var pic = new Bitmap(newSize.Width, newSize.Height);
|
||||
|
||||
using (var g = Graphics.FromImage(pic))
|
||||
{
|
||||
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
||||
g.DrawImage(image, new Rectangle(new Point(), newSize));
|
||||
}
|
||||
return pic;
|
||||
}
|
||||
|
||||
private static Image AdjustImage(Image image)
|
||||
{
|
||||
var pic = new Bitmap(image);
|
||||
|
||||
if (_invert)
|
||||
{
|
||||
for (int y = 0; (y <= (pic.Height - 1)); y++)
|
||||
{
|
||||
for (int x = 0; (x <= (pic.Width - 1)); x++)
|
||||
{
|
||||
Color col = pic.GetPixel(x, y);
|
||||
pic.SetPixel(x, y, Color.FromArgb(col.A, (255 - col.R), (255 - col.G), (255 - col.B)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return pic;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
395
app/CustomControls.cs
Normal file
@@ -0,0 +1,395 @@
|
||||
using Microsoft.Win32;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace CustomControls
|
||||
{
|
||||
|
||||
public class RForm : Form
|
||||
{
|
||||
|
||||
public static Color colorEco = Color.FromArgb(255, 6, 180, 138);
|
||||
public static Color colorStandard = Color.FromArgb(255, 58, 174, 239);
|
||||
public static Color colorTurbo = Color.FromArgb(255, 255, 32, 32);
|
||||
|
||||
public static Color buttonMain;
|
||||
public static Color buttonSecond;
|
||||
|
||||
public static Color formBack;
|
||||
public static Color foreMain;
|
||||
public static Color borderMain;
|
||||
public static Color chartMain;
|
||||
public static Color chartGrid;
|
||||
|
||||
[DllImport("UXTheme.dll", SetLastError = true, EntryPoint = "#138")]
|
||||
public static extern bool CheckSystemDarkModeStatus();
|
||||
|
||||
[DllImport("DwmApi")] //System.Runtime.InteropServices
|
||||
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize);
|
||||
|
||||
public bool darkTheme = false;
|
||||
|
||||
public static void InitColors(bool darkTheme)
|
||||
{
|
||||
if (darkTheme)
|
||||
{
|
||||
buttonMain = Color.FromArgb(255, 55, 55, 55);
|
||||
buttonSecond = Color.FromArgb(255, 38, 38, 38);
|
||||
|
||||
formBack = Color.FromArgb(255, 28, 28, 28);
|
||||
foreMain = Color.FromArgb(255, 240, 240, 240);
|
||||
borderMain = Color.FromArgb(255, 50, 50, 50);
|
||||
|
||||
chartMain = Color.FromArgb(255, 35, 35, 35);
|
||||
chartGrid = Color.FromArgb(255, 70, 70, 70);
|
||||
}
|
||||
else
|
||||
{
|
||||
buttonMain = SystemColors.ControlLightLight;
|
||||
buttonSecond = SystemColors.ControlLight;
|
||||
|
||||
formBack = SystemColors.Control;
|
||||
foreMain = SystemColors.ControlText;
|
||||
borderMain = Color.LightGray;
|
||||
|
||||
chartMain = SystemColors.ControlLightLight;
|
||||
chartGrid = Color.LightGray;
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsDarkTheme()
|
||||
{
|
||||
using var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize");
|
||||
var registryValueObject = key?.GetValue("AppsUseLightTheme");
|
||||
|
||||
if (registryValueObject == null) return false;
|
||||
return (int)registryValueObject <= 0;
|
||||
}
|
||||
|
||||
public bool InitTheme(bool setDPI = false)
|
||||
{
|
||||
bool newDarkTheme = CheckSystemDarkModeStatus();
|
||||
bool changed = (darkTheme != newDarkTheme);
|
||||
darkTheme = newDarkTheme;
|
||||
|
||||
InitColors(darkTheme);
|
||||
|
||||
if (setDPI)
|
||||
ControlHelper.Resize(this);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
DwmSetWindowAttribute(this.Handle, 20, new[] { darkTheme ? 1 : 0 }, 4);
|
||||
ControlHelper.Adjust(this, changed);
|
||||
}
|
||||
|
||||
return changed;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class RCheckBox : CheckBox
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class RComboBox : ComboBox
|
||||
{
|
||||
private Color borderColor = Color.Gray;
|
||||
[DefaultValue(typeof(Color), "Gray")]
|
||||
public Color BorderColor
|
||||
{
|
||||
get { return borderColor; }
|
||||
set
|
||||
{
|
||||
if (borderColor != value)
|
||||
{
|
||||
borderColor = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private Color buttonColor = Color.FromArgb(255, 255, 255, 255);
|
||||
[DefaultValue(typeof(Color), "255, 255, 255")]
|
||||
public Color ButtonColor
|
||||
{
|
||||
get { return buttonColor; }
|
||||
set
|
||||
{
|
||||
if (buttonColor != value)
|
||||
{
|
||||
buttonColor = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Color arrowColor = Color.Black;
|
||||
[DefaultValue(typeof(Color), "Black")]
|
||||
public Color ArrowColor
|
||||
{
|
||||
get { return arrowColor; }
|
||||
set
|
||||
{
|
||||
if (arrowColor != value)
|
||||
{
|
||||
arrowColor = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected override void WndProc(ref Message m)
|
||||
{
|
||||
if (m.Msg == WM_PAINT && DropDownStyle != ComboBoxStyle.Simple)
|
||||
{
|
||||
var clientRect = ClientRectangle;
|
||||
var dropDownButtonWidth = SystemInformation.HorizontalScrollBarArrowWidth;
|
||||
var outerBorder = new Rectangle(clientRect.Location,
|
||||
new Size(clientRect.Width - 1, clientRect.Height - 1));
|
||||
var innerBorder = new Rectangle(outerBorder.X + 1, outerBorder.Y + 1,
|
||||
outerBorder.Width - dropDownButtonWidth - 2, outerBorder.Height - 2);
|
||||
var innerInnerBorder = new Rectangle(innerBorder.X + 1, innerBorder.Y + 1,
|
||||
innerBorder.Width - 2, innerBorder.Height - 2);
|
||||
var dropDownRect = new Rectangle(innerBorder.Right + 1, innerBorder.Y,
|
||||
dropDownButtonWidth, innerBorder.Height + 1);
|
||||
if (RightToLeft == RightToLeft.Yes)
|
||||
{
|
||||
innerBorder.X = clientRect.Width - innerBorder.Right;
|
||||
innerInnerBorder.X = clientRect.Width - innerInnerBorder.Right;
|
||||
dropDownRect.X = clientRect.Width - dropDownRect.Right;
|
||||
dropDownRect.Width += 1;
|
||||
}
|
||||
var innerBorderColor = Enabled ? BackColor : SystemColors.Control;
|
||||
var outerBorderColor = Enabled ? BorderColor : SystemColors.ControlDark;
|
||||
var buttonColor = Enabled ? ButtonColor : SystemColors.Control;
|
||||
var middle = new Point(dropDownRect.Left + dropDownRect.Width / 2,
|
||||
dropDownRect.Top + dropDownRect.Height / 2);
|
||||
var arrow = new Point[]
|
||||
{
|
||||
new Point(middle.X - 3, middle.Y - 2),
|
||||
new Point(middle.X + 4, middle.Y - 2),
|
||||
new Point(middle.X, middle.Y + 2)
|
||||
};
|
||||
var ps = new PAINTSTRUCT();
|
||||
bool shoulEndPaint = false;
|
||||
IntPtr dc;
|
||||
if (m.WParam == IntPtr.Zero)
|
||||
{
|
||||
dc = BeginPaint(Handle, ref ps);
|
||||
m.WParam = dc;
|
||||
shoulEndPaint = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
dc = m.WParam;
|
||||
}
|
||||
|
||||
var rgn = CreateRectRgn(innerInnerBorder.Left, innerInnerBorder.Top,
|
||||
innerInnerBorder.Right, innerInnerBorder.Bottom);
|
||||
|
||||
SelectClipRgn(dc, rgn);
|
||||
DefWndProc(ref m);
|
||||
DeleteObject(rgn);
|
||||
rgn = CreateRectRgn(clientRect.Left, clientRect.Top,
|
||||
clientRect.Right, clientRect.Bottom);
|
||||
SelectClipRgn(dc, rgn);
|
||||
using (var g = Graphics.FromHdc(dc))
|
||||
{
|
||||
using (var b = new SolidBrush(buttonColor))
|
||||
{
|
||||
g.FillRectangle(b, dropDownRect);
|
||||
}
|
||||
using (var b = new SolidBrush(arrowColor))
|
||||
{
|
||||
g.FillPolygon(b, arrow);
|
||||
}
|
||||
using (var p = new Pen(innerBorderColor))
|
||||
{
|
||||
g.DrawRectangle(p, innerBorder);
|
||||
g.DrawRectangle(p, innerInnerBorder);
|
||||
}
|
||||
using (var p = new Pen(outerBorderColor))
|
||||
{
|
||||
g.DrawRectangle(p, outerBorder);
|
||||
}
|
||||
}
|
||||
if (shoulEndPaint)
|
||||
EndPaint(Handle, ref ps);
|
||||
DeleteObject(rgn);
|
||||
}
|
||||
else
|
||||
base.WndProc(ref m);
|
||||
}
|
||||
|
||||
private const int WM_PAINT = 0xF;
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct RECT
|
||||
{
|
||||
public int L, T, R, B;
|
||||
}
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct PAINTSTRUCT
|
||||
{
|
||||
public IntPtr hdc;
|
||||
public bool fErase;
|
||||
public int rcPaint_left;
|
||||
public int rcPaint_top;
|
||||
public int rcPaint_right;
|
||||
public int rcPaint_bottom;
|
||||
public bool fRestore;
|
||||
public bool fIncUpdate;
|
||||
public int reserved1;
|
||||
public int reserved2;
|
||||
public int reserved3;
|
||||
public int reserved4;
|
||||
public int reserved5;
|
||||
public int reserved6;
|
||||
public int reserved7;
|
||||
public int reserved8;
|
||||
}
|
||||
[DllImport("user32.dll")]
|
||||
private static extern IntPtr BeginPaint(IntPtr hWnd,
|
||||
[In, Out] ref PAINTSTRUCT lpPaint);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool EndPaint(IntPtr hWnd, ref PAINTSTRUCT lpPaint);
|
||||
|
||||
[DllImport("gdi32.dll")]
|
||||
public static extern int SelectClipRgn(IntPtr hDC, IntPtr hRgn);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int GetUpdateRgn(IntPtr hwnd, IntPtr hrgn, bool fErase);
|
||||
public enum RegionFlags
|
||||
{
|
||||
ERROR = 0,
|
||||
NULLREGION = 1,
|
||||
SIMPLEREGION = 2,
|
||||
COMPLEXREGION = 3,
|
||||
}
|
||||
[DllImport("gdi32.dll")]
|
||||
internal static extern bool DeleteObject(IntPtr hObject);
|
||||
|
||||
[DllImport("gdi32.dll")]
|
||||
private static extern IntPtr CreateRectRgn(int x1, int y1, int x2, int y2);
|
||||
}
|
||||
|
||||
public class RButton : Button
|
||||
{
|
||||
//Fields
|
||||
private int borderSize = 5;
|
||||
|
||||
private int borderRadius = 5;
|
||||
public int BorderRadius
|
||||
{
|
||||
get { return borderRadius; }
|
||||
set
|
||||
{
|
||||
borderRadius = value;
|
||||
}
|
||||
}
|
||||
|
||||
private Color borderColor = Color.Transparent;
|
||||
public Color BorderColor
|
||||
{
|
||||
get { return borderColor; }
|
||||
set
|
||||
{
|
||||
borderColor = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private bool activated = false;
|
||||
public bool Activated
|
||||
{
|
||||
get { return activated; }
|
||||
set
|
||||
{
|
||||
if (activated != value)
|
||||
this.Invalidate();
|
||||
activated = value;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private bool secondary = false;
|
||||
public bool Secondary
|
||||
{
|
||||
get { return secondary; }
|
||||
set
|
||||
{
|
||||
secondary = value;
|
||||
}
|
||||
}
|
||||
|
||||
public RButton()
|
||||
{
|
||||
this.FlatStyle = FlatStyle.Flat;
|
||||
this.FlatAppearance.BorderSize = 0;
|
||||
}
|
||||
|
||||
private GraphicsPath GetFigurePath(Rectangle rect, int radius)
|
||||
{
|
||||
GraphicsPath path = new GraphicsPath();
|
||||
float curveSize = radius * 2F;
|
||||
|
||||
path.StartFigure();
|
||||
path.AddArc(rect.X, rect.Y, curveSize, curveSize, 180, 90);
|
||||
path.AddArc(rect.Right - curveSize, rect.Y, curveSize, curveSize, 270, 90);
|
||||
path.AddArc(rect.Right - curveSize, rect.Bottom - curveSize, curveSize, curveSize, 0, 90);
|
||||
path.AddArc(rect.X, rect.Bottom - curveSize, curveSize, curveSize, 90, 90);
|
||||
path.CloseFigure();
|
||||
return path;
|
||||
}
|
||||
|
||||
|
||||
protected override void OnPaint(PaintEventArgs pevent)
|
||||
{
|
||||
|
||||
base.OnPaint(pevent);
|
||||
|
||||
float ratio = pevent.Graphics.DpiX / 192.0f;
|
||||
int border = (int)(ratio * borderSize);
|
||||
|
||||
Rectangle rectSurface = this.ClientRectangle;
|
||||
Rectangle rectBorder = Rectangle.Inflate(rectSurface, -border, -border);
|
||||
|
||||
Color borderDrawColor = activated ? borderColor : Color.Transparent;
|
||||
|
||||
using (GraphicsPath pathSurface = GetFigurePath(rectSurface, borderRadius + border))
|
||||
using (GraphicsPath pathBorder = GetFigurePath(rectBorder, borderRadius))
|
||||
using (Pen penSurface = new Pen(this.Parent.BackColor, border))
|
||||
using (Pen penBorder = new Pen(borderDrawColor, border))
|
||||
{
|
||||
penBorder.Alignment = PenAlignment.Outset;
|
||||
pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
this.Region = new Region(pathSurface);
|
||||
pevent.Graphics.DrawPath(penSurface, pathSurface);
|
||||
pevent.Graphics.DrawPath(penBorder, pathBorder);
|
||||
}
|
||||
|
||||
if (!Enabled && ForeColor != SystemColors.ControlText)
|
||||
{
|
||||
var rect = pevent.ClipRectangle;
|
||||
if (Image is not null)
|
||||
{
|
||||
rect.Y += Image.Height;
|
||||
rect.Height -= Image.Height;
|
||||
}
|
||||
TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak;
|
||||
TextRenderer.DrawText(pevent.Graphics, this.Text, this.Font, rect, Color.Gray, flags);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -117,26 +117,4 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="eco" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\eco.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ultimate" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ultimate.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="standard" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\standard.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-speed-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-speed-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-video-card-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-video-card-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-charging-battery-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-charging-battery-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-laptop-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-laptop-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
392
app/Extra.Designer.cs
generated
Normal file
@@ -0,0 +1,392 @@
|
||||
using CustomControls;
|
||||
using GHelper.Properties;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
partial class Extra
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
groupBindings = new GroupBox();
|
||||
pictureHelp = new PictureBox();
|
||||
textFNF4 = new TextBox();
|
||||
comboFNF4 = new RComboBox();
|
||||
labelFNF4 = new Label();
|
||||
textM4 = new TextBox();
|
||||
textM3 = new TextBox();
|
||||
comboM4 = new RComboBox();
|
||||
labelM4 = new Label();
|
||||
comboM3 = new RComboBox();
|
||||
labelM3 = new Label();
|
||||
groupLight = new GroupBox();
|
||||
labelBrightness = new Label();
|
||||
trackBrightness = new TrackBar();
|
||||
labelSpeed = new Label();
|
||||
comboKeyboardSpeed = new RComboBox();
|
||||
checkShutdown = new CheckBox();
|
||||
checkSleep = new CheckBox();
|
||||
checkBoot = new CheckBox();
|
||||
checkAwake = new CheckBox();
|
||||
groupOther = new GroupBox();
|
||||
checkUSBC = new CheckBox();
|
||||
checkNoOverdrive = new CheckBox();
|
||||
checkKeyboardAuto = new CheckBox();
|
||||
checkTopmost = new CheckBox();
|
||||
groupBindings.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureHelp).BeginInit();
|
||||
groupLight.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackBrightness).BeginInit();
|
||||
groupOther.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// groupBindings
|
||||
//
|
||||
groupBindings.Controls.Add(pictureHelp);
|
||||
groupBindings.Controls.Add(textFNF4);
|
||||
groupBindings.Controls.Add(comboFNF4);
|
||||
groupBindings.Controls.Add(labelFNF4);
|
||||
groupBindings.Controls.Add(textM4);
|
||||
groupBindings.Controls.Add(textM3);
|
||||
groupBindings.Controls.Add(comboM4);
|
||||
groupBindings.Controls.Add(labelM4);
|
||||
groupBindings.Controls.Add(comboM3);
|
||||
groupBindings.Controls.Add(labelM3);
|
||||
groupBindings.Dock = DockStyle.Top;
|
||||
groupBindings.Location = new Point(10, 10);
|
||||
groupBindings.Name = "groupBindings";
|
||||
groupBindings.Size = new Size(844, 242);
|
||||
groupBindings.TabIndex = 0;
|
||||
groupBindings.TabStop = false;
|
||||
groupBindings.Text = "Key Bindings";
|
||||
//
|
||||
// pictureHelp
|
||||
//
|
||||
pictureHelp.BackgroundImage = Resources.icons8_help_64;
|
||||
pictureHelp.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
pictureHelp.Cursor = Cursors.Hand;
|
||||
pictureHelp.Location = new Point(744, 57);
|
||||
pictureHelp.Name = "pictureHelp";
|
||||
pictureHelp.Size = new Size(32, 32);
|
||||
pictureHelp.TabIndex = 9;
|
||||
pictureHelp.TabStop = false;
|
||||
//
|
||||
// textFNF4
|
||||
//
|
||||
textFNF4.Location = new Point(415, 176);
|
||||
textFNF4.Name = "textFNF4";
|
||||
textFNF4.PlaceholderText = "action";
|
||||
textFNF4.Size = new Size(320, 39);
|
||||
textFNF4.TabIndex = 8;
|
||||
//
|
||||
// comboFNF4
|
||||
//
|
||||
comboFNF4.BorderColor = Color.White;
|
||||
comboFNF4.ButtonColor = Color.FromArgb(255, 255, 255);
|
||||
comboFNF4.FormattingEnabled = true;
|
||||
comboFNF4.Location = new Point(93, 175);
|
||||
comboFNF4.Name = "comboFNF4";
|
||||
comboFNF4.Size = new Size(312, 40);
|
||||
comboFNF4.TabIndex = 7;
|
||||
//
|
||||
// labelFNF4
|
||||
//
|
||||
labelFNF4.AutoSize = true;
|
||||
labelFNF4.Location = new Point(2, 178);
|
||||
labelFNF4.Name = "labelFNF4";
|
||||
labelFNF4.Size = new Size(90, 32);
|
||||
labelFNF4.TabIndex = 6;
|
||||
labelFNF4.Text = "FN+F4:";
|
||||
//
|
||||
// textM4
|
||||
//
|
||||
textM4.Location = new Point(415, 113);
|
||||
textM4.Name = "textM4";
|
||||
textM4.PlaceholderText = "action";
|
||||
textM4.Size = new Size(320, 39);
|
||||
textM4.TabIndex = 5;
|
||||
//
|
||||
// textM3
|
||||
//
|
||||
textM3.Location = new Point(415, 54);
|
||||
textM3.Name = "textM3";
|
||||
textM3.PlaceholderText = "notepad /p \"file.txt\"";
|
||||
textM3.Size = new Size(320, 39);
|
||||
textM3.TabIndex = 4;
|
||||
//
|
||||
// comboM4
|
||||
//
|
||||
comboM4.BorderColor = Color.White;
|
||||
comboM4.ButtonColor = Color.FromArgb(255, 255, 255);
|
||||
comboM4.FormattingEnabled = true;
|
||||
comboM4.Items.AddRange(new object[] { Strings.PerformanceMode, Strings.OpenGHelper, Strings.Custom });
|
||||
comboM4.Location = new Point(93, 112);
|
||||
comboM4.Name = "comboM4";
|
||||
comboM4.Size = new Size(312, 40);
|
||||
comboM4.TabIndex = 3;
|
||||
//
|
||||
// labelM4
|
||||
//
|
||||
labelM4.AutoSize = true;
|
||||
labelM4.Location = new Point(25, 116);
|
||||
labelM4.Name = "labelM4";
|
||||
labelM4.Size = new Size(54, 32);
|
||||
labelM4.TabIndex = 2;
|
||||
labelM4.Text = "M4:";
|
||||
//
|
||||
// comboM3
|
||||
//
|
||||
comboM3.BorderColor = Color.White;
|
||||
comboM3.ButtonColor = Color.FromArgb(255, 255, 255);
|
||||
comboM3.FormattingEnabled = true;
|
||||
comboM3.Items.AddRange(new object[] { Strings.Default, Strings.VolumeMute, Strings.PlayPause, Strings.PrintScreen, Strings.ToggleAura, Strings.Custom });
|
||||
comboM3.Location = new Point(93, 54);
|
||||
comboM3.Name = "comboM3";
|
||||
comboM3.Size = new Size(312, 40);
|
||||
comboM3.TabIndex = 1;
|
||||
//
|
||||
// labelM3
|
||||
//
|
||||
labelM3.AutoSize = true;
|
||||
labelM3.Location = new Point(25, 58);
|
||||
labelM3.Name = "labelM3";
|
||||
labelM3.Size = new Size(54, 32);
|
||||
labelM3.TabIndex = 0;
|
||||
labelM3.Text = "M3:";
|
||||
//
|
||||
// groupLight
|
||||
//
|
||||
groupLight.Controls.Add(labelBrightness);
|
||||
groupLight.Controls.Add(trackBrightness);
|
||||
groupLight.Controls.Add(labelSpeed);
|
||||
groupLight.Controls.Add(comboKeyboardSpeed);
|
||||
groupLight.Controls.Add(checkShutdown);
|
||||
groupLight.Controls.Add(checkSleep);
|
||||
groupLight.Controls.Add(checkBoot);
|
||||
groupLight.Controls.Add(checkAwake);
|
||||
groupLight.Dock = DockStyle.Top;
|
||||
groupLight.Location = new Point(10, 252);
|
||||
groupLight.Name = "groupLight";
|
||||
groupLight.Size = new Size(844, 395);
|
||||
groupLight.TabIndex = 1;
|
||||
groupLight.TabStop = false;
|
||||
groupLight.Text = "Keyboard Backlight";
|
||||
//
|
||||
// labelBrightness
|
||||
//
|
||||
labelBrightness.Location = new Point(25, 304);
|
||||
labelBrightness.Name = "labelBrightness";
|
||||
labelBrightness.Size = new Size(197, 49);
|
||||
labelBrightness.TabIndex = 0;
|
||||
labelBrightness.Text = "Brightness";
|
||||
//
|
||||
// trackBrightness
|
||||
//
|
||||
trackBrightness.Location = new Point(228, 294);
|
||||
trackBrightness.Maximum = 3;
|
||||
trackBrightness.Name = "trackBrightness";
|
||||
trackBrightness.Size = new Size(600, 90);
|
||||
trackBrightness.TabIndex = 1;
|
||||
trackBrightness.TickStyle = TickStyle.TopLeft;
|
||||
//
|
||||
// labelSpeed
|
||||
//
|
||||
labelSpeed.AutoSize = true;
|
||||
labelSpeed.Location = new Point(25, 235);
|
||||
labelSpeed.MaximumSize = new Size(200, 0);
|
||||
labelSpeed.Name = "labelSpeed";
|
||||
labelSpeed.Size = new Size(198, 32);
|
||||
labelSpeed.TabIndex = 40;
|
||||
labelSpeed.Text = "Animation Speed";
|
||||
//
|
||||
// comboKeyboardSpeed
|
||||
//
|
||||
comboKeyboardSpeed.BorderColor = Color.White;
|
||||
comboKeyboardSpeed.ButtonColor = SystemColors.ControlLight;
|
||||
comboKeyboardSpeed.FlatStyle = FlatStyle.Flat;
|
||||
comboKeyboardSpeed.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
comboKeyboardSpeed.FormattingEnabled = true;
|
||||
comboKeyboardSpeed.ItemHeight = 32;
|
||||
comboKeyboardSpeed.Items.AddRange(new object[] { "Slow", "Normal", "Fast" });
|
||||
comboKeyboardSpeed.Location = new Point(230, 232);
|
||||
comboKeyboardSpeed.Margin = new Padding(4, 10, 4, 8);
|
||||
comboKeyboardSpeed.Name = "comboKeyboardSpeed";
|
||||
comboKeyboardSpeed.Size = new Size(291, 40);
|
||||
comboKeyboardSpeed.TabIndex = 39;
|
||||
comboKeyboardSpeed.TabStop = false;
|
||||
//
|
||||
// checkShutdown
|
||||
//
|
||||
checkShutdown.AutoSize = true;
|
||||
checkShutdown.Location = new Point(25, 185);
|
||||
checkShutdown.Name = "checkShutdown";
|
||||
checkShutdown.Size = new Size(154, 36);
|
||||
checkShutdown.TabIndex = 3;
|
||||
checkShutdown.Text = Strings.Shutdown;
|
||||
checkShutdown.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkSleep
|
||||
//
|
||||
checkSleep.AutoSize = true;
|
||||
checkSleep.Location = new Point(25, 143);
|
||||
checkSleep.Name = "checkSleep";
|
||||
checkSleep.Size = new Size(105, 36);
|
||||
checkSleep.TabIndex = 2;
|
||||
checkSleep.Text = Strings.Sleep;
|
||||
checkSleep.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBoot
|
||||
//
|
||||
checkBoot.AutoSize = true;
|
||||
checkBoot.Location = new Point(25, 101);
|
||||
checkBoot.Name = "checkBoot";
|
||||
checkBoot.Size = new Size(96, 36);
|
||||
checkBoot.TabIndex = 1;
|
||||
checkBoot.Text = Strings.Boot;
|
||||
checkBoot.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkAwake
|
||||
//
|
||||
checkAwake.AutoSize = true;
|
||||
checkAwake.Location = new Point(25, 59);
|
||||
checkAwake.Name = "checkAwake";
|
||||
checkAwake.Size = new Size(115, 36);
|
||||
checkAwake.TabIndex = 0;
|
||||
checkAwake.Text = Strings.Awake;
|
||||
checkAwake.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// groupOther
|
||||
//
|
||||
groupOther.Controls.Add(checkUSBC);
|
||||
groupOther.Controls.Add(checkNoOverdrive);
|
||||
groupOther.Controls.Add(checkKeyboardAuto);
|
||||
groupOther.Controls.Add(checkTopmost);
|
||||
groupOther.Dock = DockStyle.Top;
|
||||
groupOther.Location = new Point(10, 647);
|
||||
groupOther.Name = "groupOther";
|
||||
groupOther.Size = new Size(844, 293);
|
||||
groupOther.TabIndex = 2;
|
||||
groupOther.TabStop = false;
|
||||
groupOther.Text = "Other";
|
||||
//
|
||||
// checkUSBC
|
||||
//
|
||||
checkUSBC.AutoSize = true;
|
||||
checkUSBC.Location = new Point(25, 210);
|
||||
checkUSBC.Name = "checkUSBC";
|
||||
checkUSBC.Size = new Size(659, 36);
|
||||
checkUSBC.TabIndex = 4;
|
||||
checkUSBC.Text = "Keep GPU disabled on USB-C charger in Optimized mode";
|
||||
checkUSBC.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkNoOverdrive
|
||||
//
|
||||
checkNoOverdrive.AutoSize = true;
|
||||
checkNoOverdrive.Location = new Point(25, 156);
|
||||
checkNoOverdrive.Name = "checkNoOverdrive";
|
||||
checkNoOverdrive.Size = new Size(307, 36);
|
||||
checkNoOverdrive.TabIndex = 3;
|
||||
checkNoOverdrive.Text = Strings.DisableOverdrive;
|
||||
checkNoOverdrive.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkKeyboardAuto
|
||||
//
|
||||
checkKeyboardAuto.AutoSize = true;
|
||||
checkKeyboardAuto.Location = new Point(25, 51);
|
||||
checkKeyboardAuto.MaximumSize = new Size(780, 0);
|
||||
checkKeyboardAuto.Name = "checkKeyboardAuto";
|
||||
checkKeyboardAuto.Size = new Size(712, 36);
|
||||
checkKeyboardAuto.TabIndex = 2;
|
||||
checkKeyboardAuto.Text = Strings.KeyboardAuto;
|
||||
checkKeyboardAuto.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkTopmost
|
||||
//
|
||||
checkTopmost.AutoSize = true;
|
||||
checkTopmost.Location = new Point(25, 104);
|
||||
checkTopmost.Name = "checkTopmost";
|
||||
checkTopmost.Size = new Size(390, 36);
|
||||
checkTopmost.TabIndex = 1;
|
||||
checkTopmost.Text = Strings.WindowTop;
|
||||
checkTopmost.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// Extra
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(13F, 32F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(864, 953);
|
||||
Controls.Add(groupOther);
|
||||
Controls.Add(groupLight);
|
||||
Controls.Add(groupBindings);
|
||||
FormBorderStyle = FormBorderStyle.FixedSingle;
|
||||
MaximizeBox = false;
|
||||
MdiChildrenMinimizedAnchorBottom = false;
|
||||
MinimizeBox = false;
|
||||
Name = "Extra";
|
||||
Padding = new Padding(10);
|
||||
ShowIcon = false;
|
||||
ShowInTaskbar = false;
|
||||
Text = "Extra Settings";
|
||||
groupBindings.ResumeLayout(false);
|
||||
groupBindings.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureHelp).EndInit();
|
||||
groupLight.ResumeLayout(false);
|
||||
groupLight.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackBrightness).EndInit();
|
||||
groupOther.ResumeLayout(false);
|
||||
groupOther.PerformLayout();
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private GroupBox groupBindings;
|
||||
private Label labelM3;
|
||||
private RComboBox comboM3;
|
||||
private RComboBox comboM4;
|
||||
private Label labelM4;
|
||||
private TextBox textM4;
|
||||
private TextBox textM3;
|
||||
private TextBox textFNF4;
|
||||
private RComboBox comboFNF4;
|
||||
private Label labelFNF4;
|
||||
private GroupBox groupLight;
|
||||
private CheckBox checkSleep;
|
||||
private CheckBox checkBoot;
|
||||
private CheckBox checkAwake;
|
||||
private CheckBox checkShutdown;
|
||||
private Label labelSpeed;
|
||||
private RComboBox comboKeyboardSpeed;
|
||||
private GroupBox groupOther;
|
||||
private CheckBox checkTopmost;
|
||||
private CheckBox checkKeyboardAuto;
|
||||
private CheckBox checkNoOverdrive;
|
||||
private PictureBox pictureHelp;
|
||||
private TrackBar trackBrightness;
|
||||
private Label labelBrightness;
|
||||
private CheckBox checkUSBC;
|
||||
}
|
||||
}
|
||||
180
app/Extra.cs
Normal file
@@ -0,0 +1,180 @@
|
||||
using CustomControls;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
public partial class Extra : RForm
|
||||
{
|
||||
|
||||
Dictionary<string, string> customActions = new Dictionary<string, string>
|
||||
{
|
||||
{"","--------------" },
|
||||
{"mute", Properties.Strings.VolumeMute},
|
||||
{"screenshot", Properties.Strings.PrintScreen},
|
||||
{"play", Properties.Strings.PlayPause},
|
||||
{"aura", Properties.Strings.ToggleAura},
|
||||
{"ghelper", Properties.Strings.OpenGHelper},
|
||||
{"screen", Properties.Strings.ToggleScreen},
|
||||
{"miniled", Properties.Strings.ToggleMiniled},
|
||||
{"custom", Properties.Strings.Custom}
|
||||
};
|
||||
|
||||
private void SetKeyCombo(ComboBox combo, TextBox txbox, string name)
|
||||
{
|
||||
if (name == "m4")
|
||||
customActions[""] = Properties.Strings.PerformanceMode;
|
||||
|
||||
if (name == "fnf4")
|
||||
{
|
||||
customActions[""] = Properties.Strings.ToggleAura;
|
||||
customActions.Remove("aura");
|
||||
}
|
||||
|
||||
combo.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
combo.DataSource = new BindingSource(customActions, null);
|
||||
combo.DisplayMember = "Value";
|
||||
combo.ValueMember = "Key";
|
||||
|
||||
string action = Program.config.getConfigString(name);
|
||||
|
||||
combo.SelectedValue = (action is not null) ? action : "";
|
||||
if (combo.SelectedValue is null) combo.SelectedValue = "";
|
||||
|
||||
combo.SelectedValueChanged += delegate
|
||||
{
|
||||
if (combo.SelectedValue is not null)
|
||||
Program.config.setConfig(name, combo.SelectedValue.ToString());
|
||||
};
|
||||
|
||||
txbox.Text = Program.config.getConfigString(name + "_custom");
|
||||
txbox.TextChanged += delegate
|
||||
{
|
||||
Program.config.setConfig(name + "_custom", txbox.Text);
|
||||
};
|
||||
}
|
||||
|
||||
public Extra()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
groupBindings.Text = Properties.Strings.KeyBindings;
|
||||
groupLight.Text = Properties.Strings.KeyboardBacklight;
|
||||
groupOther.Text = Properties.Strings.Other;
|
||||
|
||||
checkAwake.Text = Properties.Strings.Awake;
|
||||
checkSleep.Text = Properties.Strings.Sleep;
|
||||
checkBoot.Text = Properties.Strings.Boot;
|
||||
checkShutdown.Text = Properties.Strings.Shutdown;
|
||||
|
||||
labelSpeed.Text = Properties.Strings.AnimationSpeed;
|
||||
labelBrightness.Text = Properties.Strings.Brightness;
|
||||
|
||||
checkKeyboardAuto.Text = Properties.Strings.KeyboardAuto;
|
||||
checkNoOverdrive.Text = Properties.Strings.DisableOverdrive;
|
||||
checkTopmost.Text = Properties.Strings.WindowTop;
|
||||
checkUSBC.Text = Properties.Strings.OptimizedUSBC;
|
||||
|
||||
Text = Properties.Strings.ExtraSettings;
|
||||
|
||||
InitTheme();
|
||||
|
||||
SetKeyCombo(comboM3, textM3, "m3");
|
||||
SetKeyCombo(comboM4, textM4, "m4");
|
||||
SetKeyCombo(comboFNF4, textFNF4, "fnf4");
|
||||
|
||||
Shown += Keyboard_Shown;
|
||||
|
||||
comboKeyboardSpeed.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
comboKeyboardSpeed.DataSource = new BindingSource(Aura.GetSpeeds(), null);
|
||||
comboKeyboardSpeed.DisplayMember = "Value";
|
||||
comboKeyboardSpeed.ValueMember = "Key";
|
||||
comboKeyboardSpeed.SelectedValue = Aura.Speed;
|
||||
comboKeyboardSpeed.SelectedValueChanged += ComboKeyboardSpeed_SelectedValueChanged;
|
||||
|
||||
checkAwake.Checked = !(Program.config.getConfig("keyboard_awake") == 0);
|
||||
checkBoot.Checked = !(Program.config.getConfig("keyboard_boot") == 0);
|
||||
checkSleep.Checked = !(Program.config.getConfig("keyboard_sleep") == 0);
|
||||
checkShutdown.Checked = !(Program.config.getConfig("keyboard_shutdown") == 0);
|
||||
|
||||
checkAwake.CheckedChanged += CheckPower_CheckedChanged;
|
||||
checkBoot.CheckedChanged += CheckPower_CheckedChanged;
|
||||
checkSleep.CheckedChanged += CheckPower_CheckedChanged;
|
||||
checkShutdown.CheckedChanged += CheckPower_CheckedChanged;
|
||||
|
||||
checkTopmost.Checked = (Program.config.getConfig("topmost") == 1);
|
||||
checkTopmost.CheckedChanged += CheckTopmost_CheckedChanged; ;
|
||||
|
||||
checkKeyboardAuto.Checked = (Program.config.getConfig("keyboard_auto") == 1);
|
||||
checkKeyboardAuto.CheckedChanged += CheckKeyboardAuto_CheckedChanged;
|
||||
|
||||
checkNoOverdrive.Checked = (Program.config.getConfig("no_overdrive") == 1);
|
||||
checkNoOverdrive.CheckedChanged += CheckNoOverdrive_CheckedChanged;
|
||||
|
||||
checkUSBC.Checked = (Program.config.getConfig("optimized_usbc") == 1);
|
||||
checkUSBC.CheckedChanged += CheckUSBC_CheckedChanged;
|
||||
|
||||
int kb_brightness = Program.config.getConfig("keyboard_brightness");
|
||||
trackBrightness.Value = (kb_brightness >= 0 && kb_brightness <= 3) ? kb_brightness : 3;
|
||||
|
||||
pictureHelp.Click += PictureHelp_Click;
|
||||
trackBrightness.Scroll += TrackBrightness_Scroll;
|
||||
|
||||
}
|
||||
|
||||
private void CheckUSBC_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("optimized_usbc", (checkUSBC.Checked ? 1 : 0));
|
||||
}
|
||||
|
||||
private void TrackBrightness_Scroll(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("keyboard_brightness", trackBrightness.Value);
|
||||
Aura.ApplyBrightness(trackBrightness.Value);
|
||||
}
|
||||
|
||||
private void PictureHelp_Click(object? sender, EventArgs e)
|
||||
{
|
||||
Process.Start(new ProcessStartInfo("https://github.com/seerge/g-helper#custom-hotkey-actions") { UseShellExecute = true });
|
||||
}
|
||||
|
||||
private void CheckNoOverdrive_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("no_overdrive", (checkNoOverdrive.Checked ? 1 : 0));
|
||||
Program.settingsForm.AutoScreen(true);
|
||||
}
|
||||
|
||||
private void CheckKeyboardAuto_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("keyboard_auto", (checkKeyboardAuto.Checked ? 1 : 0));
|
||||
}
|
||||
|
||||
private void CheckTopmost_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("topmost", (checkTopmost.Checked ? 1 : 0));
|
||||
Program.settingsForm.TopMost = checkTopmost.Checked;
|
||||
}
|
||||
|
||||
private void CheckPower_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("keyboard_awake", (checkAwake.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_boot", (checkBoot.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_sleep", (checkSleep.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_shutdown", (checkShutdown.Checked ? 1 : 0));
|
||||
|
||||
Aura.ApplyAuraPower(checkAwake.Checked, checkBoot.Checked, checkSleep.Checked, checkShutdown.Checked);
|
||||
}
|
||||
|
||||
private void ComboKeyboardSpeed_SelectedValueChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("aura_speed", (int)comboKeyboardSpeed.SelectedValue);
|
||||
Program.settingsForm.SetAura();
|
||||
}
|
||||
|
||||
|
||||
private void Keyboard_Shown(object? sender, EventArgs e)
|
||||
{
|
||||
Top = Program.settingsForm.Top;
|
||||
Left = Program.settingsForm.Left - Width - 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
663
app/Fans.Designer.cs
generated
Normal file
@@ -0,0 +1,663 @@
|
||||
using CustomControls;
|
||||
using System.Windows.Forms.DataVisualization.Charting;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
partial class Fans
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
ChartArea chartArea1 = new ChartArea();
|
||||
Title title1 = new Title();
|
||||
ChartArea chartArea2 = new ChartArea();
|
||||
Title title2 = new Title();
|
||||
ChartArea chartArea3 = new ChartArea();
|
||||
Title title3 = new Title();
|
||||
panelFans = new Panel();
|
||||
labelFansResult = new Label();
|
||||
labelTip = new Label();
|
||||
labelBoost = new Label();
|
||||
comboBoost = new RComboBox();
|
||||
picturePerf = new PictureBox();
|
||||
tableFanCharts = new TableLayoutPanel();
|
||||
chartGPU = new Chart();
|
||||
chartCPU = new Chart();
|
||||
chartMid = new Chart();
|
||||
labelFans = new Label();
|
||||
checkApplyFans = new RCheckBox();
|
||||
buttonReset = new RButton();
|
||||
panelPower = new Panel();
|
||||
pictureBox1 = new PictureBox();
|
||||
labelPowerLimits = new Label();
|
||||
checkApplyPower = new RCheckBox();
|
||||
panelCPU = new Panel();
|
||||
labelCPU = new Label();
|
||||
label2 = new Label();
|
||||
trackCPU = new TrackBar();
|
||||
panelTotal = new Panel();
|
||||
labelTotal = new Label();
|
||||
label1 = new Label();
|
||||
trackTotal = new TrackBar();
|
||||
pictureFine = new PictureBox();
|
||||
labelInfo = new Label();
|
||||
panelGPU = new Panel();
|
||||
buttonResetGPU = new RButton();
|
||||
labelGPUMemory = new Label();
|
||||
trackGPUMemory = new TrackBar();
|
||||
labelGPUMemoryTitle = new Label();
|
||||
pictureBox2 = new PictureBox();
|
||||
labelGPUCore = new Label();
|
||||
labelGPU = new Label();
|
||||
trackGPUCore = new TrackBar();
|
||||
labelGPUCoreTitle = new Label();
|
||||
panelFans.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)picturePerf).BeginInit();
|
||||
tableFanCharts.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartCPU).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartMid).BeginInit();
|
||||
panelPower.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
|
||||
panelCPU.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackCPU).BeginInit();
|
||||
panelTotal.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackTotal).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)pictureFine).BeginInit();
|
||||
panelGPU.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackGPUMemory).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox2).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)trackGPUCore).BeginInit();
|
||||
SuspendLayout();
|
||||
//
|
||||
// panelFans
|
||||
//
|
||||
panelFans.Controls.Add(labelFansResult);
|
||||
panelFans.Controls.Add(labelTip);
|
||||
panelFans.Controls.Add(labelBoost);
|
||||
panelFans.Controls.Add(comboBoost);
|
||||
panelFans.Controls.Add(picturePerf);
|
||||
panelFans.Controls.Add(tableFanCharts);
|
||||
panelFans.Controls.Add(labelFans);
|
||||
panelFans.Controls.Add(checkApplyFans);
|
||||
panelFans.Controls.Add(buttonReset);
|
||||
panelFans.Dock = DockStyle.Left;
|
||||
panelFans.Location = new Point(711, 0);
|
||||
panelFans.Margin = new Padding(0);
|
||||
panelFans.Name = "panelFans";
|
||||
panelFans.Padding = new Padding(10);
|
||||
panelFans.Size = new Size(824, 1189);
|
||||
panelFans.TabIndex = 12;
|
||||
//
|
||||
// labelFansResult
|
||||
//
|
||||
labelFansResult.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelFansResult.ForeColor = Color.Red;
|
||||
labelFansResult.Location = new Point(30, 1073);
|
||||
labelFansResult.Name = "labelFansResult";
|
||||
labelFansResult.Size = new Size(760, 32);
|
||||
labelFansResult.TabIndex = 41;
|
||||
labelFansResult.TextAlign = ContentAlignment.TopRight;
|
||||
labelFansResult.Visible = false;
|
||||
//
|
||||
// labelTip
|
||||
//
|
||||
labelTip.AutoSize = true;
|
||||
labelTip.BackColor = SystemColors.ControlLightLight;
|
||||
labelTip.Location = new Point(155, 9);
|
||||
labelTip.Name = "labelTip";
|
||||
labelTip.Padding = new Padding(5);
|
||||
labelTip.Size = new Size(107, 42);
|
||||
labelTip.TabIndex = 40;
|
||||
labelTip.Text = "500,300";
|
||||
//
|
||||
// labelBoost
|
||||
//
|
||||
labelBoost.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelBoost.AutoSize = true;
|
||||
labelBoost.Location = new Point(375, 17);
|
||||
labelBoost.Name = "labelBoost";
|
||||
labelBoost.Size = new Size(125, 32);
|
||||
labelBoost.TabIndex = 39;
|
||||
labelBoost.Text = Properties.Strings.CPUBoost;
|
||||
labelBoost.TextAlign = ContentAlignment.MiddleRight;
|
||||
//
|
||||
// comboBoost
|
||||
//
|
||||
comboBoost.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
comboBoost.BorderColor = Color.White;
|
||||
comboBoost.ButtonColor = Color.FromArgb(255, 255, 255);
|
||||
comboBoost.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
comboBoost.FormattingEnabled = true;
|
||||
comboBoost.Items.AddRange(new object[] { "Disabled", "Enabled", "Aggressive", "Efficient Enabled", "Efficient Aggressive" });
|
||||
comboBoost.Location = new Point(526, 15);
|
||||
comboBoost.Name = "comboBoost";
|
||||
comboBoost.Size = new Size(266, 40);
|
||||
comboBoost.TabIndex = 38;
|
||||
//
|
||||
// picturePerf
|
||||
//
|
||||
picturePerf.BackgroundImage = Properties.Resources.icons8_fan_head_96;
|
||||
picturePerf.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
picturePerf.InitialImage = null;
|
||||
picturePerf.Location = new Point(30, 18);
|
||||
picturePerf.Margin = new Padding(4, 2, 4, 2);
|
||||
picturePerf.Name = "picturePerf";
|
||||
picturePerf.Size = new Size(36, 38);
|
||||
picturePerf.TabIndex = 37;
|
||||
picturePerf.TabStop = false;
|
||||
//
|
||||
// tableFanCharts
|
||||
//
|
||||
tableFanCharts.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||
tableFanCharts.ColumnCount = 1;
|
||||
tableFanCharts.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
|
||||
tableFanCharts.Controls.Add(chartGPU, 0, 1);
|
||||
tableFanCharts.Controls.Add(chartCPU, 0, 0);
|
||||
tableFanCharts.Controls.Add(chartMid, 0, 2);
|
||||
tableFanCharts.Location = new Point(28, 64);
|
||||
tableFanCharts.Margin = new Padding(4);
|
||||
tableFanCharts.Name = "tableFanCharts";
|
||||
tableFanCharts.RowCount = 2;
|
||||
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 33F));
|
||||
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 33F));
|
||||
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 33F));
|
||||
tableFanCharts.Size = new Size(764, 1022);
|
||||
tableFanCharts.TabIndex = 36;
|
||||
//
|
||||
// chartGPU
|
||||
//
|
||||
chartArea1.Name = "ChartArea1";
|
||||
chartGPU.ChartAreas.Add(chartArea1);
|
||||
chartGPU.Dock = DockStyle.Fill;
|
||||
chartGPU.Location = new Point(2, 350);
|
||||
chartGPU.Margin = new Padding(2, 10, 2, 10);
|
||||
chartGPU.Name = "chartGPU";
|
||||
chartGPU.Size = new Size(760, 320);
|
||||
chartGPU.TabIndex = 17;
|
||||
chartGPU.Text = "chartGPU";
|
||||
title1.Name = "Title1";
|
||||
chartGPU.Titles.Add(title1);
|
||||
//
|
||||
// chartCPU
|
||||
//
|
||||
chartArea2.Name = "ChartArea1";
|
||||
chartCPU.ChartAreas.Add(chartArea2);
|
||||
chartCPU.Dock = DockStyle.Fill;
|
||||
chartCPU.Location = new Point(2, 10);
|
||||
chartCPU.Margin = new Padding(2, 10, 2, 10);
|
||||
chartCPU.Name = "chartCPU";
|
||||
chartCPU.Size = new Size(760, 320);
|
||||
chartCPU.TabIndex = 14;
|
||||
chartCPU.Text = "chartCPU";
|
||||
title2.Name = "Title1";
|
||||
chartCPU.Titles.Add(title2);
|
||||
//
|
||||
// chartMid
|
||||
//
|
||||
chartArea3.Name = "ChartArea3";
|
||||
chartMid.ChartAreas.Add(chartArea3);
|
||||
chartMid.Dock = DockStyle.Fill;
|
||||
chartMid.Location = new Point(2, 690);
|
||||
chartMid.Margin = new Padding(2, 10, 2, 10);
|
||||
chartMid.Name = "chartMid";
|
||||
chartMid.Size = new Size(760, 322);
|
||||
chartMid.TabIndex = 14;
|
||||
chartMid.Text = "chartMid";
|
||||
title3.Name = "Title3";
|
||||
chartMid.Titles.Add(title3);
|
||||
chartMid.Visible = false;
|
||||
//
|
||||
// labelFans
|
||||
//
|
||||
labelFans.AutoSize = true;
|
||||
labelFans.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelFans.Location = new Point(66, 20);
|
||||
labelFans.Margin = new Padding(4, 0, 4, 0);
|
||||
labelFans.Name = "labelFans";
|
||||
labelFans.Size = new Size(138, 32);
|
||||
labelFans.TabIndex = 28;
|
||||
labelFans.Text = "Fan Curves";
|
||||
//
|
||||
// checkApplyFans
|
||||
//
|
||||
checkApplyFans.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
checkApplyFans.AutoSize = true;
|
||||
checkApplyFans.BackColor = SystemColors.ControlLight;
|
||||
checkApplyFans.Location = new Point(449, 1118);
|
||||
checkApplyFans.Margin = new Padding(4, 2, 4, 2);
|
||||
checkApplyFans.Name = "checkApplyFans";
|
||||
checkApplyFans.Padding = new Padding(15, 5, 15, 5);
|
||||
checkApplyFans.Size = new Size(339, 46);
|
||||
checkApplyFans.TabIndex = 17;
|
||||
checkApplyFans.Text = Properties.Strings.ApplyFanCurve;
|
||||
checkApplyFans.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// buttonReset
|
||||
//
|
||||
buttonReset.Activated = false;
|
||||
buttonReset.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
|
||||
buttonReset.BackColor = SystemColors.ControlLight;
|
||||
buttonReset.BorderColor = Color.Transparent;
|
||||
buttonReset.BorderRadius = 2;
|
||||
buttonReset.FlatStyle = FlatStyle.Flat;
|
||||
buttonReset.Location = new Point(30, 1112);
|
||||
buttonReset.Margin = new Padding(4, 2, 4, 2);
|
||||
buttonReset.Name = "buttonReset";
|
||||
buttonReset.Secondary = true;
|
||||
buttonReset.Size = new Size(232, 54);
|
||||
buttonReset.TabIndex = 15;
|
||||
buttonReset.Text = Properties.Strings.FactoryDefaults;
|
||||
buttonReset.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// panelPower
|
||||
//
|
||||
panelPower.Controls.Add(pictureBox1);
|
||||
panelPower.Controls.Add(labelPowerLimits);
|
||||
panelPower.Controls.Add(checkApplyPower);
|
||||
panelPower.Controls.Add(panelCPU);
|
||||
panelPower.Controls.Add(panelTotal);
|
||||
panelPower.Controls.Add(pictureFine);
|
||||
panelPower.Controls.Add(labelInfo);
|
||||
panelPower.Dock = DockStyle.Left;
|
||||
panelPower.Location = new Point(347, 0);
|
||||
panelPower.Margin = new Padding(10);
|
||||
panelPower.Name = "panelPower";
|
||||
panelPower.Padding = new Padding(10);
|
||||
panelPower.Size = new Size(364, 1189);
|
||||
panelPower.TabIndex = 13;
|
||||
//
|
||||
// pictureBox1
|
||||
//
|
||||
pictureBox1.BackgroundImage = Properties.Resources.icons8_processor_96;
|
||||
pictureBox1.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
pictureBox1.InitialImage = null;
|
||||
pictureBox1.Location = new Point(20, 18);
|
||||
pictureBox1.Margin = new Padding(4, 2, 4, 2);
|
||||
pictureBox1.Name = "pictureBox1";
|
||||
pictureBox1.Size = new Size(36, 38);
|
||||
pictureBox1.TabIndex = 38;
|
||||
pictureBox1.TabStop = false;
|
||||
//
|
||||
// labelPowerLimits
|
||||
//
|
||||
labelPowerLimits.AutoSize = true;
|
||||
labelPowerLimits.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelPowerLimits.Location = new Point(54, 20);
|
||||
labelPowerLimits.Margin = new Padding(4, 0, 4, 0);
|
||||
labelPowerLimits.Name = "labelPowerLimits";
|
||||
labelPowerLimits.Size = new Size(229, 32);
|
||||
labelPowerLimits.TabIndex = 26;
|
||||
labelPowerLimits.Text = Properties.Strings.PowerLimits;
|
||||
//
|
||||
// checkApplyPower
|
||||
//
|
||||
checkApplyPower.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
|
||||
checkApplyPower.AutoSize = true;
|
||||
checkApplyPower.BackColor = SystemColors.ControlLight;
|
||||
checkApplyPower.Location = new Point(20, 1118);
|
||||
checkApplyPower.Margin = new Padding(4, 2, 4, 2);
|
||||
checkApplyPower.Name = "checkApplyPower";
|
||||
checkApplyPower.Padding = new Padding(15, 5, 15, 5);
|
||||
checkApplyPower.Size = new Size(277, 46);
|
||||
checkApplyPower.TabIndex = 25;
|
||||
checkApplyPower.Text = Properties.Strings.ApplyPowerLimits;
|
||||
checkApplyPower.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// panelCPU
|
||||
//
|
||||
panelCPU.Controls.Add(labelCPU);
|
||||
panelCPU.Controls.Add(label2);
|
||||
panelCPU.Controls.Add(trackCPU);
|
||||
panelCPU.Location = new Point(184, 72);
|
||||
panelCPU.Margin = new Padding(4);
|
||||
panelCPU.Name = "panelCPU";
|
||||
panelCPU.Size = new Size(160, 510);
|
||||
panelCPU.TabIndex = 23;
|
||||
//
|
||||
// labelCPU
|
||||
//
|
||||
labelCPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelCPU.Location = new Point(13, 40);
|
||||
labelCPU.Margin = new Padding(4, 0, 4, 0);
|
||||
labelCPU.Name = "labelCPU";
|
||||
labelCPU.Size = new Size(120, 32);
|
||||
labelCPU.TabIndex = 13;
|
||||
labelCPU.Text = "CPU";
|
||||
labelCPU.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.AutoSize = true;
|
||||
label2.Location = new Point(44, 8);
|
||||
label2.Margin = new Padding(4, 0, 4, 0);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(58, 32);
|
||||
label2.TabIndex = 12;
|
||||
label2.Text = "CPU";
|
||||
label2.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// trackCPU
|
||||
//
|
||||
trackCPU.Location = new Point(48, 88);
|
||||
trackCPU.Margin = new Padding(4, 2, 4, 2);
|
||||
trackCPU.Maximum = 85;
|
||||
trackCPU.Minimum = 5;
|
||||
trackCPU.Name = "trackCPU";
|
||||
trackCPU.Orientation = Orientation.Vertical;
|
||||
trackCPU.Size = new Size(90, 416);
|
||||
trackCPU.TabIndex = 11;
|
||||
trackCPU.TickFrequency = 5;
|
||||
trackCPU.Value = 80;
|
||||
//
|
||||
// panelTotal
|
||||
//
|
||||
panelTotal.Controls.Add(labelTotal);
|
||||
panelTotal.Controls.Add(label1);
|
||||
panelTotal.Controls.Add(trackTotal);
|
||||
panelTotal.Location = new Point(16, 72);
|
||||
panelTotal.Margin = new Padding(4);
|
||||
panelTotal.Name = "panelTotal";
|
||||
panelTotal.Size = new Size(160, 512);
|
||||
panelTotal.TabIndex = 22;
|
||||
//
|
||||
// labelTotal
|
||||
//
|
||||
labelTotal.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelTotal.Location = new Point(16, 40);
|
||||
labelTotal.Margin = new Padding(4, 0, 4, 0);
|
||||
labelTotal.Name = "labelTotal";
|
||||
labelTotal.Size = new Size(122, 32);
|
||||
labelTotal.TabIndex = 12;
|
||||
labelTotal.Text = "Platform";
|
||||
labelTotal.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.AutoSize = true;
|
||||
label1.Location = new Point(26, 8);
|
||||
label1.Margin = new Padding(4, 0, 4, 0);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(104, 32);
|
||||
label1.TabIndex = 11;
|
||||
label1.Text = "Platform";
|
||||
label1.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// trackTotal
|
||||
//
|
||||
trackTotal.Location = new Point(44, 88);
|
||||
trackTotal.Margin = new Padding(4, 2, 4, 2);
|
||||
trackTotal.Maximum = 180;
|
||||
trackTotal.Minimum = 10;
|
||||
trackTotal.Name = "trackTotal";
|
||||
trackTotal.Orientation = Orientation.Vertical;
|
||||
trackTotal.Size = new Size(90, 416);
|
||||
trackTotal.TabIndex = 10;
|
||||
trackTotal.TickFrequency = 5;
|
||||
trackTotal.TickStyle = TickStyle.TopLeft;
|
||||
trackTotal.Value = 125;
|
||||
//
|
||||
// pictureFine
|
||||
//
|
||||
pictureFine.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
pictureFine.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
pictureFine.Image = Properties.Resources.everything_is_fine_itsfine;
|
||||
pictureFine.Location = new Point(20, 682);
|
||||
pictureFine.Margin = new Padding(4, 2, 4, 2);
|
||||
pictureFine.Name = "pictureFine";
|
||||
pictureFine.Size = new Size(324, 268);
|
||||
pictureFine.SizeMode = PictureBoxSizeMode.Zoom;
|
||||
pictureFine.TabIndex = 20;
|
||||
pictureFine.TabStop = false;
|
||||
pictureFine.Visible = false;
|
||||
//
|
||||
// labelInfo
|
||||
//
|
||||
labelInfo.Location = new Point(24, 618);
|
||||
labelInfo.Margin = new Padding(4, 0, 4, 0);
|
||||
labelInfo.Name = "labelInfo";
|
||||
labelInfo.Size = new Size(320, 330);
|
||||
labelInfo.TabIndex = 19;
|
||||
labelInfo.Text = "label";
|
||||
//
|
||||
// panelGPU
|
||||
//
|
||||
panelGPU.Controls.Add(buttonResetGPU);
|
||||
panelGPU.Controls.Add(labelGPUMemory);
|
||||
panelGPU.Controls.Add(trackGPUMemory);
|
||||
panelGPU.Controls.Add(labelGPUMemoryTitle);
|
||||
panelGPU.Controls.Add(pictureBox2);
|
||||
panelGPU.Controls.Add(labelGPUCore);
|
||||
panelGPU.Controls.Add(labelGPU);
|
||||
panelGPU.Controls.Add(trackGPUCore);
|
||||
panelGPU.Controls.Add(labelGPUCoreTitle);
|
||||
panelGPU.Dock = DockStyle.Left;
|
||||
panelGPU.Location = new Point(0, 0);
|
||||
panelGPU.Name = "panelGPU";
|
||||
panelGPU.Size = new Size(347, 1189);
|
||||
panelGPU.TabIndex = 14;
|
||||
//
|
||||
// buttonResetGPU
|
||||
//
|
||||
buttonResetGPU.Activated = false;
|
||||
buttonResetGPU.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
|
||||
buttonResetGPU.BackColor = SystemColors.ControlLight;
|
||||
buttonResetGPU.BorderColor = Color.Transparent;
|
||||
buttonResetGPU.BorderRadius = 2;
|
||||
buttonResetGPU.FlatStyle = FlatStyle.Flat;
|
||||
buttonResetGPU.Location = new Point(48, 1110);
|
||||
buttonResetGPU.Margin = new Padding(4, 2, 4, 2);
|
||||
buttonResetGPU.Name = "buttonResetGPU";
|
||||
buttonResetGPU.Secondary = true;
|
||||
buttonResetGPU.Size = new Size(232, 54);
|
||||
buttonResetGPU.TabIndex = 43;
|
||||
buttonResetGPU.Text = "Reset Clocks";
|
||||
buttonResetGPU.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// labelGPUMemory
|
||||
//
|
||||
labelGPUMemory.AutoSize = true;
|
||||
labelGPUMemory.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelGPUMemory.Location = new Point(184, 112);
|
||||
labelGPUMemory.Name = "labelGPUMemory";
|
||||
labelGPUMemory.Size = new Size(130, 32);
|
||||
labelGPUMemory.TabIndex = 42;
|
||||
labelGPUMemory.Text = "2000 MHz";
|
||||
labelGPUMemory.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// trackGPUMemory
|
||||
//
|
||||
trackGPUMemory.LargeChange = 100;
|
||||
trackGPUMemory.Location = new Point(216, 160);
|
||||
trackGPUMemory.Margin = new Padding(4, 2, 4, 2);
|
||||
trackGPUMemory.Maximum = 300;
|
||||
trackGPUMemory.Minimum = 0;
|
||||
trackGPUMemory.Name = "trackGPUMemory";
|
||||
trackGPUMemory.Orientation = Orientation.Vertical;
|
||||
trackGPUMemory.Size = new Size(90, 454);
|
||||
trackGPUMemory.SmallChange = 10;
|
||||
trackGPUMemory.TabIndex = 41;
|
||||
trackGPUMemory.TickFrequency = 50;
|
||||
trackGPUMemory.Value = 0;
|
||||
//
|
||||
// labelGPUMemoryTitle
|
||||
//
|
||||
labelGPUMemoryTitle.AutoSize = true;
|
||||
labelGPUMemoryTitle.Location = new Point(167, 72);
|
||||
labelGPUMemoryTitle.Name = "labelGPUMemoryTitle";
|
||||
labelGPUMemoryTitle.Size = new Size(169, 32);
|
||||
labelGPUMemoryTitle.TabIndex = 40;
|
||||
labelGPUMemoryTitle.Text = "Memory Clock";
|
||||
labelGPUMemoryTitle.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// pictureBox2
|
||||
//
|
||||
pictureBox2.BackgroundImage = Properties.Resources.icons8_video_card_48;
|
||||
pictureBox2.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
pictureBox2.ErrorImage = null;
|
||||
pictureBox2.InitialImage = null;
|
||||
pictureBox2.Location = new Point(25, 17);
|
||||
pictureBox2.Margin = new Padding(4, 2, 4, 2);
|
||||
pictureBox2.Name = "pictureBox2";
|
||||
pictureBox2.Size = new Size(36, 38);
|
||||
pictureBox2.TabIndex = 39;
|
||||
pictureBox2.TabStop = false;
|
||||
//
|
||||
// labelGPUCore
|
||||
//
|
||||
labelGPUCore.AutoSize = true;
|
||||
labelGPUCore.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelGPUCore.Location = new Point(20, 112);
|
||||
labelGPUCore.Name = "labelGPUCore";
|
||||
labelGPUCore.Size = new Size(130, 32);
|
||||
labelGPUCore.TabIndex = 28;
|
||||
labelGPUCore.Text = "1500 MHz";
|
||||
labelGPUCore.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// labelGPU
|
||||
//
|
||||
labelGPU.AutoSize = true;
|
||||
labelGPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelGPU.Location = new Point(60, 19);
|
||||
labelGPU.Margin = new Padding(4, 0, 4, 0);
|
||||
labelGPU.Name = "labelGPU";
|
||||
labelGPU.Size = new Size(162, 32);
|
||||
labelGPU.TabIndex = 27;
|
||||
labelGPU.Text = "GPU Settings";
|
||||
//
|
||||
// trackGPUCore
|
||||
//
|
||||
trackGPUCore.LargeChange = 100;
|
||||
trackGPUCore.Location = new Point(48, 160);
|
||||
trackGPUCore.Margin = new Padding(4, 2, 4, 2);
|
||||
trackGPUCore.Maximum = 300;
|
||||
trackGPUCore.Minimum = 0;
|
||||
trackGPUCore.Name = "trackGPUCore";
|
||||
trackGPUCore.Orientation = Orientation.Vertical;
|
||||
trackGPUCore.RightToLeft = RightToLeft.No;
|
||||
trackGPUCore.Size = new Size(90, 454);
|
||||
trackGPUCore.SmallChange = 10;
|
||||
trackGPUCore.TabIndex = 17;
|
||||
trackGPUCore.TickFrequency = 50;
|
||||
trackGPUCore.TickStyle = TickStyle.TopLeft;
|
||||
trackGPUCore.Value = 0;
|
||||
//
|
||||
// labelGPUCoreTitle
|
||||
//
|
||||
labelGPUCoreTitle.AutoSize = true;
|
||||
labelGPUCoreTitle.Location = new Point(22, 72);
|
||||
labelGPUCoreTitle.Name = "labelGPUCoreTitle";
|
||||
labelGPUCoreTitle.Size = new Size(129, 32);
|
||||
labelGPUCoreTitle.TabIndex = 16;
|
||||
labelFansResult.Visible = false;
|
||||
labelGPUCoreTitle.TextAlign = ContentAlignment.MiddleCenter;
|
||||
labelGPUCoreTitle.Text = "Core Clock";
|
||||
//
|
||||
// Fans
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(192F, 192F);
|
||||
AutoScaleMode = AutoScaleMode.Dpi;
|
||||
AutoSize = true;
|
||||
AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
ClientSize = new Size(1542, 1189);
|
||||
Controls.Add(panelGPU);
|
||||
Controls.Add(panelFans);
|
||||
Controls.Add(panelPower);
|
||||
Margin = new Padding(4, 2, 4, 2);
|
||||
MaximizeBox = false;
|
||||
MdiChildrenMinimizedAnchorBottom = false;
|
||||
MinimizeBox = false;
|
||||
MinimumSize = new Size(26, 1260);
|
||||
Name = "Fans";
|
||||
ShowIcon = false;
|
||||
ShowInTaskbar = false;
|
||||
StartPosition = FormStartPosition.CenterScreen;
|
||||
Text = Properties.Strings.FansAndPower;
|
||||
panelFans.ResumeLayout(false);
|
||||
panelFans.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)picturePerf).EndInit();
|
||||
tableFanCharts.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)chartGPU).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartCPU).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartMid).EndInit();
|
||||
panelPower.ResumeLayout(false);
|
||||
panelPower.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
|
||||
panelCPU.ResumeLayout(false);
|
||||
panelCPU.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackCPU).EndInit();
|
||||
panelTotal.ResumeLayout(false);
|
||||
panelTotal.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackTotal).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)pictureFine).EndInit();
|
||||
panelGPU.ResumeLayout(false);
|
||||
panelGPU.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackGPUMemory).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox2).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)trackGPUCore).EndInit();
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
private Panel panelFans;
|
||||
private RCheckBox checkApplyFans;
|
||||
private RButton buttonReset;
|
||||
private Panel panelPower;
|
||||
private RCheckBox checkApplyPower;
|
||||
private Panel panelCPU;
|
||||
private Label labelCPU;
|
||||
private Label label2;
|
||||
private TrackBar trackCPU;
|
||||
private Panel panelTotal;
|
||||
private Label labelTotal;
|
||||
private Label label1;
|
||||
private TrackBar trackTotal;
|
||||
private PictureBox pictureFine;
|
||||
private Label labelInfo;
|
||||
private Label labelPowerLimits;
|
||||
private TableLayoutPanel tableFanCharts;
|
||||
private System.Windows.Forms.DataVisualization.Charting.Chart chartGPU;
|
||||
private System.Windows.Forms.DataVisualization.Charting.Chart chartCPU;
|
||||
private System.Windows.Forms.DataVisualization.Charting.Chart chartMid;
|
||||
private Label labelFans;
|
||||
private PictureBox picturePerf;
|
||||
private PictureBox pictureBox1;
|
||||
private RComboBox comboBoost;
|
||||
private Label labelBoost;
|
||||
private Label labelTip;
|
||||
private Label labelFansResult;
|
||||
private Panel panelGPU;
|
||||
private Label labelGPUCore;
|
||||
private Label labelGPU;
|
||||
private TrackBar trackGPUCore;
|
||||
private Label labelGPUCoreTitle;
|
||||
private PictureBox pictureBox2;
|
||||
private Label labelGPUMemory;
|
||||
private TrackBar trackGPUMemory;
|
||||
private Label labelGPUMemoryTitle;
|
||||
private RButton buttonResetGPU;
|
||||
}
|
||||
}
|
||||
603
app/Fans.cs
Normal file
@@ -0,0 +1,603 @@
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms.DataVisualization.Charting;
|
||||
using CustomControls;
|
||||
using GHelper.Gpu;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
public partial class Fans : RForm
|
||||
{
|
||||
|
||||
DataPoint curPoint = null;
|
||||
Series seriesCPU;
|
||||
Series seriesGPU;
|
||||
Series seriesMid;
|
||||
|
||||
static int MinRPM, MaxRPM;
|
||||
public Fans()
|
||||
{
|
||||
|
||||
InitializeComponent();
|
||||
InitTheme();
|
||||
|
||||
MinRPM = 18;
|
||||
MaxRPM = HardwareMonitor.GetFanMax();
|
||||
|
||||
|
||||
|
||||
labelTip.Visible = false;
|
||||
labelTip.BackColor = Color.Transparent;
|
||||
|
||||
FormClosing += Fans_FormClosing;
|
||||
|
||||
seriesCPU = chartCPU.Series.Add("CPU");
|
||||
seriesGPU = chartGPU.Series.Add("GPU");
|
||||
seriesMid = chartMid.Series.Add("Mid");
|
||||
|
||||
seriesCPU.Color = colorStandard;
|
||||
seriesGPU.Color = colorTurbo;
|
||||
seriesMid.Color = colorEco;
|
||||
|
||||
chartCPU.MouseMove += ChartCPU_MouseMove;
|
||||
chartCPU.MouseUp += ChartCPU_MouseUp;
|
||||
|
||||
chartGPU.MouseMove += ChartCPU_MouseMove;
|
||||
chartGPU.MouseUp += ChartCPU_MouseUp;
|
||||
|
||||
chartMid.MouseMove += ChartCPU_MouseMove;
|
||||
chartMid.MouseUp += ChartCPU_MouseUp;
|
||||
|
||||
buttonReset.Click += ButtonReset_Click;
|
||||
|
||||
trackTotal.Maximum = ASUSWmi.MaxTotal;
|
||||
trackTotal.Minimum = ASUSWmi.MinTotal;
|
||||
|
||||
trackCPU.Maximum = ASUSWmi.MaxCPU;
|
||||
trackCPU.Minimum = ASUSWmi.MinCPU;
|
||||
|
||||
trackCPU.Scroll += TrackPower_Scroll;
|
||||
trackTotal.Scroll += TrackPower_Scroll;
|
||||
|
||||
trackCPU.MouseUp += TrackPower_MouseUp;
|
||||
trackTotal.MouseUp += TrackPower_MouseUp;
|
||||
|
||||
checkApplyFans.Click += CheckApplyFans_Click;
|
||||
checkApplyPower.Click += CheckApplyPower_Click;
|
||||
|
||||
trackGPUCore.Scroll += trackGPU_Scroll;
|
||||
trackGPUMemory.Scroll += trackGPU_Scroll;
|
||||
|
||||
buttonResetGPU.Click += ButtonResetGPU_Click;
|
||||
|
||||
//labelInfo.MaximumSize = new Size(280, 0);
|
||||
labelInfo.Text = Properties.Strings.PPTExperimental;
|
||||
|
||||
InitFans();
|
||||
InitPower();
|
||||
InitBoost();
|
||||
|
||||
comboBoost.SelectedValueChanged += ComboBoost_Changed;
|
||||
|
||||
Shown += Fans_Shown;
|
||||
|
||||
InitGPUClocks();
|
||||
|
||||
}
|
||||
|
||||
private void InitGPUClocks()
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var _gpuControl = new NvidiaGpuControl())
|
||||
{
|
||||
panelGPU.Visible = _gpuControl.IsValid;
|
||||
|
||||
trackGPUCore.Value = Math.Min(Program.config.getConfig("GPUCore"), 300);
|
||||
trackGPUMemory.Value = Math.Min(Program.config.getConfig("GPUMemory"), 300);
|
||||
VisualiseGPUClocks();
|
||||
}
|
||||
} catch (Exception ex)
|
||||
{
|
||||
panelGPU.Visible=false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void ButtonResetGPU_Click(object? sender, EventArgs e)
|
||||
{
|
||||
|
||||
Program.RunAsAdmin();
|
||||
|
||||
try
|
||||
{
|
||||
trackGPUCore.Value = 0;
|
||||
trackGPUMemory.Value = 0;
|
||||
VisualiseGPUClocks();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private void VisualiseGPUClocks()
|
||||
{
|
||||
labelGPUCore.Text = $"+{trackGPUCore.Value} MHz";
|
||||
labelGPUMemory.Text = $"+{trackGPUMemory.Value} MHz";
|
||||
}
|
||||
|
||||
private void trackGPU_Scroll(object? sender, EventArgs e)
|
||||
{
|
||||
VisualiseGPUClocks();
|
||||
|
||||
try
|
||||
{
|
||||
Program.config.setConfig("GPUCore", trackGPUCore.Value);
|
||||
Program.config.setConfig("GPUMemory", trackGPUMemory.Value);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
static string ChartPercToRPM(int percentage, string unit = "")
|
||||
{
|
||||
if (percentage == 0) return "OFF";
|
||||
|
||||
return (200 * Math.Round((float)(MinRPM * 100 + (MaxRPM - MinRPM) * percentage) / 200)).ToString() + unit;
|
||||
}
|
||||
|
||||
void SetChart(Chart chart, int device)
|
||||
{
|
||||
|
||||
string title;
|
||||
|
||||
if (device == 1)
|
||||
title = Properties.Strings.FanProfileGPU;
|
||||
else if (device == 2)
|
||||
title = Properties.Strings.FanProfileMid;
|
||||
else
|
||||
title = Properties.Strings.FanProfileCPU;
|
||||
|
||||
if (Program.settingsForm.perfName.Length > 0)
|
||||
labelFans.Text = Properties.Strings.FanProfiles + ": " + Program.settingsForm.perfName;
|
||||
|
||||
chart.Titles[0].Text = title;
|
||||
|
||||
chart.ChartAreas[0].AxisX.Minimum = 10;
|
||||
chart.ChartAreas[0].AxisX.Maximum = 100;
|
||||
chart.ChartAreas[0].AxisX.Interval = 10;
|
||||
|
||||
chart.ChartAreas[0].AxisY.Minimum = 0;
|
||||
chart.ChartAreas[0].AxisY.Maximum = 100;
|
||||
|
||||
chart.ChartAreas[0].AxisY.LabelStyle.Font = new Font("Arial", 7F);
|
||||
|
||||
chart.ChartAreas[0].AxisX.MajorGrid.LineColor = chartGrid;
|
||||
chart.ChartAreas[0].AxisY.MajorGrid.LineColor = chartGrid;
|
||||
chart.ChartAreas[0].AxisX.LineColor = chartGrid;
|
||||
chart.ChartAreas[0].AxisY.LineColor = chartGrid;
|
||||
|
||||
for (int i = 0; i <= 90; i += 10)
|
||||
chart.ChartAreas[0].AxisY.CustomLabels.Add(i - 2, i + 2, ChartPercToRPM(i));
|
||||
|
||||
chart.ChartAreas[0].AxisY.CustomLabels.Add(98, 102, Properties.Strings.RPM);
|
||||
|
||||
chart.ChartAreas[0].AxisY.Interval = 10;
|
||||
|
||||
if (chart.Legends.Count > 0)
|
||||
chart.Legends[0].Enabled = false;
|
||||
|
||||
}
|
||||
|
||||
private void Fans_Shown(object? sender, EventArgs e)
|
||||
{
|
||||
if (Height > Program.settingsForm.Height)
|
||||
{
|
||||
Top = Program.settingsForm.Top + Program.settingsForm.Height - Height;
|
||||
}
|
||||
else
|
||||
{
|
||||
MinimumSize = new Size(0, Program.settingsForm.Height);
|
||||
Height = Program.settingsForm.Height;
|
||||
Top = Program.settingsForm.Top;
|
||||
}
|
||||
|
||||
|
||||
Left = Program.settingsForm.Left - Width - 5;
|
||||
}
|
||||
|
||||
|
||||
private void TrackPower_MouseUp(object? sender, MouseEventArgs e)
|
||||
{
|
||||
Program.settingsForm.AutoPower();
|
||||
}
|
||||
|
||||
|
||||
public void InitBoost()
|
||||
{
|
||||
int boost = NativeMethods.GetCPUBoost();
|
||||
if (boost >= 0)
|
||||
comboBoost.SelectedIndex = Math.Min(boost, comboBoost.Items.Count - 1);
|
||||
}
|
||||
|
||||
private void ComboBoost_Changed(object? sender, EventArgs e)
|
||||
{
|
||||
if (Program.config.getConfigPerf("auto_boost") != comboBoost.SelectedIndex)
|
||||
{
|
||||
NativeMethods.SetCPUBoost(comboBoost.SelectedIndex);
|
||||
Program.config.setConfigPerf("auto_boost", comboBoost.SelectedIndex);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckApplyPower_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (sender is null) return;
|
||||
CheckBox chk = (CheckBox)sender;
|
||||
Program.config.setConfigPerf("auto_apply_power", chk.Checked ? 1 : 0);
|
||||
|
||||
if (chk.Checked)
|
||||
{
|
||||
Program.settingsForm.AutoPower();
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, Program.config.getConfig("performance_mode"), "PerfMode");
|
||||
Program.settingsForm.AutoFans();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void CheckApplyFans_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (sender is null) return;
|
||||
CheckBox chk = (CheckBox)sender;
|
||||
|
||||
Program.config.setConfigPerf("auto_apply", chk.Checked ? 1 : 0);
|
||||
|
||||
if (chk.Checked)
|
||||
{
|
||||
Program.settingsForm.AutoFans();
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, Program.config.getConfig("performance_mode"), "PerfMode");
|
||||
Program.settingsForm.AutoPower();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void LabelFansResult(string text)
|
||||
{
|
||||
labelFansResult.Text = text;
|
||||
labelFansResult.Visible = (text.Length == 0);
|
||||
}
|
||||
|
||||
private void Fans_FormClosing(object? sender, FormClosingEventArgs e)
|
||||
{
|
||||
|
||||
/*
|
||||
if (e.CloseReason == CloseReason.UserClosing)
|
||||
{
|
||||
e.Cancel = true;
|
||||
Hide();
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
public void InitPower(bool changed = false)
|
||||
{
|
||||
|
||||
bool cpuBmode = (Program.wmi.DeviceGet(ASUSWmi.PPT_CPUB0) >= 0); // 2022 model +
|
||||
bool cpuAmode = (Program.wmi.DeviceGet(ASUSWmi.PPT_TotalA0) >= 0); // 2021 model +
|
||||
|
||||
panelPower.Visible = cpuAmode;
|
||||
panelCPU.Visible = cpuBmode;
|
||||
|
||||
// Yes, that's stupid, but Total slider on 2021 model actually adjusts CPU PPT
|
||||
if (!cpuBmode)
|
||||
{
|
||||
label1.Text = "CPU SPPT";
|
||||
}
|
||||
|
||||
int limit_total;
|
||||
int limit_cpu;
|
||||
bool apply = Program.config.getConfigPerf("auto_apply_power") == 1;
|
||||
|
||||
if (changed)
|
||||
{
|
||||
limit_total = trackTotal.Value;
|
||||
limit_cpu = trackCPU.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
limit_total = Program.config.getConfigPerf("limit_total");
|
||||
limit_cpu = Program.config.getConfigPerf("limit_cpu");
|
||||
}
|
||||
|
||||
if (limit_total < 0) limit_total = ASUSWmi.DefaultTotal;
|
||||
if (limit_total > ASUSWmi.MaxTotal) limit_total = ASUSWmi.MaxTotal;
|
||||
if (limit_total < ASUSWmi.MinTotal) limit_total = ASUSWmi.MinTotal;
|
||||
|
||||
if (limit_cpu < 0) limit_cpu = ASUSWmi.DefaultCPU;
|
||||
if (limit_cpu > ASUSWmi.MaxCPU) limit_cpu = ASUSWmi.MaxCPU;
|
||||
if (limit_cpu < ASUSWmi.MinCPU) limit_cpu = ASUSWmi.MinCPU;
|
||||
if (limit_cpu > limit_total) limit_cpu = limit_total;
|
||||
|
||||
trackTotal.Value = limit_total;
|
||||
trackCPU.Value = limit_cpu;
|
||||
checkApplyPower.Checked = apply;
|
||||
|
||||
labelTotal.Text = trackTotal.Value.ToString() + "W";
|
||||
labelCPU.Text = trackCPU.Value.ToString() + "W";
|
||||
pictureFine.Visible = (limit_cpu > 85 || limit_total > 145);
|
||||
|
||||
Program.config.setConfigPerf("limit_total", limit_total);
|
||||
Program.config.setConfigPerf("limit_cpu", limit_cpu);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void TrackPower_Scroll(object? sender, EventArgs e)
|
||||
{
|
||||
InitPower(true);
|
||||
}
|
||||
|
||||
|
||||
public void InitFans()
|
||||
{
|
||||
|
||||
byte[] curve = Program.wmi.GetFanCurve(2);
|
||||
|
||||
if (curve.All(singleByte => singleByte == 0))
|
||||
{
|
||||
Program.config.setConfig("mid_fan", 0);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.config.setConfig("mid_fan", 1);
|
||||
chartMid.Visible = true;
|
||||
SetChart(chartMid, 2);
|
||||
LoadProfile(seriesMid, 2);
|
||||
}
|
||||
|
||||
|
||||
SetChart(chartCPU, 0);
|
||||
SetChart(chartGPU, 1);
|
||||
|
||||
LoadProfile(seriesCPU, 0);
|
||||
LoadProfile(seriesGPU, 1);
|
||||
|
||||
int auto_apply = Program.config.getConfigPerf("auto_apply");
|
||||
|
||||
checkApplyFans.Checked = (auto_apply == 1);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void LoadProfile(Series series, int device, int def = 0)
|
||||
{
|
||||
|
||||
series.ChartType = SeriesChartType.Line;
|
||||
series.MarkerSize = 10;
|
||||
series.MarkerStyle = MarkerStyle.Circle;
|
||||
|
||||
series.Points.Clear();
|
||||
|
||||
int mode = Program.config.getConfig("performance_mode");
|
||||
byte[] curve = Program.config.getFanConfig(device);
|
||||
|
||||
if (def == 1 || curve.Length != 16)
|
||||
curve = Program.wmi.GetFanCurve(device, mode);
|
||||
|
||||
if (curve.Length != 16 || curve.All(singleByte => singleByte == 0))
|
||||
curve = Program.config.getDefaultCurve(device);
|
||||
|
||||
//Debug.WriteLine(BitConverter.ToString(curve));
|
||||
|
||||
byte old = 0;
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
if (curve[i] == old) curve[i]++; // preventing 2 points in same spot from default asus profiles
|
||||
series.Points.AddXY(curve[i], curve[i + 8]);
|
||||
old = curve[i];
|
||||
}
|
||||
|
||||
SaveProfile(series, device);
|
||||
|
||||
}
|
||||
|
||||
void SaveProfile(Series series, int device)
|
||||
{
|
||||
byte[] curve = new byte[16];
|
||||
int i = 0;
|
||||
foreach (DataPoint point in series.Points)
|
||||
{
|
||||
curve[i] = (byte)point.XValue;
|
||||
curve[i + 8] = (byte)point.YValues.First();
|
||||
i++;
|
||||
}
|
||||
|
||||
Program.config.setFanConfig(device, curve);
|
||||
//Program.wmi.SetFanCurve(device, curve);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void ButtonReset_Click(object? sender, EventArgs e)
|
||||
{
|
||||
|
||||
LoadProfile(seriesCPU, 0, 1);
|
||||
LoadProfile(seriesGPU, 1, 1);
|
||||
if (Program.config.getConfig("mid_fan") == 1)
|
||||
LoadProfile(seriesMid, 2, 1);
|
||||
|
||||
checkApplyFans.Checked = false;
|
||||
checkApplyPower.Checked = false;
|
||||
|
||||
Program.config.setConfigPerf("auto_apply", 0);
|
||||
Program.config.setConfigPerf("auto_apply_power", 0);
|
||||
|
||||
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, Program.config.getConfig("performance_mode"), "PerfMode");
|
||||
}
|
||||
|
||||
private void ChartCPU_MouseUp(object? sender, MouseEventArgs e)
|
||||
{
|
||||
curPoint = null;
|
||||
labelTip.Visible = false;
|
||||
|
||||
SaveProfile(seriesCPU, 0);
|
||||
SaveProfile(seriesGPU, 1);
|
||||
if (Program.config.getConfig("mid_fan") == 1)
|
||||
SaveProfile(seriesMid, 2);
|
||||
|
||||
Program.settingsForm.AutoFans();
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void ChartCPU_MouseMove(object? sender, MouseEventArgs e)
|
||||
{
|
||||
|
||||
if (sender is null) return;
|
||||
Chart chart = (Chart)sender;
|
||||
|
||||
ChartArea ca = chart.ChartAreas[0];
|
||||
Axis ax = ca.AxisX;
|
||||
Axis ay = ca.AxisY;
|
||||
|
||||
bool tip = false;
|
||||
|
||||
HitTestResult hit = chart.HitTest(e.X, e.Y);
|
||||
if (hit.Series is not null && hit.PointIndex >= 0)
|
||||
{
|
||||
curPoint = hit.Series.Points[hit.PointIndex];
|
||||
tip = true;
|
||||
}
|
||||
|
||||
|
||||
if (curPoint != null)
|
||||
{
|
||||
|
||||
double dx, dy, dymin;
|
||||
|
||||
try
|
||||
{
|
||||
dx = ax.PixelPositionToValue(e.X);
|
||||
dy = ay.PixelPositionToValue(e.Y);
|
||||
|
||||
if (dx < 20) dx = 20;
|
||||
if (dx > 100) dx = 100;
|
||||
|
||||
if (dy < 0) dy = 0;
|
||||
if (dy > 100) dy = 100;
|
||||
|
||||
dymin = (dx - 65) * 1.2;
|
||||
|
||||
if (dy < dymin) dy = dymin;
|
||||
|
||||
if (e.Button.HasFlag(MouseButtons.Left))
|
||||
{
|
||||
curPoint.XValue = dx;
|
||||
curPoint.YValues[0] = dy;
|
||||
|
||||
if (hit.Series is not null)
|
||||
AdjustAllLevels(hit.PointIndex, dx, dy, hit.Series);
|
||||
|
||||
tip = true;
|
||||
}
|
||||
|
||||
labelTip.Text = Math.Round(curPoint.XValue) + "C, " + ChartPercToRPM((int)curPoint.YValues[0], " " + Properties.Strings.RPM);
|
||||
labelTip.Top = e.Y + ((Control)sender).Top;
|
||||
labelTip.Left = e.X - 50;
|
||||
|
||||
}
|
||||
catch
|
||||
{
|
||||
Debug.WriteLine(e.Y);
|
||||
tip = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
labelTip.Visible = tip;
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void AdjustAllLevels(int index, double curXVal, double curYVal, Series series)
|
||||
{
|
||||
|
||||
// Get the neighboring DataPoints of the hit point
|
||||
DataPoint upperPoint = null;
|
||||
DataPoint lowerPoint = null;
|
||||
|
||||
if (index > 0)
|
||||
{
|
||||
lowerPoint = series.Points[index - 1];
|
||||
}
|
||||
|
||||
if (index < series.Points.Count - 1)
|
||||
{
|
||||
upperPoint = series.Points[index + 1];
|
||||
}
|
||||
|
||||
// Adjust the values according to the comparison between the value and its neighbors
|
||||
if (upperPoint != null)
|
||||
{
|
||||
if (curYVal > upperPoint.YValues[0])
|
||||
{
|
||||
|
||||
for (int i = index + 1; i < series.Points.Count; i++)
|
||||
{
|
||||
DataPoint curUpper = series.Points[i];
|
||||
if (curUpper.YValues[0] >= curYVal) break;
|
||||
|
||||
curUpper.YValues[0] = curYVal;
|
||||
}
|
||||
}
|
||||
if (curXVal > upperPoint.XValue)
|
||||
{
|
||||
|
||||
for (int i = index + 1; i < series.Points.Count; i++)
|
||||
{
|
||||
DataPoint curUpper = series.Points[i];
|
||||
if (curUpper.XValue >= curXVal) break;
|
||||
|
||||
curUpper.XValue = curXVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (lowerPoint != null)
|
||||
{
|
||||
//Debug.WriteLine(curYVal + " <? " + Math.Floor(lowerPoint.YValues[0]));
|
||||
if (curYVal <= Math.Floor(lowerPoint.YValues[0]))
|
||||
{
|
||||
for (int i = index - 1; i >= 0; i--)
|
||||
{
|
||||
DataPoint curLower = series.Points[i];
|
||||
if (curLower.YValues[0] < curYVal) break;
|
||||
curLower.YValues[0] = Math.Floor(curYVal);
|
||||
}
|
||||
}
|
||||
if (curXVal < lowerPoint.XValue)
|
||||
{
|
||||
|
||||
for (int i = index - 1; i >= 0; i--)
|
||||
{
|
||||
DataPoint curLower = series.Points[i];
|
||||
if (curLower.XValue <= curXVal) break;
|
||||
|
||||
curLower.XValue = curXVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
60
app/Fans.resx
Normal file
@@ -0,0 +1,60 @@
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
137
app/GHelper.csproj
Normal file
@@ -0,0 +1,137 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net7.0-windows8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>True</UseWindowsForms>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<IsPublishable>True</IsPublishable>
|
||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||
<StartupObject>GHelper.Program</StartupObject>
|
||||
<ApplicationIcon>favicon.ico</ApplicationIcon>
|
||||
<Platforms>AnyCPU;x64</Platforms>
|
||||
<SupportedOSPlatformVersion>8.0</SupportedOSPlatformVersion>
|
||||
<AssemblyName>GHelper</AssemblyName>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||
<AssemblyVersion>0.56</AssemblyVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<DebugType>embedded</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||
<DebugType>embedded</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<DebugType>embedded</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<DebugType>embedded</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="screenshots\**" />
|
||||
<EmbeddedResource Remove="screenshots\**" />
|
||||
<None Remove="screenshots\**" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="Resources\eco.ico" />
|
||||
<None Remove="Resources\icons8-charging-battery-48.png" />
|
||||
<None Remove="Resources\icons8-laptop-48.png" />
|
||||
<None Remove="Resources\icons8-speed-48.png" />
|
||||
<None Remove="Resources\icons8-video-card-48.png" />
|
||||
<None Remove="Resources\ultimate.ico" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="favicon.ico">
|
||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="hidlibrary" Version="3.3.40" />
|
||||
<PackageReference Include="HidSharpCore" Version="1.2.1.1" />
|
||||
<PackageReference Include="NvAPIWrapper.Net" Version="0.8.1.101" />
|
||||
<PackageReference Include="System.Management" Version="7.0.1" />
|
||||
<PackageReference Include="TaskScheduler" Version="2.10.1" />
|
||||
<PackageReference Include="WinForms.DataVisualization" Version="1.8.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="Resources\eco.ico">
|
||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Resources\icons8-charging-battery-48.png">
|
||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Resources\icons8-laptop-48.png">
|
||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Resources\icons8-speed-48.png">
|
||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Resources\icons8-video-card-48.png">
|
||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Resources\ultimate.ico">
|
||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="Properties\Resources.Designer.cs">
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="Properties\Strings.Designer.cs">
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Strings.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="Properties\Settings.Designer.cs">
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Update="Properties\Resources.uk.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Properties\Resources.uk.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Properties\Strings.uk.resx">
|
||||
<LastGenOutput>Strings.uk.Designer.cs</LastGenOutput>
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Properties\Strings.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Strings.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.4.33403.182
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GHelper", "GHelper.csproj", "{D6138BB1-8FDB-4835-87EF-2FE41A3DD604}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GHelper", "GHelper.csproj", "{D6138BB1-8FDB-4835-87EF-2FE41A3DD604}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B6E44CC6-5D28-4CB9-8EE2-BE9D6238E2D6}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
@@ -13,13 +13,19 @@ EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{D6138BB1-8FDB-4835-87EF-2FE41A3DD604}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D6138BB1-8FDB-4835-87EF-2FE41A3DD604}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D6138BB1-8FDB-4835-87EF-2FE41A3DD604}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D6138BB1-8FDB-4835-87EF-2FE41A3DD604}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D6138BB1-8FDB-4835-87EF-2FE41A3DD604}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{D6138BB1-8FDB-4835-87EF-2FE41A3DD604}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{D6138BB1-8FDB-4835-87EF-2FE41A3DD604}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D6138BB1-8FDB-4835-87EF-2FE41A3DD604}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D6138BB1-8FDB-4835-87EF-2FE41A3DD604}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{D6138BB1-8FDB-4835-87EF-2FE41A3DD604}.Release|Any CPU.Build.0 = Release|x64
|
||||
{D6138BB1-8FDB-4835-87EF-2FE41A3DD604}.Release|x64.ActiveCfg = Release|x64
|
||||
{D6138BB1-8FDB-4835-87EF-2FE41A3DD604}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
485
app/Gpu/AmdAdl2.cs
Normal file
@@ -0,0 +1,485 @@
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace AmdAdl2;
|
||||
|
||||
#region Export Struct
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct ADLSingleSensorData {
|
||||
public int Supported;
|
||||
public int Value;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct ADLPMLogDataOutput {
|
||||
int Size;
|
||||
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Adl2.ADL_PMLOG_MAX_SENSORS)]
|
||||
public ADLSingleSensorData[] Sensors;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct ADLGcnInfo
|
||||
{
|
||||
public int CuCount; //Number of compute units on the ASIC.
|
||||
public int TexCount; //Number of texture mapping units.
|
||||
public int RopCount; //Number of Render backend Units.
|
||||
public int ASICFamilyId; //Such SI, VI. See /inc/asic_reg/atiid.h for family ids
|
||||
public int ASICRevisionId; //Such as Ellesmere, Fiji. For example - VI family revision ids are stored in /inc/asic_reg/vi_id.h
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum ADLAsicFamilyType {
|
||||
Undefined = 0,
|
||||
Discrete = 1 << 0,
|
||||
Integrated = 1 << 1,
|
||||
Workstation = 1 << 2,
|
||||
FireMV = 1 << 3,
|
||||
Xgp = 1 << 4,
|
||||
Fusion = 1 << 5,
|
||||
Firestream = 1 << 6,
|
||||
Embedded = 1 << 7,
|
||||
}
|
||||
|
||||
public enum ADLSensorType {
|
||||
SENSOR_MAXTYPES = 0,
|
||||
PMLOG_CLK_GFXCLK = 1, // Current graphic clock value in MHz
|
||||
PMLOG_CLK_MEMCLK = 2, // Current memory clock value in MHz
|
||||
PMLOG_CLK_SOCCLK = 3,
|
||||
PMLOG_CLK_UVDCLK1 = 4,
|
||||
PMLOG_CLK_UVDCLK2 = 5,
|
||||
PMLOG_CLK_VCECLK = 6,
|
||||
PMLOG_CLK_VCNCLK = 7,
|
||||
PMLOG_TEMPERATURE_EDGE = 8, // Current edge of the die temperature value in C
|
||||
PMLOG_TEMPERATURE_MEM = 9,
|
||||
PMLOG_TEMPERATURE_VRVDDC = 10,
|
||||
PMLOG_TEMPERATURE_VRMVDD = 11,
|
||||
PMLOG_TEMPERATURE_LIQUID = 12,
|
||||
PMLOG_TEMPERATURE_PLX = 13,
|
||||
PMLOG_FAN_RPM = 14, // Current fan RPM value
|
||||
PMLOG_FAN_PERCENTAGE = 15, // Current ratio of fan RPM and max RPM
|
||||
PMLOG_SOC_VOLTAGE = 16,
|
||||
PMLOG_SOC_POWER = 17,
|
||||
PMLOG_SOC_CURRENT = 18,
|
||||
PMLOG_INFO_ACTIVITY_GFX = 19, // Current graphic activity level in percentage
|
||||
PMLOG_INFO_ACTIVITY_MEM = 20, // Current memory activity level in percentage
|
||||
PMLOG_GFX_VOLTAGE = 21, // Current graphic voltage in mV
|
||||
PMLOG_MEM_VOLTAGE = 22,
|
||||
PMLOG_ASIC_POWER = 23, // Current ASIC power draw in Watt
|
||||
PMLOG_TEMPERATURE_VRSOC = 24,
|
||||
PMLOG_TEMPERATURE_VRMVDD0 = 25,
|
||||
PMLOG_TEMPERATURE_VRMVDD1 = 26,
|
||||
PMLOG_TEMPERATURE_HOTSPOT = 27, // Current center of the die temperature value in C
|
||||
PMLOG_TEMPERATURE_GFX = 28,
|
||||
PMLOG_TEMPERATURE_SOC = 29,
|
||||
PMLOG_GFX_POWER = 30,
|
||||
PMLOG_GFX_CURRENT = 31,
|
||||
PMLOG_TEMPERATURE_CPU = 32,
|
||||
PMLOG_CPU_POWER = 33,
|
||||
PMLOG_CLK_CPUCLK = 34,
|
||||
PMLOG_THROTTLER_STATUS = 35, // A bit map of GPU throttle information. If a bit is set, the bit represented type of thorttling occurred in the last metrics sampling period
|
||||
PMLOG_CLK_VCN1CLK1 = 36,
|
||||
PMLOG_CLK_VCN1CLK2 = 37,
|
||||
PMLOG_SMART_POWERSHIFT_CPU = 38,
|
||||
PMLOG_SMART_POWERSHIFT_DGPU = 39,
|
||||
PMLOG_BUS_SPEED = 40, // Current PCIE bus speed running
|
||||
PMLOG_BUS_LANES = 41, // Current PCIE bus lanes using
|
||||
PMLOG_TEMPERATURE_LIQUID0 = 42,
|
||||
PMLOG_TEMPERATURE_LIQUID1 = 43,
|
||||
PMLOG_CLK_FCLK = 44,
|
||||
PMLOG_THROTTLER_STATUS_CPU = 45,
|
||||
PMLOG_SSPAIRED_ASICPOWER = 46, // apuPower
|
||||
PMLOG_SSTOTAL_POWERLIMIT = 47, // Total Power limit
|
||||
PMLOG_SSAPU_POWERLIMIT = 48, // APU Power limit
|
||||
PMLOG_SSDGPU_POWERLIMIT = 49, // DGPU Power limit
|
||||
PMLOG_TEMPERATURE_HOTSPOT_GCD = 50,
|
||||
PMLOG_TEMPERATURE_HOTSPOT_MCD = 51,
|
||||
PMLOG_THROTTLER_TEMP_EDGE_PERCENTAGE = 52,
|
||||
PMLOG_THROTTLER_TEMP_HOTSPOT_PERCENTAGE = 53,
|
||||
PMLOG_THROTTLER_TEMP_HOTSPOT_GCD_PERCENTAGE = 54,
|
||||
PMLOG_THROTTLER_TEMP_HOTSPOT_MCD_PERCENTAGE = 55,
|
||||
PMLOG_THROTTLER_TEMP_MEM_PERCENTAGE = 56,
|
||||
PMLOG_THROTTLER_TEMP_VR_GFX_PERCENTAGE = 57,
|
||||
PMLOG_THROTTLER_TEMP_VR_MEM0_PERCENTAGE = 58,
|
||||
PMLOG_THROTTLER_TEMP_VR_MEM1_PERCENTAGE = 59,
|
||||
PMLOG_THROTTLER_TEMP_VR_SOC_PERCENTAGE = 60,
|
||||
PMLOG_THROTTLER_TEMP_LIQUID0_PERCENTAGE = 61,
|
||||
PMLOG_THROTTLER_TEMP_LIQUID1_PERCENTAGE = 62,
|
||||
PMLOG_THROTTLER_TEMP_PLX_PERCENTAGE = 63,
|
||||
PMLOG_THROTTLER_TDC_GFX_PERCENTAGE = 64,
|
||||
PMLOG_THROTTLER_TDC_SOC_PERCENTAGE = 65,
|
||||
PMLOG_THROTTLER_TDC_USR_PERCENTAGE = 66,
|
||||
PMLOG_THROTTLER_PPT0_PERCENTAGE = 67,
|
||||
PMLOG_THROTTLER_PPT1_PERCENTAGE = 68,
|
||||
PMLOG_THROTTLER_PPT2_PERCENTAGE = 69,
|
||||
PMLOG_THROTTLER_PPT3_PERCENTAGE = 70,
|
||||
PMLOG_THROTTLER_FIT_PERCENTAGE = 71,
|
||||
PMLOG_THROTTLER_GFX_APCC_PLUS_PERCENTAGE = 72,
|
||||
PMLOG_BOARD_POWER = 73,
|
||||
PMLOG_MAX_SENSORS_REAL
|
||||
};
|
||||
|
||||
//Throttle Status
|
||||
[Flags]
|
||||
public enum ADL_THROTTLE_NOTIFICATION {
|
||||
ADL_PMLOG_THROTTLE_POWER = 1 << 0,
|
||||
ADL_PMLOG_THROTTLE_THERMAL = 1 << 1,
|
||||
ADL_PMLOG_THROTTLE_CURRENT = 1 << 2,
|
||||
};
|
||||
|
||||
public enum ADL_PMLOG_SENSORS {
|
||||
ADL_SENSOR_MAXTYPES = 0,
|
||||
ADL_PMLOG_CLK_GFXCLK = 1,
|
||||
ADL_PMLOG_CLK_MEMCLK = 2,
|
||||
ADL_PMLOG_CLK_SOCCLK = 3,
|
||||
ADL_PMLOG_CLK_UVDCLK1 = 4,
|
||||
ADL_PMLOG_CLK_UVDCLK2 = 5,
|
||||
ADL_PMLOG_CLK_VCECLK = 6,
|
||||
ADL_PMLOG_CLK_VCNCLK = 7,
|
||||
ADL_PMLOG_TEMPERATURE_EDGE = 8,
|
||||
ADL_PMLOG_TEMPERATURE_MEM = 9,
|
||||
ADL_PMLOG_TEMPERATURE_VRVDDC = 10,
|
||||
ADL_PMLOG_TEMPERATURE_VRMVDD = 11,
|
||||
ADL_PMLOG_TEMPERATURE_LIQUID = 12,
|
||||
ADL_PMLOG_TEMPERATURE_PLX = 13,
|
||||
ADL_PMLOG_FAN_RPM = 14,
|
||||
ADL_PMLOG_FAN_PERCENTAGE = 15,
|
||||
ADL_PMLOG_SOC_VOLTAGE = 16,
|
||||
ADL_PMLOG_SOC_POWER = 17,
|
||||
ADL_PMLOG_SOC_CURRENT = 18,
|
||||
ADL_PMLOG_INFO_ACTIVITY_GFX = 19,
|
||||
ADL_PMLOG_INFO_ACTIVITY_MEM = 20,
|
||||
ADL_PMLOG_GFX_VOLTAGE = 21,
|
||||
ADL_PMLOG_MEM_VOLTAGE = 22,
|
||||
ADL_PMLOG_ASIC_POWER = 23,
|
||||
ADL_PMLOG_TEMPERATURE_VRSOC = 24,
|
||||
ADL_PMLOG_TEMPERATURE_VRMVDD0 = 25,
|
||||
ADL_PMLOG_TEMPERATURE_VRMVDD1 = 26,
|
||||
ADL_PMLOG_TEMPERATURE_HOTSPOT = 27,
|
||||
ADL_PMLOG_TEMPERATURE_GFX = 28,
|
||||
ADL_PMLOG_TEMPERATURE_SOC = 29,
|
||||
ADL_PMLOG_GFX_POWER = 30,
|
||||
ADL_PMLOG_GFX_CURRENT = 31,
|
||||
ADL_PMLOG_TEMPERATURE_CPU = 32,
|
||||
ADL_PMLOG_CPU_POWER = 33,
|
||||
ADL_PMLOG_CLK_CPUCLK = 34,
|
||||
ADL_PMLOG_THROTTLER_STATUS = 35, // GFX
|
||||
ADL_PMLOG_CLK_VCN1CLK1 = 36,
|
||||
ADL_PMLOG_CLK_VCN1CLK2 = 37,
|
||||
ADL_PMLOG_SMART_POWERSHIFT_CPU = 38,
|
||||
ADL_PMLOG_SMART_POWERSHIFT_DGPU = 39,
|
||||
ADL_PMLOG_BUS_SPEED = 40,
|
||||
ADL_PMLOG_BUS_LANES = 41,
|
||||
ADL_PMLOG_TEMPERATURE_LIQUID0 = 42,
|
||||
ADL_PMLOG_TEMPERATURE_LIQUID1 = 43,
|
||||
ADL_PMLOG_CLK_FCLK = 44,
|
||||
ADL_PMLOG_THROTTLER_STATUS_CPU = 45,
|
||||
ADL_PMLOG_SSPAIRED_ASICPOWER = 46, // apuPower
|
||||
ADL_PMLOG_SSTOTAL_POWERLIMIT = 47, // Total Power limit
|
||||
ADL_PMLOG_SSAPU_POWERLIMIT = 48, // APU Power limit
|
||||
ADL_PMLOG_SSDGPU_POWERLIMIT = 49, // DGPU Power limit
|
||||
ADL_PMLOG_TEMPERATURE_HOTSPOT_GCD = 50,
|
||||
ADL_PMLOG_TEMPERATURE_HOTSPOT_MCD = 51,
|
||||
ADL_PMLOG_THROTTLER_TEMP_EDGE_PERCENTAGE = 52,
|
||||
ADL_PMLOG_THROTTLER_TEMP_HOTSPOT_PERCENTAGE = 53,
|
||||
ADL_PMLOG_THROTTLER_TEMP_HOTSPOT_GCD_PERCENTAGE = 54,
|
||||
ADL_PMLOG_THROTTLER_TEMP_HOTSPOT_MCD_PERCENTAGE = 55,
|
||||
ADL_PMLOG_THROTTLER_TEMP_MEM_PERCENTAGE = 56,
|
||||
ADL_PMLOG_THROTTLER_TEMP_VR_GFX_PERCENTAGE = 57,
|
||||
ADL_PMLOG_THROTTLER_TEMP_VR_MEM0_PERCENTAGE = 58,
|
||||
ADL_PMLOG_THROTTLER_TEMP_VR_MEM1_PERCENTAGE = 59,
|
||||
ADL_PMLOG_THROTTLER_TEMP_VR_SOC_PERCENTAGE = 60,
|
||||
ADL_PMLOG_THROTTLER_TEMP_LIQUID0_PERCENTAGE = 61,
|
||||
ADL_PMLOG_THROTTLER_TEMP_LIQUID1_PERCENTAGE = 62,
|
||||
ADL_PMLOG_THROTTLER_TEMP_PLX_PERCENTAGE = 63,
|
||||
ADL_PMLOG_THROTTLER_TDC_GFX_PERCENTAGE = 64,
|
||||
ADL_PMLOG_THROTTLER_TDC_SOC_PERCENTAGE = 65,
|
||||
ADL_PMLOG_THROTTLER_TDC_USR_PERCENTAGE = 66,
|
||||
ADL_PMLOG_THROTTLER_PPT0_PERCENTAGE = 67,
|
||||
ADL_PMLOG_THROTTLER_PPT1_PERCENTAGE = 68,
|
||||
ADL_PMLOG_THROTTLER_PPT2_PERCENTAGE = 69,
|
||||
ADL_PMLOG_THROTTLER_PPT3_PERCENTAGE = 70,
|
||||
ADL_PMLOG_THROTTLER_FIT_PERCENTAGE = 71,
|
||||
ADL_PMLOG_THROTTLER_GFX_APCC_PLUS_PERCENTAGE = 72,
|
||||
ADL_PMLOG_BOARD_POWER = 73,
|
||||
ADL_PMLOG_MAX_SENSORS_REAL
|
||||
}
|
||||
|
||||
#region ADLAdapterInfo
|
||||
|
||||
/// <summary> ADLAdapterInfo Structure</summary>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct ADLAdapterInfo {
|
||||
/// <summary>The size of the structure</summary>
|
||||
int Size;
|
||||
|
||||
/// <summary> Adapter Index</summary>
|
||||
public int AdapterIndex;
|
||||
|
||||
/// <summary> Adapter UDID</summary>
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = Adl2.ADL_MAX_PATH)]
|
||||
public string UDID;
|
||||
|
||||
/// <summary> Adapter Bus Number</summary>
|
||||
public int BusNumber;
|
||||
|
||||
/// <summary> Adapter Driver Number</summary>
|
||||
public int DriverNumber;
|
||||
|
||||
/// <summary> Adapter Function Number</summary>
|
||||
public int FunctionNumber;
|
||||
|
||||
/// <summary> Adapter Vendor ID</summary>
|
||||
public int VendorID;
|
||||
|
||||
/// <summary> Adapter Adapter name</summary>
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = Adl2.ADL_MAX_PATH)]
|
||||
public string AdapterName;
|
||||
|
||||
/// <summary> Adapter Display name</summary>
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = Adl2.ADL_MAX_PATH)]
|
||||
public string DisplayName;
|
||||
|
||||
/// <summary> Adapter Present status</summary>
|
||||
public int Present;
|
||||
|
||||
/// <summary> Adapter Exist status</summary>
|
||||
public int Exist;
|
||||
|
||||
/// <summary> Adapter Driver Path</summary>
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = Adl2.ADL_MAX_PATH)]
|
||||
public string DriverPath;
|
||||
|
||||
/// <summary> Adapter Driver Ext Path</summary>
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = Adl2.ADL_MAX_PATH)]
|
||||
public string DriverPathExt;
|
||||
|
||||
/// <summary> Adapter PNP String</summary>
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = Adl2.ADL_MAX_PATH)]
|
||||
public string PNPString;
|
||||
|
||||
/// <summary> OS Display Index</summary>
|
||||
public int OSDisplayIndex;
|
||||
}
|
||||
|
||||
/// <summary> ADLAdapterInfo Array</summary>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct ADLAdapterInfoArray {
|
||||
/// <summary> ADLAdapterInfo Array </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Adl2.ADL_MAX_ADAPTERS)]
|
||||
public ADLAdapterInfo[] ADLAdapterInfo;
|
||||
}
|
||||
|
||||
#endregion ADLAdapterInfo
|
||||
|
||||
#region ADLDisplayInfo
|
||||
|
||||
/// <summary> ADLDisplayID Structure</summary>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct ADLDisplayID {
|
||||
/// <summary> Display Logical Index </summary>
|
||||
public int DisplayLogicalIndex;
|
||||
|
||||
/// <summary> Display Physical Index </summary>
|
||||
public int DisplayPhysicalIndex;
|
||||
|
||||
/// <summary> Adapter Logical Index </summary>
|
||||
public int DisplayLogicalAdapterIndex;
|
||||
|
||||
/// <summary> Adapter Physical Index </summary>
|
||||
public int DisplayPhysicalAdapterIndex;
|
||||
}
|
||||
|
||||
/// <summary> ADLDisplayInfo Structure</summary>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct ADLDisplayInfo {
|
||||
/// <summary> Display Index </summary>
|
||||
public ADLDisplayID DisplayID;
|
||||
|
||||
/// <summary> Display Controller Index </summary>
|
||||
public int DisplayControllerIndex;
|
||||
|
||||
/// <summary> Display Name </summary>
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = Adl2.ADL_MAX_PATH)]
|
||||
public string DisplayName;
|
||||
|
||||
/// <summary> Display Manufacturer Name </summary>
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = Adl2.ADL_MAX_PATH)]
|
||||
public string DisplayManufacturerName;
|
||||
|
||||
/// <summary> Display Type : < The Display type. CRT, TV,CV,DFP are some of display types,</summary>
|
||||
public int DisplayType;
|
||||
|
||||
/// <summary> Display output type </summary>
|
||||
public int DisplayOutputType;
|
||||
|
||||
/// <summary> Connector type</summary>
|
||||
public int DisplayConnector;
|
||||
|
||||
///<summary> Indicating the display info bits' mask.<summary>
|
||||
public int DisplayInfoMask;
|
||||
|
||||
///<summary> Indicating the display info value.<summary>
|
||||
public int DisplayInfoValue;
|
||||
}
|
||||
|
||||
#endregion ADLDisplayInfo
|
||||
|
||||
#endregion Export Struct
|
||||
|
||||
public class Adl2 {
|
||||
public const string Atiadlxx_FileName = "atiadlxx.dll";
|
||||
|
||||
#region Internal Constant
|
||||
|
||||
/// <summary> Define the maximum path</summary>
|
||||
public const int ADL_MAX_PATH = 256;
|
||||
|
||||
/// <summary> Define the maximum adapters</summary>
|
||||
public const int ADL_MAX_ADAPTERS = 40 /* 150 */;
|
||||
|
||||
/// <summary> Define the maximum displays</summary>
|
||||
public const int ADL_MAX_DISPLAYS = 40 /* 150 */;
|
||||
|
||||
/// <summary> Define the maximum device name length</summary>
|
||||
public const int ADL_MAX_DEVICENAME = 32;
|
||||
|
||||
/// <summary> Define the successful</summary>
|
||||
public const int ADL_SUCCESS = 0;
|
||||
|
||||
/// <summary> Define the failure</summary>
|
||||
public const int ADL_FAIL = -1;
|
||||
|
||||
/// <summary> Define the driver ok</summary>
|
||||
public const int ADL_DRIVER_OK = 0;
|
||||
|
||||
/// <summary> Maximum number of GL-Sync ports on the GL-Sync module </summary>
|
||||
public const int ADL_MAX_GLSYNC_PORTS = 8;
|
||||
|
||||
/// <summary> Maximum number of GL-Sync ports on the GL-Sync module </summary>
|
||||
public const int ADL_MAX_GLSYNC_PORT_LEDS = 8;
|
||||
|
||||
/// <summary> Maximum number of ADLMOdes for the adapter </summary>
|
||||
public const int ADL_MAX_NUM_DISPLAYMODES = 1024;
|
||||
|
||||
/// <summary> Performance Metrics Log max sensors number </summary>
|
||||
public const int ADL_PMLOG_MAX_SENSORS = 256;
|
||||
|
||||
#endregion Internal Constant
|
||||
|
||||
// ///// <summary> ADL Create Function to create ADL Data</summary>
|
||||
/// <param name="enumConnectedAdapters">If it is 1, then ADL will only return the physical exist adapters </param>
|
||||
///// <returns> retrun ADL Error Code</returns>
|
||||
public static int ADL2_Main_Control_Create(int enumConnectedAdapters, out IntPtr adlContextHandle) {
|
||||
return NativeMethods.ADL2_Main_Control_Create(ADL_Main_Memory_Alloc_Impl_Reference, enumConnectedAdapters, out adlContextHandle);
|
||||
}
|
||||
|
||||
public static void FreeMemory(IntPtr buffer) {
|
||||
Memory_Free_Impl(buffer);
|
||||
}
|
||||
|
||||
private static bool? isDllLoaded;
|
||||
|
||||
public static bool Load() {
|
||||
if (isDllLoaded != null)
|
||||
return isDllLoaded.Value;
|
||||
|
||||
try {
|
||||
Marshal.PrelinkAll(typeof(Adl2));
|
||||
isDllLoaded = true;
|
||||
} catch (Exception e) when (e is DllNotFoundException or EntryPointNotFoundException) {
|
||||
Debug.WriteLine(e);
|
||||
isDllLoaded = false;
|
||||
}
|
||||
|
||||
return isDllLoaded.Value;
|
||||
}
|
||||
|
||||
private static NativeMethods.ADL_Main_Memory_Alloc ADL_Main_Memory_Alloc_Impl_Reference = Memory_Alloc_Impl;
|
||||
|
||||
/// <summary> Build in memory allocation function</summary>
|
||||
/// <param name="size">input size</param>
|
||||
/// <returns>return the memory buffer</returns>
|
||||
private static IntPtr Memory_Alloc_Impl(int size) {
|
||||
return Marshal.AllocCoTaskMem(size);
|
||||
}
|
||||
|
||||
/// <summary> Build in memory free function</summary>
|
||||
/// <param name="buffer">input buffer</param>
|
||||
private static void Memory_Free_Impl(IntPtr buffer) {
|
||||
if (IntPtr.Zero != buffer) {
|
||||
Marshal.FreeCoTaskMem(buffer);
|
||||
}
|
||||
}
|
||||
|
||||
public static class NativeMethods {
|
||||
/// <summary> ADL Memory allocation function allows ADL to callback for memory allocation</summary>
|
||||
/// <param name="size">input size</param>
|
||||
/// <returns> retrun ADL Error Code</returns>
|
||||
public delegate IntPtr ADL_Main_Memory_Alloc(int size);
|
||||
|
||||
// ///// <summary> ADL Create Function to create ADL Data</summary>
|
||||
/// <param name="callback">Call back functin pointer which is ised to allocate memeory </param>
|
||||
/// <param name="enumConnectedAdapters">If it is 1, then ADL will only retuen the physical exist adapters </param>
|
||||
///// <returns> retrun ADL Error Code</returns>
|
||||
[DllImport(Atiadlxx_FileName)]
|
||||
public static extern int ADL2_Main_Control_Create(ADL_Main_Memory_Alloc callback, int enumConnectedAdapters, out IntPtr adlContextHandle);
|
||||
|
||||
/// <summary> ADL Destroy Function to free up ADL Data</summary>
|
||||
/// <returns> retrun ADL Error Code</returns>
|
||||
[DllImport(Atiadlxx_FileName)]
|
||||
public static extern int ADL2_Main_Control_Destroy(IntPtr adlContextHandle);
|
||||
|
||||
/// <summary> ADL Function to get the number of adapters</summary>
|
||||
/// <param name="numAdapters">return number of adapters</param>
|
||||
/// <returns> retrun ADL Error Code</returns>
|
||||
[DllImport(Atiadlxx_FileName)]
|
||||
public static extern int ADL2_Adapter_NumberOfAdapters_Get(IntPtr adlContextHandle, out int numAdapters);
|
||||
|
||||
/// <summary> ADL Function to get the GPU adapter information</summary>
|
||||
/// <param name="info">return GPU adapter information</param>
|
||||
/// <param name="inputSize">the size of the GPU adapter struct</param>
|
||||
/// <returns> retrun ADL Error Code</returns>
|
||||
[DllImport(Atiadlxx_FileName)]
|
||||
public static extern int ADL2_Adapter_AdapterInfo_Get(IntPtr adlContextHandle, IntPtr info, int inputSize);
|
||||
|
||||
/// <summary> Function to determine if the adapter is active or not.</summary>
|
||||
/// <remarks>The function is used to check if the adapter associated with iAdapterIndex is active</remarks>
|
||||
/// <param name="adapterIndex"> Adapter Index.</param>
|
||||
/// <param name="status"> Status of the adapter. True: Active; False: Dsiabled</param>
|
||||
/// <returns>Non zero is successfull</returns>
|
||||
[DllImport(Atiadlxx_FileName)]
|
||||
public static extern int ADL2_Adapter_Active_Get(IntPtr adlContextHandle, int adapterIndex, out int status);
|
||||
|
||||
/// <summary>Get display information based on adapter index</summary>
|
||||
/// <param name="adapterIndex">Adapter Index</param>
|
||||
/// <param name="numDisplays">return the total number of supported displays</param>
|
||||
/// <param name="displayInfoArray">return ADLDisplayInfo Array for supported displays' information</param>
|
||||
/// <param name="forceDetect">force detect or not</param>
|
||||
/// <returns>return ADL Error Code</returns>
|
||||
[DllImport(Atiadlxx_FileName)]
|
||||
public static extern int ADL2_Display_DisplayInfo_Get(
|
||||
IntPtr adlContextHandle,
|
||||
int adapterIndex,
|
||||
out int numDisplays,
|
||||
out IntPtr displayInfoArray,
|
||||
int forceDetect
|
||||
);
|
||||
|
||||
[DllImport(Atiadlxx_FileName)]
|
||||
public static extern int ADL2_Overdrive_Caps(
|
||||
IntPtr adlContextHandle,
|
||||
int adapterIndex,
|
||||
out int supported,
|
||||
out int enabled,
|
||||
out int version
|
||||
);
|
||||
|
||||
[DllImport(Atiadlxx_FileName)]
|
||||
public static extern int ADL2_New_QueryPMLogData_Get(IntPtr adlContextHandle, int adapterIndex, out ADLPMLogDataOutput adlpmLogDataOutput);
|
||||
|
||||
[DllImport(Atiadlxx_FileName)]
|
||||
public static extern int ADL2_Adapter_ASICFamilyType_Get(IntPtr adlContextHandle, int adapterIndex, out ADLAsicFamilyType asicFamilyType, out int asicFamilyTypeValids);
|
||||
}
|
||||
}
|
||||
113
app/Gpu/AmdGpuControl.cs
Normal file
@@ -0,0 +1,113 @@
|
||||
using System.Runtime.InteropServices;
|
||||
using AmdAdl2;
|
||||
|
||||
namespace GHelper.Gpu;
|
||||
|
||||
// Reference: https://github.com/GPUOpen-LibrariesAndSDKs/display-library/blob/master/Sample-Managed/Program.cs
|
||||
public class AmdGpuControl : IGpuControl {
|
||||
private bool _isReady;
|
||||
private IntPtr _adlContextHandle;
|
||||
private readonly ADLAdapterInfo _internalDiscreteAdapter;
|
||||
|
||||
public bool IsNvidia => false;
|
||||
|
||||
|
||||
public AmdGpuControl() {
|
||||
if (!Adl2.Load())
|
||||
return;
|
||||
|
||||
if (Adl2.ADL2_Main_Control_Create(1, out _adlContextHandle) != Adl2.ADL_SUCCESS)
|
||||
return;
|
||||
|
||||
Adl2.NativeMethods.ADL2_Adapter_NumberOfAdapters_Get(_adlContextHandle, out int numberOfAdapters);
|
||||
if (numberOfAdapters <= 0)
|
||||
return;
|
||||
|
||||
ADLAdapterInfoArray osAdapterInfoData = new();
|
||||
int osAdapterInfoDataSize = Marshal.SizeOf(osAdapterInfoData);
|
||||
IntPtr AdapterBuffer = Marshal.AllocCoTaskMem(osAdapterInfoDataSize);
|
||||
Marshal.StructureToPtr(osAdapterInfoData, AdapterBuffer, false);
|
||||
if (Adl2.NativeMethods.ADL2_Adapter_AdapterInfo_Get(_adlContextHandle, AdapterBuffer, osAdapterInfoDataSize) != Adl2.ADL_SUCCESS)
|
||||
return;
|
||||
|
||||
osAdapterInfoData = (ADLAdapterInfoArray) Marshal.PtrToStructure(AdapterBuffer, osAdapterInfoData.GetType())!;
|
||||
|
||||
const int amdVendorId = 1002;
|
||||
|
||||
// Determine which GPU is internal discrete AMD GPU
|
||||
ADLAdapterInfo internalDiscreteAdapter =
|
||||
osAdapterInfoData.ADLAdapterInfo
|
||||
.FirstOrDefault(adapter => {
|
||||
if (adapter.Exist == 0 || adapter.Present == 0)
|
||||
return false;
|
||||
|
||||
if (adapter.VendorID != amdVendorId)
|
||||
return false;
|
||||
|
||||
if (Adl2.NativeMethods.ADL2_Adapter_ASICFamilyType_Get(_adlContextHandle, adapter.AdapterIndex, out ADLAsicFamilyType asicFamilyType, out int asicFamilyTypeValids) != Adl2.ADL_SUCCESS)
|
||||
return false;
|
||||
|
||||
asicFamilyType = (ADLAsicFamilyType) ((int) asicFamilyType & asicFamilyTypeValids);
|
||||
|
||||
// FIXME: is this correct for G14 2022?
|
||||
return (asicFamilyType & ADLAsicFamilyType.Discrete) != 0;
|
||||
});
|
||||
|
||||
if (internalDiscreteAdapter.Exist == 0)
|
||||
return;
|
||||
|
||||
_internalDiscreteAdapter = internalDiscreteAdapter;
|
||||
_isReady = true;
|
||||
}
|
||||
|
||||
public bool IsValid => _isReady && _adlContextHandle != IntPtr.Zero;
|
||||
|
||||
public int? GetCurrentTemperature() {
|
||||
if (!IsValid)
|
||||
return null;
|
||||
|
||||
if (Adl2.NativeMethods.ADL2_New_QueryPMLogData_Get(_adlContextHandle, _internalDiscreteAdapter.AdapterIndex, out ADLPMLogDataOutput adlpmLogDataOutput) != Adl2.ADL_SUCCESS)
|
||||
return null;
|
||||
|
||||
ADLSingleSensorData temperatureSensor = adlpmLogDataOutput.Sensors[(int) ADLSensorType.PMLOG_TEMPERATURE_EDGE];
|
||||
if (temperatureSensor.Supported == 0)
|
||||
return null;
|
||||
|
||||
return temperatureSensor.Value;
|
||||
}
|
||||
|
||||
|
||||
public int? GetGpuUse()
|
||||
{
|
||||
if (!IsValid)
|
||||
return null;
|
||||
|
||||
if (Adl2.NativeMethods.ADL2_New_QueryPMLogData_Get(_adlContextHandle, _internalDiscreteAdapter.AdapterIndex, out ADLPMLogDataOutput adlpmLogDataOutput) != Adl2.ADL_SUCCESS)
|
||||
return null;
|
||||
|
||||
ADLSingleSensorData gpuUsage = adlpmLogDataOutput.Sensors[(int)ADLSensorType.PMLOG_INFO_ACTIVITY_GFX];
|
||||
if (gpuUsage.Supported == 0)
|
||||
return null;
|
||||
|
||||
return gpuUsage.Value;
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void ReleaseUnmanagedResources() {
|
||||
if (_adlContextHandle != IntPtr.Zero) {
|
||||
Adl2.NativeMethods.ADL2_Main_Control_Destroy(_adlContextHandle);
|
||||
_adlContextHandle = IntPtr.Zero;
|
||||
_isReady = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
ReleaseUnmanagedResources();
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
~AmdGpuControl() {
|
||||
ReleaseUnmanagedResources();
|
||||
}
|
||||
}
|
||||
8
app/Gpu/IGpuControl.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace GHelper.Gpu;
|
||||
|
||||
public interface IGpuControl : IDisposable {
|
||||
bool IsNvidia { get; }
|
||||
bool IsValid { get; }
|
||||
int? GetCurrentTemperature();
|
||||
int? GetGpuUse();
|
||||
}
|
||||
65
app/Gpu/NvidiaGpuControl.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
using NvAPIWrapper.GPU;
|
||||
using NvAPIWrapper.Native;
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.Interfaces.GPU;
|
||||
|
||||
namespace GHelper.Gpu;
|
||||
|
||||
public class NvidiaGpuControl : IGpuControl
|
||||
{
|
||||
private readonly PhysicalGPU? _internalGpu;
|
||||
|
||||
public NvidiaGpuControl()
|
||||
{
|
||||
_internalGpu = GetInternalDiscreteGpu();
|
||||
}
|
||||
|
||||
public bool IsValid => _internalGpu != null;
|
||||
|
||||
public bool IsNvidia => IsValid;
|
||||
|
||||
public int? GetCurrentTemperature()
|
||||
{
|
||||
if (!IsValid)
|
||||
return null;
|
||||
|
||||
PhysicalGPU internalGpu = _internalGpu!;
|
||||
IThermalSensor? gpuSensor =
|
||||
GPUApi.GetThermalSettings(internalGpu.Handle).Sensors
|
||||
.FirstOrDefault(s => s.Target == ThermalSettingsTarget.GPU);
|
||||
|
||||
return gpuSensor?.CurrentTemperature;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
}
|
||||
|
||||
private static PhysicalGPU? GetInternalDiscreteGpu()
|
||||
{
|
||||
try
|
||||
{
|
||||
return PhysicalGPU
|
||||
.GetPhysicalGPUs()
|
||||
.FirstOrDefault(gpu => gpu.SystemType == SystemType.Laptop);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int? GetGpuUse()
|
||||
{
|
||||
if (!IsValid)
|
||||
return null;
|
||||
|
||||
PhysicalGPU internalGpu = _internalGpu!;
|
||||
IUtilizationDomainInfo? gpuUsage = GPUApi.GetUsages(internalGpu.Handle).GPU;
|
||||
|
||||
return (int?)gpuUsage?.Percentage;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
174
app/HardwareMonitor.cs
Normal file
@@ -0,0 +1,174 @@
|
||||
using GHelper;
|
||||
using GHelper.Gpu;
|
||||
using System.Diagnostics;
|
||||
|
||||
public static class HardwareMonitor
|
||||
{
|
||||
public static IGpuControl? GpuControl;
|
||||
|
||||
public static float? cpuTemp = -1;
|
||||
public static float? batteryDischarge = -1;
|
||||
public static int? gpuTemp = null;
|
||||
|
||||
public static string? cpuFan;
|
||||
public static string? gpuFan;
|
||||
public static string? midFan;
|
||||
|
||||
public static int? gpuUse;
|
||||
|
||||
public static int GetFanMax()
|
||||
{
|
||||
int max = 58;
|
||||
if (Program.config.ContainsModel("401")) max = 72;
|
||||
else if (Program.config.ContainsModel("503")) max = 68;
|
||||
return Math.Max(max, Program.config.getConfig("fan_max"));
|
||||
}
|
||||
|
||||
public static void SetFanMax(int fan)
|
||||
{
|
||||
Program.config.setConfig("fan_max", fan);
|
||||
}
|
||||
private static string FormatFan(int fan)
|
||||
{
|
||||
// fix for old models
|
||||
if (fan < 0)
|
||||
{
|
||||
fan += 65536;
|
||||
if (fan <= 0 || fan > 100) return null; //nothing reasonable
|
||||
}
|
||||
|
||||
int fanMax = GetFanMax();
|
||||
if (fan > fanMax) SetFanMax(fan);
|
||||
|
||||
if (Program.config.getConfig("fan_rpm") == 1)
|
||||
return " Fan: " + (fan * 100).ToString() + "RPM";
|
||||
else
|
||||
return " Fan: " + Math.Min(Math.Round((float)fan / fanMax * 100), 100).ToString() + "%"; // relatively to 6000 rpm
|
||||
}
|
||||
|
||||
private static int GetGpuUse()
|
||||
{
|
||||
try
|
||||
{
|
||||
int? gpuUse = GpuControl?.GetGpuUse();
|
||||
if (gpuUse is not null) return (int)gpuUse;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex.ToString());
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
public static void ReadSensors()
|
||||
{
|
||||
batteryDischarge = -1;
|
||||
gpuTemp = -1;
|
||||
gpuUse = -1;
|
||||
|
||||
cpuFan = FormatFan(Program.wmi.DeviceGet(ASUSWmi.CPU_Fan));
|
||||
gpuFan = FormatFan(Program.wmi.DeviceGet(ASUSWmi.GPU_Fan));
|
||||
midFan = FormatFan(Program.wmi.DeviceGet(ASUSWmi.Mid_Fan));
|
||||
|
||||
cpuTemp = Program.wmi.DeviceGet(ASUSWmi.Temp_CPU);
|
||||
|
||||
if (cpuTemp < 0) try
|
||||
{
|
||||
using (var ct = new PerformanceCounter("Thermal Zone Information", "Temperature", @"\_TZ.THRM", true))
|
||||
{
|
||||
cpuTemp = ct.NextValue() - 273;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Debug.WriteLine("Failed reading CPU temp");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
gpuTemp = GpuControl?.GetCurrentTemperature();
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
gpuTemp = -1;
|
||||
Debug.WriteLine("Failed reading GPU temp");
|
||||
Debug.WriteLine(ex.ToString());
|
||||
}
|
||||
|
||||
if (gpuTemp is null || gpuTemp < 0)
|
||||
gpuTemp = Program.wmi.DeviceGet(ASUSWmi.Temp_GPU);
|
||||
|
||||
try
|
||||
{
|
||||
using (var cb = new PerformanceCounter("Power Meter", "Power", "Power Meter (0)", true))
|
||||
{
|
||||
batteryDischarge = cb.NextValue() / 1000;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Debug.WriteLine("Failed reading Battery discharge");
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsUsedGPU(int threshold = 20)
|
||||
{
|
||||
if (GetGpuUse() > threshold)
|
||||
{
|
||||
Thread.Sleep(1000);
|
||||
return (GetGpuUse() > threshold);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void RecreateGpuControlWithDelay(int delay = 5)
|
||||
{
|
||||
|
||||
// Re-enabling the discrete GPU takes a bit of time,
|
||||
// so a simple workaround is to refresh again after that happens
|
||||
Task.Run(async () =>
|
||||
{
|
||||
await Task.Delay(TimeSpan.FromSeconds(delay));
|
||||
RecreateGpuControl();
|
||||
});
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static void RecreateGpuControl()
|
||||
{
|
||||
try
|
||||
{
|
||||
GpuControl?.Dispose();
|
||||
|
||||
// Detect valid GPU temperature provider.
|
||||
// We start with NVIDIA because there's always at least an integrated AMD GPU
|
||||
IGpuControl _gpuControl = new NvidiaGpuControl();
|
||||
if (_gpuControl.IsValid)
|
||||
{
|
||||
GpuControl = _gpuControl;
|
||||
return;
|
||||
}
|
||||
|
||||
_gpuControl.Dispose();
|
||||
_gpuControl = new AmdGpuControl();
|
||||
if (_gpuControl.IsValid)
|
||||
{
|
||||
GpuControl = _gpuControl;
|
||||
return;
|
||||
}
|
||||
|
||||
_gpuControl.Dispose();
|
||||
|
||||
GpuControl = null;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
39
app/Logger.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using System.Diagnostics;
|
||||
|
||||
public static class Logger
|
||||
{
|
||||
static string appPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\GHelper";
|
||||
static string logFile = appPath + "\\log.txt";
|
||||
|
||||
public static void WriteLine(string logMessage)
|
||||
{
|
||||
Debug.WriteLine(logMessage);
|
||||
if (!Directory.Exists(appPath)) Directory.CreateDirectory(appPath);
|
||||
|
||||
try
|
||||
{
|
||||
using (StreamWriter w = File.AppendText(logFile))
|
||||
{
|
||||
w.WriteLine($"{DateTime.Now}: {logMessage}");
|
||||
w.Close();
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
if (new Random().Next(100) == 1) Cleanup();
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static void Cleanup()
|
||||
{
|
||||
try
|
||||
{
|
||||
var file = File.ReadAllLines(logFile);
|
||||
int skip = Math.Max(0, file.Count() - 500);
|
||||
File.WriteAllLines(logFile, file.Skip(skip).ToArray());
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
}
|
||||
781
app/NativeMethods.cs
Normal file
@@ -0,0 +1,781 @@
|
||||
using GHelper;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
using static Tools.ScreenInterrogatory;
|
||||
|
||||
namespace Tools
|
||||
{
|
||||
|
||||
public class KeyHandler
|
||||
{
|
||||
|
||||
public const int NOMOD = 0x0000;
|
||||
public const int ALT = 0x0001;
|
||||
public const int CTRL = 0x0002;
|
||||
public const int SHIFT = 0x0004;
|
||||
public const int WIN = 0x0008;
|
||||
|
||||
public const int WM_HOTKEY_MSG_ID = 0x0312;
|
||||
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
|
||||
|
||||
private int modifier;
|
||||
private int key;
|
||||
private IntPtr hWnd;
|
||||
private int id;
|
||||
public KeyHandler(int modifier, Keys key, nint handle)
|
||||
{
|
||||
this.modifier = modifier;
|
||||
this.key = (int)key;
|
||||
this.hWnd = handle;
|
||||
id = this.GetHashCode();
|
||||
}
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return modifier ^ key ^ hWnd.ToInt32();
|
||||
}
|
||||
public bool Register()
|
||||
{
|
||||
return RegisterHotKey(hWnd, id, modifier, key);
|
||||
}
|
||||
public bool Unregiser()
|
||||
{
|
||||
return UnregisterHotKey(hWnd, id);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ScreenInterrogatory
|
||||
{
|
||||
public const int ERROR_SUCCESS = 0;
|
||||
|
||||
#region enums
|
||||
|
||||
public enum QUERY_DEVICE_CONFIG_FLAGS : uint
|
||||
{
|
||||
QDC_ALL_PATHS = 0x00000001,
|
||||
QDC_ONLY_ACTIVE_PATHS = 0x00000002,
|
||||
QDC_DATABASE_CURRENT = 0x00000004
|
||||
}
|
||||
|
||||
public enum DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY : uint
|
||||
{
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_OTHER = 0xFFFFFFFF,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HD15 = 0,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SVIDEO = 1,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPOSITE_VIDEO = 2,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPONENT_VIDEO = 3,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DVI = 4,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI = 5,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_LVDS = 6,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_D_JPN = 8,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDI = 9,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EXTERNAL = 10,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED = 11,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EXTERNAL = 12,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EMBEDDED = 13,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDTVDONGLE = 14,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_MIRACAST = 15,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL = 0x80000000,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_FORCE_UINT32 = 0xFFFFFFFF
|
||||
}
|
||||
|
||||
public enum DISPLAYCONFIG_SCANLINE_ORDERING : uint
|
||||
{
|
||||
DISPLAYCONFIG_SCANLINE_ORDERING_UNSPECIFIED = 0,
|
||||
DISPLAYCONFIG_SCANLINE_ORDERING_PROGRESSIVE = 1,
|
||||
DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED = 2,
|
||||
DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_UPPERFIELDFIRST = DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED,
|
||||
DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_LOWERFIELDFIRST = 3,
|
||||
DISPLAYCONFIG_SCANLINE_ORDERING_FORCE_UINT32 = 0xFFFFFFFF
|
||||
}
|
||||
|
||||
public enum DISPLAYCONFIG_ROTATION : uint
|
||||
{
|
||||
DISPLAYCONFIG_ROTATION_IDENTITY = 1,
|
||||
DISPLAYCONFIG_ROTATION_ROTATE90 = 2,
|
||||
DISPLAYCONFIG_ROTATION_ROTATE180 = 3,
|
||||
DISPLAYCONFIG_ROTATION_ROTATE270 = 4,
|
||||
DISPLAYCONFIG_ROTATION_FORCE_UINT32 = 0xFFFFFFFF
|
||||
}
|
||||
|
||||
public enum DISPLAYCONFIG_SCALING : uint
|
||||
{
|
||||
DISPLAYCONFIG_SCALING_IDENTITY = 1,
|
||||
DISPLAYCONFIG_SCALING_CENTERED = 2,
|
||||
DISPLAYCONFIG_SCALING_STRETCHED = 3,
|
||||
DISPLAYCONFIG_SCALING_ASPECTRATIOCENTEREDMAX = 4,
|
||||
DISPLAYCONFIG_SCALING_CUSTOM = 5,
|
||||
DISPLAYCONFIG_SCALING_PREFERRED = 128,
|
||||
DISPLAYCONFIG_SCALING_FORCE_UINT32 = 0xFFFFFFFF
|
||||
}
|
||||
|
||||
public enum DISPLAYCONFIG_PIXELFORMAT : uint
|
||||
{
|
||||
DISPLAYCONFIG_PIXELFORMAT_8BPP = 1,
|
||||
DISPLAYCONFIG_PIXELFORMAT_16BPP = 2,
|
||||
DISPLAYCONFIG_PIXELFORMAT_24BPP = 3,
|
||||
DISPLAYCONFIG_PIXELFORMAT_32BPP = 4,
|
||||
DISPLAYCONFIG_PIXELFORMAT_NONGDI = 5,
|
||||
DISPLAYCONFIG_PIXELFORMAT_FORCE_UINT32 = 0xffffffff
|
||||
}
|
||||
|
||||
public enum DISPLAYCONFIG_MODE_INFO_TYPE : uint
|
||||
{
|
||||
DISPLAYCONFIG_MODE_INFO_TYPE_SOURCE = 1,
|
||||
DISPLAYCONFIG_MODE_INFO_TYPE_TARGET = 2,
|
||||
DISPLAYCONFIG_MODE_INFO_TYPE_FORCE_UINT32 = 0xFFFFFFFF
|
||||
}
|
||||
|
||||
public enum DISPLAYCONFIG_DEVICE_INFO_TYPE : uint
|
||||
{
|
||||
DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME = 1,
|
||||
DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME = 2,
|
||||
DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_PREFERRED_MODE = 3,
|
||||
DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME = 4,
|
||||
DISPLAYCONFIG_DEVICE_INFO_SET_TARGET_PERSISTENCE = 5,
|
||||
DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_BASE_TYPE = 6,
|
||||
DISPLAYCONFIG_DEVICE_INFO_FORCE_UINT32 = 0xFFFFFFFF
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region structs
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct LUID
|
||||
{
|
||||
public uint LowPart;
|
||||
public int HighPart;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct DISPLAYCONFIG_PATH_SOURCE_INFO
|
||||
{
|
||||
public LUID adapterId;
|
||||
public uint id;
|
||||
public uint modeInfoIdx;
|
||||
public uint statusFlags;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct DISPLAYCONFIG_PATH_TARGET_INFO
|
||||
{
|
||||
public LUID adapterId;
|
||||
public uint id;
|
||||
public uint modeInfoIdx;
|
||||
private DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY outputTechnology;
|
||||
private DISPLAYCONFIG_ROTATION rotation;
|
||||
private DISPLAYCONFIG_SCALING scaling;
|
||||
private DISPLAYCONFIG_RATIONAL refreshRate;
|
||||
private DISPLAYCONFIG_SCANLINE_ORDERING scanLineOrdering;
|
||||
public bool targetAvailable;
|
||||
public uint statusFlags;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct DISPLAYCONFIG_RATIONAL
|
||||
{
|
||||
public uint Numerator;
|
||||
public uint Denominator;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct DISPLAYCONFIG_PATH_INFO
|
||||
{
|
||||
public DISPLAYCONFIG_PATH_SOURCE_INFO sourceInfo;
|
||||
public DISPLAYCONFIG_PATH_TARGET_INFO targetInfo;
|
||||
public uint flags;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct DISPLAYCONFIG_2DREGION
|
||||
{
|
||||
public uint cx;
|
||||
public uint cy;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct DISPLAYCONFIG_VIDEO_SIGNAL_INFO
|
||||
{
|
||||
public ulong pixelRate;
|
||||
public DISPLAYCONFIG_RATIONAL hSyncFreq;
|
||||
public DISPLAYCONFIG_RATIONAL vSyncFreq;
|
||||
public DISPLAYCONFIG_2DREGION activeSize;
|
||||
public DISPLAYCONFIG_2DREGION totalSize;
|
||||
public uint videoStandard;
|
||||
public DISPLAYCONFIG_SCANLINE_ORDERING scanLineOrdering;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct DISPLAYCONFIG_TARGET_MODE
|
||||
{
|
||||
public DISPLAYCONFIG_VIDEO_SIGNAL_INFO targetVideoSignalInfo;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct POINTL
|
||||
{
|
||||
private int x;
|
||||
private int y;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct DISPLAYCONFIG_SOURCE_MODE
|
||||
{
|
||||
public uint width;
|
||||
public uint height;
|
||||
public DISPLAYCONFIG_PIXELFORMAT pixelFormat;
|
||||
public POINTL position;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct DISPLAYCONFIG_MODE_INFO_UNION
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
public DISPLAYCONFIG_TARGET_MODE targetMode;
|
||||
|
||||
[FieldOffset(0)]
|
||||
public DISPLAYCONFIG_SOURCE_MODE sourceMode;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct DISPLAYCONFIG_MODE_INFO
|
||||
{
|
||||
public DISPLAYCONFIG_MODE_INFO_TYPE infoType;
|
||||
public uint id;
|
||||
public LUID adapterId;
|
||||
public DISPLAYCONFIG_MODE_INFO_UNION modeInfo;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS
|
||||
{
|
||||
public uint value;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct DISPLAYCONFIG_DEVICE_INFO_HEADER
|
||||
{
|
||||
public DISPLAYCONFIG_DEVICE_INFO_TYPE type;
|
||||
public uint size;
|
||||
public LUID adapterId;
|
||||
public uint id;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
||||
public struct DISPLAYCONFIG_TARGET_DEVICE_NAME
|
||||
{
|
||||
public DISPLAYCONFIG_DEVICE_INFO_HEADER header;
|
||||
public DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS flags;
|
||||
public DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY outputTechnology;
|
||||
public ushort edidManufactureId;
|
||||
public ushort edidProductCodeId;
|
||||
public uint connectorInstance;
|
||||
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
|
||||
public string monitorFriendlyDeviceName;
|
||||
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
|
||||
public string monitorDevicePath;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region DLL-Imports
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int GetDisplayConfigBufferSizes(
|
||||
QUERY_DEVICE_CONFIG_FLAGS flags, out uint numPathArrayElements, out uint numModeInfoArrayElements);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int QueryDisplayConfig(
|
||||
QUERY_DEVICE_CONFIG_FLAGS flags,
|
||||
ref uint numPathArrayElements, [Out] DISPLAYCONFIG_PATH_INFO[] PathInfoArray,
|
||||
ref uint numModeInfoArrayElements, [Out] DISPLAYCONFIG_MODE_INFO[] ModeInfoArray,
|
||||
IntPtr currentTopologyId
|
||||
);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int DisplayConfigGetDeviceInfo(ref DISPLAYCONFIG_TARGET_DEVICE_NAME deviceName);
|
||||
|
||||
#endregion
|
||||
|
||||
private static DISPLAYCONFIG_TARGET_DEVICE_NAME DeviceName(LUID adapterId, uint targetId)
|
||||
{
|
||||
var deviceName = new DISPLAYCONFIG_TARGET_DEVICE_NAME
|
||||
{
|
||||
header =
|
||||
{
|
||||
size = (uint)Marshal.SizeOf(typeof (DISPLAYCONFIG_TARGET_DEVICE_NAME)),
|
||||
adapterId = adapterId,
|
||||
id = targetId,
|
||||
type = DISPLAYCONFIG_DEVICE_INFO_TYPE.DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME
|
||||
}
|
||||
};
|
||||
var error = DisplayConfigGetDeviceInfo(ref deviceName);
|
||||
if (error != ERROR_SUCCESS)
|
||||
throw new Win32Exception(error);
|
||||
|
||||
return deviceName;
|
||||
}
|
||||
|
||||
public static IEnumerable<DISPLAYCONFIG_TARGET_DEVICE_NAME> GetAllDevices()
|
||||
{
|
||||
uint pathCount, modeCount;
|
||||
var error = GetDisplayConfigBufferSizes(QUERY_DEVICE_CONFIG_FLAGS.QDC_ONLY_ACTIVE_PATHS, out pathCount, out modeCount);
|
||||
if (error != ERROR_SUCCESS)
|
||||
throw new Win32Exception(error);
|
||||
|
||||
var displayPaths = new DISPLAYCONFIG_PATH_INFO[pathCount];
|
||||
var displayModes = new DISPLAYCONFIG_MODE_INFO[modeCount];
|
||||
error = QueryDisplayConfig(QUERY_DEVICE_CONFIG_FLAGS.QDC_ONLY_ACTIVE_PATHS,
|
||||
ref pathCount, displayPaths, ref modeCount, displayModes, IntPtr.Zero);
|
||||
if (error != ERROR_SUCCESS)
|
||||
throw new Win32Exception(error);
|
||||
|
||||
for (var i = 0; i < modeCount; i++)
|
||||
if (displayModes[i].infoType == DISPLAYCONFIG_MODE_INFO_TYPE.DISPLAYCONFIG_MODE_INFO_TYPE_TARGET)
|
||||
yield return DeviceName(displayModes[i].adapterId, displayModes[i].id);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class NativeMethods
|
||||
{
|
||||
|
||||
private const int WM_SYSCOMMAND = 0x0112;
|
||||
private const int SC_MONITORPOWER = 0xF170;
|
||||
private const int MONITOR_OFF = 2;
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
|
||||
|
||||
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||
private static extern uint FormatMessage(uint dwFlags, IntPtr lpSource, uint dwMessageId, uint dwLanguageId, out string lpBuffer, uint nSize, IntPtr Arguments);
|
||||
|
||||
public static void TurnOffScreen(IntPtr handle)
|
||||
{
|
||||
IntPtr result = SendMessage(handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)MONITOR_OFF);
|
||||
if (result == IntPtr.Zero)
|
||||
{
|
||||
int error = Marshal.GetLastWin32Error();
|
||||
string message = "";
|
||||
uint formatFlags = 0x00001000 | 0x00000200 | 0x00000100 | 0x00000080;
|
||||
uint formatResult = FormatMessage(formatFlags, IntPtr.Zero, (uint)error, 0, out message, 0, IntPtr.Zero);
|
||||
if (formatResult == 0)
|
||||
{
|
||||
message = "Unknown error.";
|
||||
}
|
||||
Logger.WriteLine($"Failed to turn off screen. Error code: {error}. {message}");
|
||||
}
|
||||
}
|
||||
|
||||
// Monitor Power detection
|
||||
|
||||
internal const uint DEVICE_NOTIFY_WINDOW_HANDLE = 0x0;
|
||||
internal const uint DEVICE_NOTIFY_SERVICE_HANDLE = 0x1;
|
||||
internal const int WM_POWERBROADCAST = 0x0218;
|
||||
internal const int PBT_POWERSETTINGCHANGE = 0x8013;
|
||||
|
||||
[DllImport("User32.dll", SetLastError = true)]
|
||||
internal static extern IntPtr RegisterPowerSettingNotification(IntPtr hWnd, [In] Guid PowerSettingGuid, uint Flags);
|
||||
|
||||
[DllImport("User32.dll", SetLastError = true)]
|
||||
internal static extern bool UnregisterPowerSettingNotification(IntPtr hWnd);
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 4)]
|
||||
internal struct POWERBROADCAST_SETTING
|
||||
{
|
||||
public Guid PowerSetting;
|
||||
public uint DataLength;
|
||||
public byte Data;
|
||||
}
|
||||
|
||||
public class PowerSettingGuid
|
||||
{
|
||||
// 0=Powered by AC, 1=Powered by Battery, 2=Powered by short-term source (UPC)
|
||||
public Guid AcdcPowerSource { get; } = new Guid("5d3e9a59-e9D5-4b00-a6bd-ff34ff516548");
|
||||
// POWERBROADCAST_SETTING.Data = 1-100
|
||||
public Guid BatteryPercentageRemaining { get; } = new Guid("a7ad8041-b45a-4cae-87a3-eecbb468a9e1");
|
||||
// Windows 8+: 0=Monitor Off, 1=Monitor On, 2=Monitor Dimmed
|
||||
public Guid ConsoleDisplayState { get; } = new Guid("6fe69556-704a-47a0-8f24-c28d936fda47");
|
||||
// Windows 8+, Session 0 enabled: 0=User providing Input, 2=User Idle
|
||||
public Guid GlobalUserPresence { get; } = new Guid("786E8A1D-B427-4344-9207-09E70BDCBEA9");
|
||||
// 0=Monitor Off, 1=Monitor On.
|
||||
public Guid MonitorPowerGuid { get; } = new Guid("02731015-4510-4526-99e6-e5a17ebd1aea");
|
||||
// 0=Battery Saver Off, 1=Battery Saver On.
|
||||
public Guid PowerSavingStatus { get; } = new Guid("E00958C0-C213-4ACE-AC77-FECCED2EEEA5");
|
||||
|
||||
// Windows 8+: 0=Off, 1=On, 2=Dimmed
|
||||
public Guid SessionDisplayStatus { get; } = new Guid("2B84C20E-AD23-4ddf-93DB-05FFBD7EFCA5");
|
||||
|
||||
// Windows 8+, no Session 0: 0=User providing Input, 2=User Idle
|
||||
public Guid SessionUserPresence { get; } = new Guid("3C0F4548-C03F-4c4d-B9F2-237EDE686376");
|
||||
// 0=Exiting away mode 1=Entering away mode
|
||||
public Guid SystemAwaymode { get; } = new Guid("98a7f580-01f7-48aa-9c0f-44352c29e5C0");
|
||||
|
||||
/* Windows 8+ */
|
||||
// POWERBROADCAST_SETTING.Data not used
|
||||
public Guid IdleBackgroundTask { get; } = new Guid(0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1);
|
||||
|
||||
public Guid PowerSchemePersonality { get; } = new Guid(0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7);
|
||||
|
||||
// The Following 3 Guids are the POWERBROADCAST_SETTING.Data result of PowerSchemePersonality
|
||||
public Guid MinPowerSavings { get; } = new Guid("8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c");
|
||||
public Guid MaxPowerSavings { get; } = new Guid("a1841308-3541-4fab-bc81-f71556f20b4a");
|
||||
public Guid TypicalPowerSavings { get; } = new Guid("381b4222-f694-41f0-9685-ff5bb260df2e");
|
||||
}
|
||||
|
||||
|
||||
public const int KEYEVENTF_EXTENDEDKEY = 1;
|
||||
public const int KEYEVENTF_KEYUP = 2;
|
||||
|
||||
public const int VK_MEDIA_NEXT_TRACK = 0xB0;
|
||||
public const int VK_MEDIA_PLAY_PAUSE = 0xB3;
|
||||
public const int VK_MEDIA_PREV_TRACK = 0xB1;
|
||||
public const int VK_VOLUME_MUTE = 0xAD;
|
||||
public const int VK_SNAPSHOT = 0x2C;
|
||||
|
||||
[DllImport("user32.dll", SetLastError = true)]
|
||||
public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo);
|
||||
|
||||
public static void KeyPress(int key = VK_MEDIA_PLAY_PAUSE)
|
||||
{
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
}
|
||||
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
|
||||
public const int SW_RESTORE = 9;
|
||||
|
||||
public static bool SwitchToCurrent()
|
||||
{
|
||||
IntPtr hWnd = IntPtr.Zero;
|
||||
Process process = Process.GetCurrentProcess();
|
||||
Process[] processes = Process.GetProcessesByName(process.ProcessName);
|
||||
foreach (Process _process in processes)
|
||||
{
|
||||
if (_process.Id != process.Id)
|
||||
{
|
||||
|
||||
if (_process.MainWindowHandle != IntPtr.Zero)
|
||||
{
|
||||
Debug.WriteLine(_process.Id);
|
||||
Debug.WriteLine(process.Id);
|
||||
|
||||
hWnd = _process.MainWindowHandle;
|
||||
ShowWindowAsync(hWnd, SW_RESTORE);
|
||||
}
|
||||
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
|
||||
static extern UInt32 PowerWriteDCValueIndex(IntPtr RootPowerKey,
|
||||
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid,
|
||||
[MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid,
|
||||
[MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid,
|
||||
int AcValueIndex);
|
||||
|
||||
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
|
||||
static extern UInt32 PowerWriteACValueIndex(IntPtr RootPowerKey,
|
||||
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid,
|
||||
[MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid,
|
||||
[MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid,
|
||||
int AcValueIndex);
|
||||
|
||||
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
|
||||
static extern UInt32 PowerReadACValueIndex(IntPtr RootPowerKey,
|
||||
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid,
|
||||
[MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid,
|
||||
[MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid,
|
||||
out IntPtr AcValueIndex
|
||||
);
|
||||
|
||||
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
|
||||
static extern UInt32 PowerReadDCValueIndex(IntPtr RootPowerKey,
|
||||
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid,
|
||||
[MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid,
|
||||
[MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid,
|
||||
out IntPtr AcValueIndex
|
||||
);
|
||||
|
||||
|
||||
|
||||
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
|
||||
static extern UInt32 PowerSetActiveScheme(IntPtr RootPowerKey,
|
||||
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid);
|
||||
|
||||
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
|
||||
static extern UInt32 PowerGetActiveScheme(IntPtr UserPowerKey, out IntPtr ActivePolicyGuid);
|
||||
|
||||
static readonly Guid GUID_CPU = new Guid("54533251-82be-4824-96c1-47b60b740d00");
|
||||
static readonly Guid GUID_BOOST = new Guid("be337238-0d82-4146-a960-4f3749d470c7");
|
||||
|
||||
[DllImportAttribute("powrprof.dll", EntryPoint = "PowerGetActualOverlayScheme")]
|
||||
public static extern uint PowerGetActualOverlayScheme(out Guid ActualOverlayGuid);
|
||||
|
||||
[DllImportAttribute("powrprof.dll", EntryPoint = "PowerGetEffectiveOverlayScheme")]
|
||||
public static extern uint PowerGetEffectiveOverlayScheme(out Guid EffectiveOverlayGuid);
|
||||
|
||||
[DllImportAttribute("powrprof.dll", EntryPoint = "PowerSetActiveOverlayScheme")]
|
||||
public static extern uint PowerSetActiveOverlayScheme(Guid OverlaySchemeGuid);
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
||||
public struct DEVMODE
|
||||
{
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
|
||||
public string dmDeviceName;
|
||||
|
||||
public short dmSpecVersion;
|
||||
public short dmDriverVersion;
|
||||
public short dmSize;
|
||||
public short dmDriverExtra;
|
||||
public int dmFields;
|
||||
public int dmPositionX;
|
||||
public int dmPositionY;
|
||||
public int dmDisplayOrientation;
|
||||
public int dmDisplayFixedOutput;
|
||||
public short dmColor;
|
||||
public short dmDuplex;
|
||||
public short dmYResolution;
|
||||
public short dmTTOption;
|
||||
public short dmCollate;
|
||||
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
|
||||
public string dmFormName;
|
||||
|
||||
public short dmLogPixels;
|
||||
public short dmBitsPerPel;
|
||||
public int dmPelsWidth;
|
||||
public int dmPelsHeight;
|
||||
public int dmDisplayFlags;
|
||||
public int dmDisplayFrequency;
|
||||
public int dmICMMethod;
|
||||
public int dmICMIntent;
|
||||
public int dmMediaType;
|
||||
public int dmDitherType;
|
||||
public int dmReserved1;
|
||||
public int dmReserved2;
|
||||
public int dmPanningWidth;
|
||||
public int dmPanningHeight;
|
||||
};
|
||||
|
||||
[Flags()]
|
||||
public enum DisplaySettingsFlags : int
|
||||
{
|
||||
CDS_UPDATEREGISTRY = 1,
|
||||
CDS_TEST = 2,
|
||||
CDS_FULLSCREEN = 4,
|
||||
CDS_GLOBAL = 8,
|
||||
CDS_SET_PRIMARY = 0x10,
|
||||
CDS_RESET = 0x40000000,
|
||||
CDS_NORESET = 0x10000000
|
||||
}
|
||||
|
||||
// PInvoke declaration for EnumDisplaySettings Win32 API
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int EnumDisplaySettingsEx(
|
||||
string lpszDeviceName,
|
||||
int iModeNum,
|
||||
ref DEVMODE lpDevMode);
|
||||
|
||||
// PInvoke declaration for ChangeDisplaySettings Win32 API
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int ChangeDisplaySettingsEx(
|
||||
string lpszDeviceName, ref DEVMODE lpDevMode, IntPtr hwnd,
|
||||
DisplaySettingsFlags dwflags, IntPtr lParam);
|
||||
|
||||
public static DEVMODE CreateDevmode()
|
||||
{
|
||||
DEVMODE dm = new DEVMODE();
|
||||
dm.dmDeviceName = new String(new char[32]);
|
||||
dm.dmFormName = new String(new char[32]);
|
||||
dm.dmSize = (short)Marshal.SizeOf(dm);
|
||||
return dm;
|
||||
}
|
||||
|
||||
public const int ENUM_CURRENT_SETTINGS = -1;
|
||||
public const string defaultDevice = "\\\\.\\DISPLAY1";
|
||||
|
||||
public static string FindLaptopScreen()
|
||||
{
|
||||
string laptopScreen = null;
|
||||
|
||||
try
|
||||
{
|
||||
var devices = GetAllDevices().ToArray();
|
||||
int count = 0, displayNum = -1;
|
||||
|
||||
foreach (var device in devices)
|
||||
{
|
||||
if (device.outputTechnology == DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL ||
|
||||
device.outputTechnology == DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED)
|
||||
{
|
||||
displayNum = count;
|
||||
}
|
||||
count++;
|
||||
//Logger.WriteLine(device.outputTechnology.ToString());
|
||||
//Logger.WriteLine(device.monitorFriendlyDeviceName);
|
||||
}
|
||||
|
||||
var screens = Screen.AllScreens;
|
||||
|
||||
if (screens.Length != count) return null;
|
||||
|
||||
count = 0;
|
||||
foreach (var screen in screens)
|
||||
{
|
||||
if (count == displayNum)
|
||||
{
|
||||
laptopScreen = screen.DeviceName;
|
||||
}
|
||||
//Logger.WriteLine(screen.DeviceName);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.ToString());
|
||||
Logger.WriteLine("Can't detect internal screen");
|
||||
//laptopScreen = Screen.PrimaryScreen.DeviceName;
|
||||
}
|
||||
|
||||
|
||||
return laptopScreen;
|
||||
}
|
||||
|
||||
public static int GetRefreshRate(bool max = false)
|
||||
{
|
||||
DEVMODE dm = CreateDevmode();
|
||||
|
||||
string laptopScreen = FindLaptopScreen();
|
||||
int frequency = -1;
|
||||
|
||||
if (laptopScreen is null)
|
||||
return -1;
|
||||
|
||||
if (max)
|
||||
{
|
||||
int i = 0;
|
||||
while (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen, i, ref dm))
|
||||
{
|
||||
if (dm.dmDisplayFrequency > frequency) frequency = dm.dmDisplayFrequency;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm))
|
||||
{
|
||||
frequency = dm.dmDisplayFrequency;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return frequency;
|
||||
}
|
||||
|
||||
public static int SetRefreshRate(int frequency = 120)
|
||||
{
|
||||
DEVMODE dm = CreateDevmode();
|
||||
string laptopScreen = FindLaptopScreen();
|
||||
|
||||
if (laptopScreen is null)
|
||||
return -1;
|
||||
|
||||
if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm))
|
||||
{
|
||||
dm.dmDisplayFrequency = frequency;
|
||||
int iRet = NativeMethods.ChangeDisplaySettingsEx(laptopScreen, ref dm, IntPtr.Zero, DisplaySettingsFlags.CDS_UPDATEREGISTRY, IntPtr.Zero);
|
||||
Logger.WriteLine("Screen = " + frequency.ToString() + "Hz : " + (iRet == 0 ? "OK" : iRet));
|
||||
return iRet;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
static Guid GetActiveScheme()
|
||||
{
|
||||
IntPtr pActiveSchemeGuid;
|
||||
var hr = PowerGetActiveScheme(IntPtr.Zero, out pActiveSchemeGuid);
|
||||
Guid activeSchemeGuid = (Guid)Marshal.PtrToStructure(pActiveSchemeGuid, typeof(Guid));
|
||||
return activeSchemeGuid;
|
||||
}
|
||||
|
||||
public static int GetCPUBoost()
|
||||
{
|
||||
IntPtr AcValueIndex;
|
||||
Guid activeSchemeGuid = GetActiveScheme();
|
||||
|
||||
UInt32 value = PowerReadACValueIndex(IntPtr.Zero,
|
||||
activeSchemeGuid,
|
||||
GUID_CPU,
|
||||
GUID_BOOST, out AcValueIndex);
|
||||
|
||||
return AcValueIndex.ToInt32();
|
||||
|
||||
}
|
||||
|
||||
public static void SetCPUBoost(int boost = 0)
|
||||
{
|
||||
Guid activeSchemeGuid = GetActiveScheme();
|
||||
|
||||
var hrAC = PowerWriteACValueIndex(
|
||||
IntPtr.Zero,
|
||||
activeSchemeGuid,
|
||||
GUID_CPU,
|
||||
GUID_BOOST,
|
||||
boost);
|
||||
|
||||
PowerSetActiveScheme(IntPtr.Zero, activeSchemeGuid);
|
||||
|
||||
var hrDC = PowerWriteDCValueIndex(
|
||||
IntPtr.Zero,
|
||||
activeSchemeGuid,
|
||||
GUID_CPU,
|
||||
GUID_BOOST,
|
||||
boost);
|
||||
|
||||
PowerSetActiveScheme(IntPtr.Zero, activeSchemeGuid);
|
||||
|
||||
Logger.WriteLine("Boost " + boost);
|
||||
}
|
||||
|
||||
public static void SetPowerScheme(string scheme)
|
||||
{
|
||||
PowerSetActiveScheme(IntPtr.Zero, new Guid(scheme));
|
||||
PowerSetActiveOverlayScheme(new Guid(scheme));
|
||||
}
|
||||
|
||||
public static void SetPowerScheme(int mode)
|
||||
{
|
||||
switch (mode)
|
||||
{
|
||||
case 0: // balanced
|
||||
PowerSetActiveOverlayScheme(new Guid("00000000-0000-0000-0000-000000000000"));
|
||||
break;
|
||||
case 1: // turbo
|
||||
PowerSetActiveOverlayScheme(new Guid("ded574b5-45a0-4f42-8737-46345c09c238"));
|
||||
break;
|
||||
case 2: //silent
|
||||
PowerSetActiveOverlayScheme(new Guid("961cc777-2547-4f9d-8174-7d86181b8a7a"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
463
app/OSDBase.cs
Normal file
@@ -0,0 +1,463 @@
|
||||
using System.Drawing.Imaging;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace OSD
|
||||
{
|
||||
|
||||
class OSDNativeForm : NativeWindow, IDisposable
|
||||
{
|
||||
|
||||
private bool _disposed = false;
|
||||
private byte _alpha = 250;
|
||||
private Size _size = new Size(350, 50);
|
||||
private Point _location = new Point(50, 50);
|
||||
|
||||
|
||||
protected virtual void PerformPaint(PaintEventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
protected internal void Invalidate()
|
||||
{
|
||||
this.UpdateLayeredWindow();
|
||||
}
|
||||
private void UpdateLayeredWindow()
|
||||
{
|
||||
Bitmap bitmap1 = new Bitmap(this.Size.Width, this.Size.Height, PixelFormat.Format32bppArgb);
|
||||
using (Graphics graphics1 = Graphics.FromImage(bitmap1))
|
||||
{
|
||||
Rectangle rectangle1;
|
||||
SIZE size1;
|
||||
POINT point1;
|
||||
POINT point2;
|
||||
BLENDFUNCTION blendfunction1;
|
||||
rectangle1 = new Rectangle(0, 0, this.Size.Width, this.Size.Height);
|
||||
PerformPaint(new PaintEventArgs(graphics1, rectangle1));
|
||||
IntPtr ptr1 = User32.GetDC(IntPtr.Zero);
|
||||
IntPtr ptr2 = Gdi32.CreateCompatibleDC(ptr1);
|
||||
IntPtr ptr3 = bitmap1.GetHbitmap(Color.FromArgb(0));
|
||||
IntPtr ptr4 = Gdi32.SelectObject(ptr2, ptr3);
|
||||
size1.cx = this.Size.Width;
|
||||
size1.cy = this.Size.Height;
|
||||
point1.x = this.Location.X;
|
||||
point1.x = this.Location.X;
|
||||
point1.y = this.Location.Y;
|
||||
point2.x = 0;
|
||||
point2.y = 0;
|
||||
blendfunction1 = new BLENDFUNCTION();
|
||||
blendfunction1.BlendOp = 0;
|
||||
blendfunction1.BlendFlags = 0;
|
||||
blendfunction1.SourceConstantAlpha = this._alpha;
|
||||
blendfunction1.AlphaFormat = 1;
|
||||
User32.UpdateLayeredWindow(base.Handle, ptr1, ref point1, ref size1, ptr2, ref point2, 0, ref blendfunction1, 2); //2=ULW_ALPHA
|
||||
Gdi32.SelectObject(ptr2, ptr4);
|
||||
User32.ReleaseDC(IntPtr.Zero, ptr1);
|
||||
Gdi32.DeleteObject(ptr3);
|
||||
Gdi32.DeleteDC(ptr2);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Show()
|
||||
{
|
||||
if (base.Handle == IntPtr.Zero) //if handle don't equal to zero - window was created and just hided
|
||||
this.CreateWindowOnly();
|
||||
User32.ShowWindow(base.Handle, User32.SW_SHOWNOACTIVATE);
|
||||
}
|
||||
|
||||
|
||||
public virtual void Hide()
|
||||
{
|
||||
if (base.Handle == IntPtr.Zero)
|
||||
return;
|
||||
User32.ShowWindow(base.Handle, User32.SW_HIDE);
|
||||
this.DestroyHandle();
|
||||
}
|
||||
|
||||
|
||||
public virtual void Close()
|
||||
{
|
||||
this.Hide();
|
||||
this.Dispose();
|
||||
}
|
||||
|
||||
private void CreateWindowOnly()
|
||||
{
|
||||
|
||||
CreateParams params1 = new CreateParams();
|
||||
params1.Caption = "FloatingNativeWindow";
|
||||
int nX = this._location.X;
|
||||
int nY = this._location.Y;
|
||||
Screen screen1 = Screen.FromHandle(base.Handle);
|
||||
if ((nX + this._size.Width) > screen1.Bounds.Width)
|
||||
{
|
||||
nX = screen1.Bounds.Width - this._size.Width;
|
||||
}
|
||||
if ((nY + this._size.Height) > screen1.Bounds.Height)
|
||||
{
|
||||
nY = screen1.Bounds.Height - this._size.Height;
|
||||
}
|
||||
this._location = new Point(nX, nY);
|
||||
Size size1 = this._size;
|
||||
Point point1 = this._location;
|
||||
params1.X = nX;
|
||||
params1.Y = nY;
|
||||
params1.Height = size1.Height;
|
||||
params1.Width = size1.Width;
|
||||
params1.Parent = IntPtr.Zero;
|
||||
uint ui = User32.WS_POPUP;
|
||||
params1.Style = (int)ui;
|
||||
params1.ExStyle = User32.WS_EX_TOPMOST | User32.WS_EX_TOOLWINDOW | User32.WS_EX_LAYERED | User32.WS_EX_NOACTIVATE | User32.WS_EX_TRANSPARENT;
|
||||
this.CreateHandle(params1);
|
||||
this.UpdateLayeredWindow();
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected virtual void SetBoundsCore(int x, int y, int width, int height)
|
||||
{
|
||||
if (((this.X != x) || (this.Y != y)) || ((this.Width != width) || (this.Height != height)))
|
||||
{
|
||||
if (base.Handle != IntPtr.Zero)
|
||||
{
|
||||
int num1 = 20;
|
||||
if ((this.X == x) && (this.Y == y))
|
||||
{
|
||||
num1 |= 2;
|
||||
}
|
||||
if ((this.Width == width) && (this.Height == height))
|
||||
{
|
||||
num1 |= 1;
|
||||
}
|
||||
User32.SetWindowPos(base.Handle, IntPtr.Zero, x, y, width, height, (uint)num1);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Location = new Point(x, y);
|
||||
this.Size = new Size(width, height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#region # Properties #
|
||||
/// <summary>
|
||||
/// Get or set position of top-left corner of floating native window in screen coordinates
|
||||
/// </summary>
|
||||
public virtual Point Location
|
||||
{
|
||||
get { return this._location; }
|
||||
set
|
||||
{
|
||||
if (base.Handle != IntPtr.Zero)
|
||||
{
|
||||
this.SetBoundsCore(value.X, value.Y, this._size.Width, this._size.Height);
|
||||
RECT rect = new RECT();
|
||||
User32.GetWindowRect(base.Handle, ref rect);
|
||||
this._location = new Point(rect.left, rect.top);
|
||||
this.UpdateLayeredWindow();
|
||||
}
|
||||
else
|
||||
{
|
||||
this._location = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Get or set size of client area of floating native window
|
||||
/// </summary>
|
||||
public virtual Size Size
|
||||
{
|
||||
get { return this._size; }
|
||||
set
|
||||
{
|
||||
if (base.Handle != IntPtr.Zero)
|
||||
{
|
||||
this.SetBoundsCore(this._location.X, this._location.Y, value.Width, value.Height);
|
||||
RECT rect = new RECT();
|
||||
User32.GetWindowRect(base.Handle, ref rect);
|
||||
this._size = new Size(rect.right - rect.left, rect.bottom - rect.top);
|
||||
this.UpdateLayeredWindow();
|
||||
}
|
||||
else
|
||||
{
|
||||
this._size = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the height of the floating native window
|
||||
/// </summary>
|
||||
public int Height
|
||||
{
|
||||
get { return this._size.Height; }
|
||||
set
|
||||
{
|
||||
this._size = new Size(this._size.Width, value);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the width of the floating native window
|
||||
/// </summary>
|
||||
public int Width
|
||||
{
|
||||
get { return this._size.Width; }
|
||||
set
|
||||
{
|
||||
this._size = new Size(value, this._size.Height);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Get or set x-coordinate of top-left corner of floating native window in screen coordinates
|
||||
/// </summary>
|
||||
public int X
|
||||
{
|
||||
get { return this._location.X; }
|
||||
set
|
||||
{
|
||||
this.Location = new Point(value, this.Location.Y);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Get or set y-coordinate of top-left corner of floating native window in screen coordinates
|
||||
/// </summary>
|
||||
public int Y
|
||||
{
|
||||
get { return this._location.Y; }
|
||||
set
|
||||
{
|
||||
this.Location = new Point(this.Location.X, value);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Get rectangle represented client area of floating native window in client coordinates(top-left corner always has coord. 0,0)
|
||||
/// </summary>
|
||||
public Rectangle Bound
|
||||
{
|
||||
get
|
||||
{
|
||||
return new Rectangle(new Point(0, 0), this._size);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Get or set full opacity(255) or full transparency(0) or any intermediate state for floating native window transparency
|
||||
/// </summary>
|
||||
public byte Alpha
|
||||
{
|
||||
get { return this._alpha; }
|
||||
set
|
||||
{
|
||||
if (this._alpha == value) return;
|
||||
this._alpha = value;
|
||||
this.UpdateLayeredWindow();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region IDisposable Members
|
||||
public void Dispose()
|
||||
{
|
||||
this.Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
private void Dispose(bool disposing)
|
||||
{
|
||||
if (!this._disposed)
|
||||
{
|
||||
this.DestroyHandle();
|
||||
this._disposed = true;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
#region # Win32 #
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct POINT
|
||||
{
|
||||
public int x;
|
||||
public int y;
|
||||
}
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct RECT
|
||||
{
|
||||
public int left;
|
||||
public int top;
|
||||
public int right;
|
||||
public int bottom;
|
||||
}
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct SIZE
|
||||
{
|
||||
public int cx;
|
||||
public int cy;
|
||||
}
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct TRACKMOUSEEVENTS
|
||||
{
|
||||
public uint cbSize;
|
||||
public uint dwFlags;
|
||||
public IntPtr hWnd;
|
||||
public uint dwHoverTime;
|
||||
}
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct MSG
|
||||
{
|
||||
public IntPtr hwnd;
|
||||
public int message;
|
||||
public IntPtr wParam;
|
||||
public IntPtr lParam;
|
||||
public int time;
|
||||
public int pt_x;
|
||||
public int pt_y;
|
||||
}
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
internal struct BLENDFUNCTION
|
||||
{
|
||||
public byte BlendOp;
|
||||
public byte BlendFlags;
|
||||
public byte SourceConstantAlpha;
|
||||
public byte AlphaFormat;
|
||||
}
|
||||
internal class User32
|
||||
{
|
||||
public const uint WS_POPUP = 0x80000000;
|
||||
public const int WS_EX_TOPMOST = 0x8;
|
||||
public const int WS_EX_TOOLWINDOW = 0x80;
|
||||
public const int WS_EX_LAYERED = 0x80000;
|
||||
public const int WS_EX_TRANSPARENT = 0x20;
|
||||
public const int WS_EX_NOACTIVATE = 0x08000000;
|
||||
public const int SW_SHOWNOACTIVATE = 4;
|
||||
public const int SW_HIDE = 0;
|
||||
public const uint AW_HOR_POSITIVE = 0x1;
|
||||
public const uint AW_HOR_NEGATIVE = 0x2;
|
||||
public const uint AW_VER_POSITIVE = 0x4;
|
||||
public const uint AW_VER_NEGATIVE = 0x8;
|
||||
public const uint AW_CENTER = 0x10;
|
||||
public const uint AW_HIDE = 0x10000;
|
||||
public const uint AW_ACTIVATE = 0x20000;
|
||||
public const uint AW_SLIDE = 0x40000;
|
||||
public const uint AW_BLEND = 0x80000;
|
||||
// Methods
|
||||
private User32()
|
||||
{
|
||||
}
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool AnimateWindow(IntPtr hWnd, uint dwTime, uint dwFlags);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool ClientToScreen(IntPtr hWnd, ref POINT pt);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool DispatchMessage(ref MSG msg);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool DrawFocusRect(IntPtr hWnd, ref RECT rect);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern IntPtr GetDC(IntPtr hWnd);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern IntPtr GetFocus();
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern ushort GetKeyState(int virtKey);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool GetMessage(ref MSG msg, int hWnd, uint wFilterMin, uint wFilterMax);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern IntPtr GetParent(IntPtr hWnd);
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
|
||||
public static extern bool GetClientRect(IntPtr hWnd, [In, Out] ref RECT rect);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern int GetWindowLong(IntPtr hWnd, int nIndex);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern IntPtr GetWindow(IntPtr hWnd, int cmd);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool GetWindowRect(IntPtr hWnd, ref RECT rect);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool HideCaret(IntPtr hWnd);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool InvalidateRect(IntPtr hWnd, ref RECT rect, bool erase);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern IntPtr LoadCursor(IntPtr hInstance, uint cursor);
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
|
||||
public static extern int MapWindowPoints(IntPtr hWndFrom, IntPtr hWndTo, [In, Out] ref RECT rect, int cPoints);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool MoveWindow(IntPtr hWnd, int x, int y, int width, int height, bool repaint);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool PeekMessage(ref MSG msg, int hWnd, uint wFilterMin, uint wFilterMax, uint wFlag);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool PostMessage(IntPtr hWnd, int Msg, uint wParam, uint lParam);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool ReleaseCapture();
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool ScreenToClient(IntPtr hWnd, ref POINT pt);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern uint SendMessage(IntPtr hWnd, int Msg, uint wParam, uint lParam);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern IntPtr SetCursor(IntPtr hCursor);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern IntPtr SetFocus(IntPtr hWnd);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern int SetWindowLong(IntPtr hWnd, int nIndex, int newLong);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern int SetWindowPos(IntPtr hWnd, IntPtr hWndAfter, int X, int Y, int Width, int Height, uint flags);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool SetWindowRgn(IntPtr hWnd, IntPtr hRgn, bool redraw);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool ShowCaret(IntPtr hWnd);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool SetCapture(IntPtr hWnd);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern int ShowWindow(IntPtr hWnd, short cmdShow);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref int bRetValue, uint fWinINI);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool TrackMouseEvent(ref TRACKMOUSEEVENTS tme);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool TranslateMessage(ref MSG msg);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, ref POINT pptDst, ref SIZE psize, IntPtr hdcSrc, ref POINT pprSrc, int crKey, ref BLENDFUNCTION pblend, int dwFlags);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool UpdateWindow(IntPtr hwnd);
|
||||
[DllImport("User32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool WaitMessage();
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
|
||||
public static extern bool AdjustWindowRectEx(ref RECT lpRect, int dwStyle, bool bMenu, int dwExStyle);
|
||||
}
|
||||
|
||||
internal class Gdi32
|
||||
{
|
||||
// Methods
|
||||
private Gdi32()
|
||||
{
|
||||
}
|
||||
[DllImport("gdi32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern int CombineRgn(IntPtr dest, IntPtr src1, IntPtr src2, int flags);
|
||||
[DllImport("gdi32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern IntPtr CreateBrushIndirect(ref LOGBRUSH brush);
|
||||
[DllImport("gdi32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern IntPtr CreateCompatibleDC(IntPtr hDC);
|
||||
[DllImport("gdi32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern IntPtr CreateRectRgnIndirect(ref RECT rect);
|
||||
[DllImport("gdi32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool DeleteDC(IntPtr hDC);
|
||||
[DllImport("gdi32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern IntPtr DeleteObject(IntPtr hObject);
|
||||
[DllImport("gdi32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern int GetClipBox(IntPtr hDC, ref RECT rectBox);
|
||||
[DllImport("gdi32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern bool PatBlt(IntPtr hDC, int x, int y, int width, int height, uint flags);
|
||||
[DllImport("gdi32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern int SelectClipRgn(IntPtr hDC, IntPtr hRgn);
|
||||
[DllImport("gdi32.dll", CharSet = CharSet.Auto)]
|
||||
internal static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject);
|
||||
}
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct LOGBRUSH
|
||||
{
|
||||
public uint lbStyle;
|
||||
public uint lbColor;
|
||||
public uint lbHatch;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
357
app/Program.cs
Normal file
@@ -0,0 +1,357 @@
|
||||
using Microsoft.Win32;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.Management;
|
||||
using System.Reflection;
|
||||
using System.Security.Principal;
|
||||
using Tools;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
public static NotifyIcon trayIcon = new NotifyIcon
|
||||
{
|
||||
Text = "G-Helper",
|
||||
Icon = Properties.Resources.standard,
|
||||
Visible = true
|
||||
};
|
||||
|
||||
public static ASUSWmi? wmi;
|
||||
public static AppConfig config = new AppConfig();
|
||||
|
||||
public static SettingsForm settingsForm = new SettingsForm();
|
||||
public static ToastForm toast = new ToastForm();
|
||||
|
||||
public static IntPtr unRegPowerNotify;
|
||||
|
||||
private static long lastAuto;
|
||||
private static long lastTheme;
|
||||
private static PowerLineStatus isPlugged = PowerLineStatus.Unknown;
|
||||
|
||||
|
||||
static void CheckProcesses()
|
||||
{
|
||||
Process currentProcess = Process.GetCurrentProcess();
|
||||
Process[] processes = Process.GetProcessesByName(currentProcess.ProcessName);
|
||||
|
||||
if (processes.Length > 1)
|
||||
{
|
||||
foreach (Process process in processes)
|
||||
if (process.Id != currentProcess.Id)
|
||||
try
|
||||
{
|
||||
process.Kill();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.ToString());
|
||||
MessageBox.Show(Properties.Strings.AppAlreadyRunningText, Properties.Strings.AppAlreadyRunning, MessageBoxButtons.OK);
|
||||
Application.Exit();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static bool IsUserAdministrator()
|
||||
{
|
||||
WindowsIdentity identity = WindowsIdentity.GetCurrent();
|
||||
WindowsPrincipal principal = new WindowsPrincipal(identity);
|
||||
return principal.IsInRole(WindowsBuiltInRole.Administrator);
|
||||
}
|
||||
|
||||
public static void RunAsAdmin()
|
||||
{
|
||||
// Check if the current user is an administrator
|
||||
if (!IsUserAdministrator())
|
||||
{
|
||||
ProcessStartInfo startInfo = new ProcessStartInfo();
|
||||
startInfo.UseShellExecute = true;
|
||||
startInfo.WorkingDirectory = Environment.CurrentDirectory;
|
||||
startInfo.FileName = Application.ExecutablePath;
|
||||
startInfo.Verb = "runas";
|
||||
Process.Start(startInfo);
|
||||
//Application.Exit();
|
||||
}
|
||||
}
|
||||
|
||||
// The main entry point for the application
|
||||
public static void Main()
|
||||
{
|
||||
|
||||
Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture;
|
||||
Debug.WriteLine(CultureInfo.CurrentUICulture);
|
||||
|
||||
//Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("es");
|
||||
|
||||
CheckProcesses();
|
||||
|
||||
try
|
||||
{
|
||||
wmi = new ASUSWmi();
|
||||
}
|
||||
catch
|
||||
{
|
||||
DialogResult dialogResult = MessageBox.Show(Properties.Strings.ACPIError, Properties.Strings.StartupError, MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
Process.Start(new ProcessStartInfo("https://www.asus.com/support/FAQ/1047338/") { UseShellExecute = true });
|
||||
}
|
||||
|
||||
Application.Exit();
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
Logger.WriteLine("------------");
|
||||
Logger.WriteLine("App launched: " + config.GetModel() + " :" + Assembly.GetExecutingAssembly().GetName().Version.ToString());
|
||||
|
||||
Application.EnableVisualStyles();
|
||||
|
||||
var ds = settingsForm.Handle;
|
||||
|
||||
trayIcon.MouseClick += TrayIcon_MouseClick;
|
||||
|
||||
wmi.SubscribeToEvents(WatcherEventArrived);
|
||||
|
||||
settingsForm.InitAura();
|
||||
settingsForm.InitMatrix();
|
||||
|
||||
settingsForm.SetStartupCheck(Startup.IsScheduled());
|
||||
|
||||
SetAutoModes();
|
||||
|
||||
HardwareMonitor.RecreateGpuControl();
|
||||
|
||||
// Subscribing for system power change events
|
||||
SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
|
||||
SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged;
|
||||
|
||||
// Subscribing for monitor power on events
|
||||
var settingGuid = new NativeMethods.PowerSettingGuid();
|
||||
unRegPowerNotify = NativeMethods.RegisterPowerSettingNotification(ds, settingGuid.ConsoleDisplayState, NativeMethods.DEVICE_NOTIFY_WINDOW_HANDLE);
|
||||
|
||||
// CTRL + SHIFT + F5 to cycle profiles
|
||||
var ghk = new KeyHandler(KeyHandler.SHIFT | KeyHandler.CTRL, Keys.F5, ds);
|
||||
ghk.Register();
|
||||
|
||||
if (Environment.CurrentDirectory.Trim('\\') == Application.StartupPath.Trim('\\'))
|
||||
{
|
||||
SettingsToggle();
|
||||
}
|
||||
|
||||
Application.Run();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e)
|
||||
{
|
||||
|
||||
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastTheme) < 2000) return;
|
||||
|
||||
switch (e.Category)
|
||||
{
|
||||
case UserPreferenceCategory.General:
|
||||
bool changed = settingsForm.InitTheme();
|
||||
if (changed)
|
||||
{
|
||||
Debug.WriteLine("Theme Changed");
|
||||
lastTheme = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
||||
}
|
||||
|
||||
if (settingsForm.fans is not null && settingsForm.fans.Text != "")
|
||||
settingsForm.fans.InitTheme();
|
||||
|
||||
if (settingsForm.keyb is not null && settingsForm.keyb.Text != "")
|
||||
settingsForm.keyb.InitTheme();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static void SetAutoModes(bool monitor = true)
|
||||
{
|
||||
|
||||
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastAuto) < 3000) return;
|
||||
lastAuto = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
||||
|
||||
isPlugged = SystemInformation.PowerStatus.PowerLineStatus;
|
||||
Logger.WriteLine("AutoSetting for " + isPlugged.ToString());
|
||||
|
||||
settingsForm.SetBatteryChargeLimit(config.getConfig("charge_limit"));
|
||||
settingsForm.AutoPerformance();
|
||||
|
||||
bool switched = false;
|
||||
if (monitor) switched = settingsForm.AutoGPUMode();
|
||||
|
||||
if (!switched)
|
||||
{
|
||||
settingsForm.InitGPUMode();
|
||||
settingsForm.AutoScreen();
|
||||
}
|
||||
|
||||
settingsForm.AutoKeyboard();
|
||||
settingsForm.SetMatrix();
|
||||
}
|
||||
|
||||
private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
|
||||
{
|
||||
if (SystemInformation.PowerStatus.PowerLineStatus == isPlugged) return;
|
||||
|
||||
Logger.WriteLine("Windows - Power Mode Changed");
|
||||
SetAutoModes();
|
||||
}
|
||||
|
||||
|
||||
static void LaunchProcess(string command = "")
|
||||
{
|
||||
string executable = command.Split(' ')[0];
|
||||
string arguments = command.Substring(executable.Length).Trim();
|
||||
|
||||
try
|
||||
{
|
||||
Process proc = Process.Start(executable, arguments);
|
||||
}
|
||||
catch
|
||||
{
|
||||
Logger.WriteLine("Failed to run " + command);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
static void CustomKey(string configKey = "m3")
|
||||
{
|
||||
string command = config.getConfigString(configKey + "_custom");
|
||||
int intKey;
|
||||
|
||||
try
|
||||
{
|
||||
intKey = Convert.ToInt32(command, 16);
|
||||
}
|
||||
catch
|
||||
{
|
||||
intKey = -1;
|
||||
}
|
||||
|
||||
|
||||
if (intKey > 0)
|
||||
NativeMethods.KeyPress(intKey);
|
||||
else
|
||||
LaunchProcess(command);
|
||||
|
||||
}
|
||||
|
||||
static void KeyProcess(string name = "m3")
|
||||
{
|
||||
string action = config.getConfigString(name);
|
||||
|
||||
if (action is null || action.Length <= 1)
|
||||
{
|
||||
if (name == "m4")
|
||||
action = "performance";
|
||||
if (name == "fnf4")
|
||||
action = "aura";
|
||||
}
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case "mute":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_VOLUME_MUTE);
|
||||
break;
|
||||
case "play":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_MEDIA_PLAY_PAUSE);
|
||||
break;
|
||||
case "screenshot":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_SNAPSHOT);
|
||||
break;
|
||||
case "screen":
|
||||
NativeMethods.TurnOffScreen(Program.settingsForm.Handle);
|
||||
break;
|
||||
case "miniled":
|
||||
settingsForm.BeginInvoke(settingsForm.ToogleMiniled);
|
||||
break;
|
||||
case "aura":
|
||||
settingsForm.BeginInvoke(settingsForm.CycleAuraMode);
|
||||
break;
|
||||
case "performance":
|
||||
settingsForm.BeginInvoke(settingsForm.CyclePerformanceMode);
|
||||
break;
|
||||
case "ghelper":
|
||||
settingsForm.BeginInvoke(SettingsToggle);
|
||||
break;
|
||||
case "custom":
|
||||
CustomKey(name);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void WatcherEventArrived(object sender, EventArrivedEventArgs e)
|
||||
{
|
||||
var collection = (ManagementEventWatcher)sender;
|
||||
|
||||
if (e.NewEvent is null) return;
|
||||
|
||||
int EventID = int.Parse(e.NewEvent["EventID"].ToString());
|
||||
|
||||
Logger.WriteLine("WMI event " + EventID);
|
||||
|
||||
switch (EventID)
|
||||
{
|
||||
case 124: // M3
|
||||
KeyProcess("m3");
|
||||
return;
|
||||
case 56: // M4 / Rog button
|
||||
KeyProcess("m4");
|
||||
return;
|
||||
case 174: // FN+F5
|
||||
settingsForm.BeginInvoke(settingsForm.CyclePerformanceMode);
|
||||
return;
|
||||
case 179: // FN+F4
|
||||
KeyProcess("fnf4");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
static void SettingsToggle()
|
||||
{
|
||||
if (settingsForm.Visible)
|
||||
settingsForm.Hide();
|
||||
else
|
||||
{
|
||||
settingsForm.Show();
|
||||
settingsForm.Activate();
|
||||
}
|
||||
|
||||
settingsForm.VisualiseGPUMode();
|
||||
|
||||
}
|
||||
|
||||
static void TrayIcon_MouseClick(object? sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Right)
|
||||
{
|
||||
SettingsToggle();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void OnExit(object sender, EventArgs e)
|
||||
{
|
||||
trayIcon.Visible = false;
|
||||
NativeMethods.UnregisterPowerSettingNotification(unRegPowerNotify);
|
||||
Application.Exit();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
383
app/Properties/Resources.Designer.cs
generated
Normal file
@@ -0,0 +1,383 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace GHelper.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GHelper.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||
/// </summary>
|
||||
internal static System.Drawing.Icon eco {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("eco", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap everything_is_fine_itsfine {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("everything-is-fine-itsfine", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_balance_symbol_96 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-balance-symbol-96", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_bicycle_48__1_ {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-bicycle-48 (1)", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_charging_battery_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-charging-battery-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_fan_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-fan-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_fan_head_96 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-fan-head-96", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_fan_speed_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-fan-speed-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_fiat_500_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-fiat-500-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_game_controller_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-game-controller-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_help_64 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-help-64", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_keyboard_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-keyboard-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_laptop_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-laptop-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_launch_96 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-launch-96", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_leaf_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-leaf-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_leaf_96 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-leaf-96", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_matrix_desktop_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-matrix-desktop-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_organic_food_96 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-organic-food-96", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_organic_food_961 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-organic-food-961", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_processor_96 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-processor-96", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_project_management_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-project-management-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_project_management_48__1_ {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-project-management-48 (1)", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_rocket_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-rocket-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_spa_flower_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-spa-flower-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_spa_flower_96 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-spa-flower-96", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_speed_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-speed-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_speed_96 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-speed-96", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_video_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8_video_48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_video_card_48 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-video-card-48", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_xbox_controller_96 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-xbox-controller-96", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||
/// </summary>
|
||||
internal static System.Drawing.Icon standard {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("standard", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||
/// </summary>
|
||||
internal static System.Drawing.Icon ultimate {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ultimate", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
217
app/Properties/Resources.resx
Normal file
@@ -0,0 +1,217 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="icons8-leaf-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-leaf-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-launch-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-launch-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-charging-battery-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-charging-battery-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-organic-food-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-organic-food-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-fiat-500-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-fiat-500-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-project-management-48 (1)" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-project-management-48 (1).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-bicycle-48 (1)" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-bicycle-48 (1).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-game-controller-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-game-controller-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-fan-head-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-fan-head-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-processor-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-processor-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-spa-flower-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-spa-flower-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-spa-flower-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-spa-flower-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="standard" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\standard.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-keyboard-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-keyboard-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-fan-speed-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-fan-speed-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-speed-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-speed-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="eco" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\eco.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-laptop-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-laptop-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-video-card-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-video-card-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-organic-food-961" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-organic-food-961.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-balance-symbol-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-balance-symbol-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-fan-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-fan-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-matrix-desktop-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-matrix-desktop-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-xbox-controller-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-xbox-controller-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-project-management-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-project-management-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-leaf-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-leaf-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ultimate" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ultimate.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-rocket-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-rocket-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-speed-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-speed-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="everything-is-fine-itsfine" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\itsfine.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-help-64" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-help-64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8_video_48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-video-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
963
app/Properties/Strings.Designer.cs
generated
Normal file
@@ -0,0 +1,963 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace GHelper.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Strings {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Strings() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GHelper.Properties.Strings", typeof(Strings).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Can't connect to ASUS ACPI. Application can't function without it. Try to install Asus System Control Interface.
|
||||
/// </summary>
|
||||
internal static string ACPIError {
|
||||
get {
|
||||
return ResourceManager.GetString("ACPIError", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Looks like GPU is in heavy use, disable it?.
|
||||
/// </summary>
|
||||
internal static string AlertDGPU {
|
||||
get {
|
||||
return ResourceManager.GetString("AlertDGPU", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Eco Mode.
|
||||
/// </summary>
|
||||
internal static string AlertDGPUTitle {
|
||||
get {
|
||||
return ResourceManager.GetString("AlertDGPUTitle", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Switching off Ultimate Mode requires restart.
|
||||
/// </summary>
|
||||
internal static string AlertUltimateOff {
|
||||
get {
|
||||
return ResourceManager.GetString("AlertUltimateOff", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Ultimate Mode requires restart.
|
||||
/// </summary>
|
||||
internal static string AlertUltimateOn {
|
||||
get {
|
||||
return ResourceManager.GetString("AlertUltimateOn", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Reboot now?.
|
||||
/// </summary>
|
||||
internal static string AlertUltimateTitle {
|
||||
get {
|
||||
return ResourceManager.GetString("AlertUltimateTitle", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Animation Speed.
|
||||
/// </summary>
|
||||
internal static string AnimationSpeed {
|
||||
get {
|
||||
return ResourceManager.GetString("AnimationSpeed", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Anime Matrix.
|
||||
/// </summary>
|
||||
internal static string AnimeMatrix {
|
||||
get {
|
||||
return ResourceManager.GetString("AnimeMatrix", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to App already running.
|
||||
/// </summary>
|
||||
internal static string AppAlreadyRunning {
|
||||
get {
|
||||
return ResourceManager.GetString("AppAlreadyRunning", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to G-Helper is already running. Check system tray for an icon..
|
||||
/// </summary>
|
||||
internal static string AppAlreadyRunningText {
|
||||
get {
|
||||
return ResourceManager.GetString("AppAlreadyRunningText", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Apply Custom Fan Curve.
|
||||
/// </summary>
|
||||
internal static string ApplyFanCurve {
|
||||
get {
|
||||
return ResourceManager.GetString("ApplyFanCurve", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Apply Power Limits.
|
||||
/// </summary>
|
||||
internal static string ApplyPowerLimits {
|
||||
get {
|
||||
return ResourceManager.GetString("ApplyPowerLimits", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Breathe.
|
||||
/// </summary>
|
||||
internal static string AuraBreathe {
|
||||
get {
|
||||
return ResourceManager.GetString("AuraBreathe", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Color Cycle.
|
||||
/// </summary>
|
||||
internal static string AuraColorCycle {
|
||||
get {
|
||||
return ResourceManager.GetString("AuraColorCycle", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Fast.
|
||||
/// </summary>
|
||||
internal static string AuraFast {
|
||||
get {
|
||||
return ResourceManager.GetString("AuraFast", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Normal.
|
||||
/// </summary>
|
||||
internal static string AuraNormal {
|
||||
get {
|
||||
return ResourceManager.GetString("AuraNormal", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Rainbow.
|
||||
/// </summary>
|
||||
internal static string AuraRainbow {
|
||||
get {
|
||||
return ResourceManager.GetString("AuraRainbow", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Slow.
|
||||
/// </summary>
|
||||
internal static string AuraSlow {
|
||||
get {
|
||||
return ResourceManager.GetString("AuraSlow", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Static.
|
||||
/// </summary>
|
||||
internal static string AuraStatic {
|
||||
get {
|
||||
return ResourceManager.GetString("AuraStatic", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Strobe.
|
||||
/// </summary>
|
||||
internal static string AuraStrobe {
|
||||
get {
|
||||
return ResourceManager.GetString("AuraStrobe", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Auto.
|
||||
/// </summary>
|
||||
internal static string AutoMode {
|
||||
get {
|
||||
return ResourceManager.GetString("AutoMode", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Sets 60Hz to save battery, and back when plugged.
|
||||
/// </summary>
|
||||
internal static string AutoRefreshTooltip {
|
||||
get {
|
||||
return ResourceManager.GetString("AutoRefreshTooltip", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Awake.
|
||||
/// </summary>
|
||||
internal static string Awake {
|
||||
get {
|
||||
return ResourceManager.GetString("Awake", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Balanced.
|
||||
/// </summary>
|
||||
internal static string Balanced {
|
||||
get {
|
||||
return ResourceManager.GetString("Balanced", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Battery Charge Limit.
|
||||
/// </summary>
|
||||
internal static string BatteryChargeLimit {
|
||||
get {
|
||||
return ResourceManager.GetString("BatteryChargeLimit", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Boot.
|
||||
/// </summary>
|
||||
internal static string Boot {
|
||||
get {
|
||||
return ResourceManager.GetString("Boot", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Brightness.
|
||||
/// </summary>
|
||||
internal static string Brightness {
|
||||
get {
|
||||
return ResourceManager.GetString("Brightness", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Color.
|
||||
/// </summary>
|
||||
internal static string Color {
|
||||
get {
|
||||
return ResourceManager.GetString("Color", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to CPU Boost.
|
||||
/// </summary>
|
||||
internal static string CPUBoost {
|
||||
get {
|
||||
return ResourceManager.GetString("CPUBoost", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Custom.
|
||||
/// </summary>
|
||||
internal static string Custom {
|
||||
get {
|
||||
return ResourceManager.GetString("Custom", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Default.
|
||||
/// </summary>
|
||||
internal static string Default {
|
||||
get {
|
||||
return ResourceManager.GetString("Default", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Disable screen overdrive.
|
||||
/// </summary>
|
||||
internal static string DisableOverdrive {
|
||||
get {
|
||||
return ResourceManager.GetString("DisableOverdrive", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Discharging.
|
||||
/// </summary>
|
||||
internal static string Discharging {
|
||||
get {
|
||||
return ResourceManager.GetString("Discharging", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Download Update.
|
||||
/// </summary>
|
||||
internal static string DownloadUpdate {
|
||||
get {
|
||||
return ResourceManager.GetString("DownloadUpdate", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Disables dGPU for battery savings.
|
||||
/// </summary>
|
||||
internal static string EcoGPUTooltip {
|
||||
get {
|
||||
return ResourceManager.GetString("EcoGPUTooltip", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Eco.
|
||||
/// </summary>
|
||||
internal static string EcoMode {
|
||||
get {
|
||||
return ResourceManager.GetString("EcoMode", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Extra.
|
||||
/// </summary>
|
||||
internal static string Extra {
|
||||
get {
|
||||
return ResourceManager.GetString("Extra", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Extra Settings.
|
||||
/// </summary>
|
||||
internal static string ExtraSettings {
|
||||
get {
|
||||
return ResourceManager.GetString("ExtraSettings", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Factory Defaults.
|
||||
/// </summary>
|
||||
internal static string FactoryDefaults {
|
||||
get {
|
||||
return ResourceManager.GetString("FactoryDefaults", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Fan Curves.
|
||||
/// </summary>
|
||||
internal static string FanCurves {
|
||||
get {
|
||||
return ResourceManager.GetString("FanCurves", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to CPU Fan Profile.
|
||||
/// </summary>
|
||||
internal static string FanProfileCPU {
|
||||
get {
|
||||
return ResourceManager.GetString("FanProfileCPU", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to GPU Fan Profile.
|
||||
/// </summary>
|
||||
internal static string FanProfileGPU {
|
||||
get {
|
||||
return ResourceManager.GetString("FanProfileGPU", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Mid Fan Profile.
|
||||
/// </summary>
|
||||
internal static string FanProfileMid {
|
||||
get {
|
||||
return ResourceManager.GetString("FanProfileMid", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Fan Profiles.
|
||||
/// </summary>
|
||||
internal static string FanProfiles {
|
||||
get {
|
||||
return ResourceManager.GetString("FanProfiles", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Fans and Power.
|
||||
/// </summary>
|
||||
internal static string FansAndPower {
|
||||
get {
|
||||
return ResourceManager.GetString("FansAndPower", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Fans + Power.
|
||||
/// </summary>
|
||||
internal static string FansPower {
|
||||
get {
|
||||
return ResourceManager.GetString("FansPower", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Changing.
|
||||
/// </summary>
|
||||
internal static string GPUChanging {
|
||||
get {
|
||||
return ResourceManager.GetString("GPUChanging", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to GPU Mode.
|
||||
/// </summary>
|
||||
internal static string GPUMode {
|
||||
get {
|
||||
return ResourceManager.GetString("GPUMode", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to iGPU only.
|
||||
/// </summary>
|
||||
internal static string GPUModeEco {
|
||||
get {
|
||||
return ResourceManager.GetString("GPUModeEco", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to iGPU + dGPU.
|
||||
/// </summary>
|
||||
internal static string GPUModeStandard {
|
||||
get {
|
||||
return ResourceManager.GetString("GPUModeStandard", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to dGPU exclusive.
|
||||
/// </summary>
|
||||
internal static string GPUModeUltimate {
|
||||
get {
|
||||
return ResourceManager.GetString("GPUModeUltimate", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Key Bindings.
|
||||
/// </summary>
|
||||
internal static string KeyBindings {
|
||||
get {
|
||||
return ResourceManager.GetString("KeyBindings", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Keyboard.
|
||||
/// </summary>
|
||||
internal static string Keyboard {
|
||||
get {
|
||||
return ResourceManager.GetString("Keyboard", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Lower backlight brightness on battery and back when plugged.
|
||||
/// </summary>
|
||||
internal static string KeyboardAuto {
|
||||
get {
|
||||
return ResourceManager.GetString("KeyboardAuto", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Keyboard Backlight.
|
||||
/// </summary>
|
||||
internal static string KeyboardBacklight {
|
||||
get {
|
||||
return ResourceManager.GetString("KeyboardBacklight", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Laptop Keyboard.
|
||||
/// </summary>
|
||||
internal static string LaptopKeyboard {
|
||||
get {
|
||||
return ResourceManager.GetString("LaptopKeyboard", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Laptop Screen.
|
||||
/// </summary>
|
||||
internal static string LaptopScreen {
|
||||
get {
|
||||
return ResourceManager.GetString("LaptopScreen", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Binary Banner.
|
||||
/// </summary>
|
||||
internal static string MatrixBanner {
|
||||
get {
|
||||
return ResourceManager.GetString("MatrixBanner", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Bright.
|
||||
/// </summary>
|
||||
internal static string MatrixBright {
|
||||
get {
|
||||
return ResourceManager.GetString("MatrixBright", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Clock.
|
||||
/// </summary>
|
||||
internal static string MatrixClock {
|
||||
get {
|
||||
return ResourceManager.GetString("MatrixClock", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Dim.
|
||||
/// </summary>
|
||||
internal static string MatrixDim {
|
||||
get {
|
||||
return ResourceManager.GetString("MatrixDim", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Rog Logo.
|
||||
/// </summary>
|
||||
internal static string MatrixLogo {
|
||||
get {
|
||||
return ResourceManager.GetString("MatrixLogo", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Medium.
|
||||
/// </summary>
|
||||
internal static string MatrixMedium {
|
||||
get {
|
||||
return ResourceManager.GetString("MatrixMedium", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Off.
|
||||
/// </summary>
|
||||
internal static string MatrixOff {
|
||||
get {
|
||||
return ResourceManager.GetString("MatrixOff", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Picture.
|
||||
/// </summary>
|
||||
internal static string MatrixPicture {
|
||||
get {
|
||||
return ResourceManager.GetString("MatrixPicture", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Max refresh rate for lower latency.
|
||||
/// </summary>
|
||||
internal static string MaxRefreshTooltip {
|
||||
get {
|
||||
return ResourceManager.GetString("MaxRefreshTooltip", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to 60Hz refresh rate to save battery.
|
||||
/// </summary>
|
||||
internal static string MinRefreshTooltip {
|
||||
get {
|
||||
return ResourceManager.GetString("MinRefreshTooltip", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Multizone.
|
||||
/// </summary>
|
||||
internal static string Multizone {
|
||||
get {
|
||||
return ResourceManager.GetString("Multizone", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Open G-Helper window.
|
||||
/// </summary>
|
||||
internal static string OpenGHelper {
|
||||
get {
|
||||
return ResourceManager.GetString("OpenGHelper", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Optimized.
|
||||
/// </summary>
|
||||
internal static string Optimized {
|
||||
get {
|
||||
return ResourceManager.GetString("Optimized", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Switch to Eco on battery and to Standard when plugged.
|
||||
/// </summary>
|
||||
internal static string OptimizedGPUTooltip {
|
||||
get {
|
||||
return ResourceManager.GetString("OptimizedGPUTooltip", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Keep GPU disabled on USB-C charger in Optimized mode.
|
||||
/// </summary>
|
||||
internal static string OptimizedUSBC {
|
||||
get {
|
||||
return ResourceManager.GetString("OptimizedUSBC", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Other.
|
||||
/// </summary>
|
||||
internal static string Other {
|
||||
get {
|
||||
return ResourceManager.GetString("Other", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Overdrive.
|
||||
/// </summary>
|
||||
internal static string Overdrive {
|
||||
get {
|
||||
return ResourceManager.GetString("Overdrive", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Performance Mode.
|
||||
/// </summary>
|
||||
internal static string PerformanceMode {
|
||||
get {
|
||||
return ResourceManager.GetString("PerformanceMode", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Picture / Gif.
|
||||
/// </summary>
|
||||
internal static string PictureGif {
|
||||
get {
|
||||
return ResourceManager.GetString("PictureGif", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Play / Pause.
|
||||
/// </summary>
|
||||
internal static string PlayPause {
|
||||
get {
|
||||
return ResourceManager.GetString("PlayPause", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Power Limits (PPT).
|
||||
/// </summary>
|
||||
internal static string PowerLimits {
|
||||
get {
|
||||
return ResourceManager.GetString("PowerLimits", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Power Limits (PPT) is experimental feature. Use carefully and on your own risk!.
|
||||
/// </summary>
|
||||
internal static string PPTExperimental {
|
||||
get {
|
||||
return ResourceManager.GetString("PPTExperimental", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to PrintScreen.
|
||||
/// </summary>
|
||||
internal static string PrintScreen {
|
||||
get {
|
||||
return ResourceManager.GetString("PrintScreen", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Quit.
|
||||
/// </summary>
|
||||
internal static string Quit {
|
||||
get {
|
||||
return ResourceManager.GetString("Quit", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to RPM.
|
||||
/// </summary>
|
||||
internal static string RPM {
|
||||
get {
|
||||
return ResourceManager.GetString("RPM", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Run on Startup.
|
||||
/// </summary>
|
||||
internal static string RunOnStartup {
|
||||
get {
|
||||
return ResourceManager.GetString("RunOnStartup", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Shutdown.
|
||||
/// </summary>
|
||||
internal static string Shutdown {
|
||||
get {
|
||||
return ResourceManager.GetString("Shutdown", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Silent.
|
||||
/// </summary>
|
||||
internal static string Silent {
|
||||
get {
|
||||
return ResourceManager.GetString("Silent", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Sleep.
|
||||
/// </summary>
|
||||
internal static string Sleep {
|
||||
get {
|
||||
return ResourceManager.GetString("Sleep", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Enables dGPU for standard use.
|
||||
/// </summary>
|
||||
internal static string StandardGPUTooltip {
|
||||
get {
|
||||
return ResourceManager.GetString("StandardGPUTooltip", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Standard.
|
||||
/// </summary>
|
||||
internal static string StandardMode {
|
||||
get {
|
||||
return ResourceManager.GetString("StandardMode", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Startup Error.
|
||||
/// </summary>
|
||||
internal static string StartupError {
|
||||
get {
|
||||
return ResourceManager.GetString("StartupError", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Toggle Aura.
|
||||
/// </summary>
|
||||
internal static string ToggleAura {
|
||||
get {
|
||||
return ResourceManager.GetString("ToggleAura", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Toggle Miniled (if supported).
|
||||
/// </summary>
|
||||
internal static string ToggleMiniled {
|
||||
get {
|
||||
return ResourceManager.GetString("ToggleMiniled", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Toggle Screen.
|
||||
/// </summary>
|
||||
internal static string ToggleScreen {
|
||||
get {
|
||||
return ResourceManager.GetString("ToggleScreen", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Turbo.
|
||||
/// </summary>
|
||||
internal static string Turbo {
|
||||
get {
|
||||
return ResourceManager.GetString("Turbo", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Turned off.
|
||||
/// </summary>
|
||||
internal static string TurnedOff {
|
||||
get {
|
||||
return ResourceManager.GetString("TurnedOff", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Turn off on battery.
|
||||
/// </summary>
|
||||
internal static string TurnOffOnBattery {
|
||||
get {
|
||||
return ResourceManager.GetString("TurnOffOnBattery", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Routes laptop screen to dGPU, maximizing FPS.
|
||||
/// </summary>
|
||||
internal static string UltimateGPUTooltip {
|
||||
get {
|
||||
return ResourceManager.GetString("UltimateGPUTooltip", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Ultimate.
|
||||
/// </summary>
|
||||
internal static string UltimateMode {
|
||||
get {
|
||||
return ResourceManager.GetString("UltimateMode", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Version.
|
||||
/// </summary>
|
||||
internal static string VersionLabel {
|
||||
get {
|
||||
return ResourceManager.GetString("VersionLabel", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Volume Mute.
|
||||
/// </summary>
|
||||
internal static string VolumeMute {
|
||||
get {
|
||||
return ResourceManager.GetString("VolumeMute", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Keep app window always on top.
|
||||
/// </summary>
|
||||
internal static string WindowTop {
|
||||
get {
|
||||
return ResourceManager.GetString("WindowTop", resourceCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
349
app/Properties/Strings.de.resx
Normal file
@@ -0,0 +1,349 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ACPIError" xml:space="preserve">
|
||||
<value>Can't connect to ASUS ACPI. Application can't function without it. Try to install Asus System Control Interface</value>
|
||||
</data>
|
||||
<data name="AlertDGPU" xml:space="preserve">
|
||||
<value>Looks like GPU is in heavy use, disable it?</value>
|
||||
</data>
|
||||
<data name="AlertDGPUTitle" xml:space="preserve">
|
||||
<value>Eco Mode</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOff" xml:space="preserve">
|
||||
<value>Switching off Ultimate Mode requires restart</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOn" xml:space="preserve">
|
||||
<value>Ultimate Mode requires restart</value>
|
||||
</data>
|
||||
<data name="AlertUltimateTitle" xml:space="preserve">
|
||||
<value>Reboot now?</value>
|
||||
</data>
|
||||
<data name="AnimationSpeed" xml:space="preserve">
|
||||
<value>Animation Speed</value>
|
||||
</data>
|
||||
<data name="AnimeMatrix" xml:space="preserve">
|
||||
<value>Anime Matrix</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunning" xml:space="preserve">
|
||||
<value>App already running</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunningText" xml:space="preserve">
|
||||
<value>G-Helper is already running. Check system tray for an icon.</value>
|
||||
</data>
|
||||
<data name="ApplyFanCurve" xml:space="preserve">
|
||||
<value>Apply Custom Fan Curve</value>
|
||||
</data>
|
||||
<data name="ApplyPowerLimits" xml:space="preserve">
|
||||
<value>Apply Power Limits</value>
|
||||
</data>
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<value>Breathe</value>
|
||||
</data>
|
||||
<data name="AuraColorCycle" xml:space="preserve">
|
||||
<value>Color Cycle</value>
|
||||
</data>
|
||||
<data name="AuraFast" xml:space="preserve">
|
||||
<value>Fast</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>Normal</value>
|
||||
</data>
|
||||
<data name="AuraRainbow" xml:space="preserve">
|
||||
<value>Rainbow</value>
|
||||
</data>
|
||||
<data name="AuraSlow" xml:space="preserve">
|
||||
<value>Slow</value>
|
||||
</data>
|
||||
<data name="AuraStatic" xml:space="preserve">
|
||||
<value>Static</value>
|
||||
</data>
|
||||
<data name="AuraStrobe" xml:space="preserve">
|
||||
<value>Strobe</value>
|
||||
</data>
|
||||
<data name="AutoMode" xml:space="preserve">
|
||||
<value>Auto</value>
|
||||
</data>
|
||||
<data name="AutoRefreshTooltip" xml:space="preserve">
|
||||
<value>Sets 60Hz to save battery, and back when plugged</value>
|
||||
</data>
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>Awake</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>Balanced</value>
|
||||
</data>
|
||||
<data name="BatteryChargeLimit" xml:space="preserve">
|
||||
<value>Battery Charge Limit</value>
|
||||
</data>
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Boot</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>Color</value>
|
||||
</data>
|
||||
<data name="CPUBoost" xml:space="preserve">
|
||||
<value>CPU Boost</value>
|
||||
</data>
|
||||
<data name="Custom" xml:space="preserve">
|
||||
<value>Custom</value>
|
||||
</data>
|
||||
<data name="Default" xml:space="preserve">
|
||||
<value>Default</value>
|
||||
</data>
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<value>Disable screen overdrive</value>
|
||||
</data>
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<value>Discharging</value>
|
||||
</data>
|
||||
<data name="DownloadUpdate" xml:space="preserve">
|
||||
<value>Download Update</value>
|
||||
</data>
|
||||
<data name="EcoGPUTooltip" xml:space="preserve">
|
||||
<value>Disables dGPU for battery savings</value>
|
||||
</data>
|
||||
<data name="EcoMode" xml:space="preserve">
|
||||
<value>Eco</value>
|
||||
</data>
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<value>Extra</value>
|
||||
</data>
|
||||
<data name="ExtraSettings" xml:space="preserve">
|
||||
<value>Extra Settings</value>
|
||||
</data>
|
||||
<data name="FactoryDefaults" xml:space="preserve">
|
||||
<value>Factory Defaults</value>
|
||||
</data>
|
||||
<data name="FanCurves" xml:space="preserve">
|
||||
<value>Fan Curves</value>
|
||||
</data>
|
||||
<data name="FanProfileCPU" xml:space="preserve">
|
||||
<value>CPU Fan Profile</value>
|
||||
</data>
|
||||
<data name="FanProfileGPU" xml:space="preserve">
|
||||
<value>GPU Fan Profile</value>
|
||||
</data>
|
||||
<data name="FanProfileMid" xml:space="preserve">
|
||||
<value>Mid Fan Profile</value>
|
||||
</data>
|
||||
<data name="FanProfiles" xml:space="preserve">
|
||||
<value>Fan Profiles</value>
|
||||
</data>
|
||||
<data name="FansAndPower" xml:space="preserve">
|
||||
<value>Fans and Power</value>
|
||||
</data>
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>Fans + Power</value>
|
||||
</data>
|
||||
<data name="GPUChanging" xml:space="preserve">
|
||||
<value>Changing</value>
|
||||
</data>
|
||||
<data name="GPUMode" xml:space="preserve">
|
||||
<value>GPU Mode</value>
|
||||
</data>
|
||||
<data name="GPUModeEco" xml:space="preserve">
|
||||
<value>iGPU only</value>
|
||||
</data>
|
||||
<data name="GPUModeStandard" xml:space="preserve">
|
||||
<value>iGPU + dGPU</value>
|
||||
</data>
|
||||
<data name="GPUModeUltimate" xml:space="preserve">
|
||||
<value>dGPU exclusive</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>Key Bindings</value>
|
||||
</data>
|
||||
<data name="Keyboard" xml:space="preserve">
|
||||
<value>Keyboard</value>
|
||||
</data>
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>Lower backlight brightness on battery and back when plugged</value>
|
||||
</data>
|
||||
<data name="KeyboardBacklight" xml:space="preserve">
|
||||
<value>Keyboard Backlight</value>
|
||||
</data>
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<value>Laptop Keyboard</value>
|
||||
</data>
|
||||
<data name="LaptopScreen" xml:space="preserve">
|
||||
<value>Laptop Screen</value>
|
||||
</data>
|
||||
<data name="MatrixBanner" xml:space="preserve">
|
||||
<value>Binary Banner</value>
|
||||
</data>
|
||||
<data name="MatrixBright" xml:space="preserve">
|
||||
<value>Bright</value>
|
||||
</data>
|
||||
<data name="MatrixClock" xml:space="preserve">
|
||||
<value>Clock</value>
|
||||
</data>
|
||||
<data name="MatrixDim" xml:space="preserve">
|
||||
<value>Dim</value>
|
||||
</data>
|
||||
<data name="MatrixLogo" xml:space="preserve">
|
||||
<value>Rog Logo</value>
|
||||
</data>
|
||||
<data name="MatrixMedium" xml:space="preserve">
|
||||
<value>Medium</value>
|
||||
</data>
|
||||
<data name="MatrixOff" xml:space="preserve">
|
||||
<value>Off</value>
|
||||
</data>
|
||||
<data name="MatrixPicture" xml:space="preserve">
|
||||
<value>Picture</value>
|
||||
</data>
|
||||
<data name="MaxRefreshTooltip" xml:space="preserve">
|
||||
<value>Max refresh rate for lower latency</value>
|
||||
</data>
|
||||
<data name="MinRefreshTooltip" xml:space="preserve">
|
||||
<value>60Hz refresh rate to save battery</value>
|
||||
</data>
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>Multizone</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>Open G-Helper window</value>
|
||||
</data>
|
||||
<data name="Optimized" xml:space="preserve">
|
||||
<value>Optimized</value>
|
||||
</data>
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<value>Switch to Eco on battery and to Standard when plugged</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>Other</value>
|
||||
</data>
|
||||
<data name="Overdrive" xml:space="preserve">
|
||||
<value>Overdrive</value>
|
||||
</data>
|
||||
<data name="PerformanceMode" xml:space="preserve">
|
||||
<value>Performance Mode</value>
|
||||
</data>
|
||||
<data name="PictureGif" xml:space="preserve">
|
||||
<value>Picture / Gif</value>
|
||||
</data>
|
||||
<data name="PlayPause" xml:space="preserve">
|
||||
<value>Play / Pause</value>
|
||||
</data>
|
||||
<data name="PowerLimits" xml:space="preserve">
|
||||
<value>Power Limits (PPT)</value>
|
||||
</data>
|
||||
<data name="PPTExperimental" xml:space="preserve">
|
||||
<value>Power Limits (PPT) is experimental feature. Use carefully and on your own risk!</value>
|
||||
</data>
|
||||
<data name="PrintScreen" xml:space="preserve">
|
||||
<value>PrintScreen</value>
|
||||
</data>
|
||||
<data name="Quit" xml:space="preserve">
|
||||
<value>Quit</value>
|
||||
</data>
|
||||
<data name="RPM" xml:space="preserve">
|
||||
<value>RPM</value>
|
||||
</data>
|
||||
<data name="RunOnStartup" xml:space="preserve">
|
||||
<value>Run on Startup</value>
|
||||
</data>
|
||||
<data name="Shutdown" xml:space="preserve">
|
||||
<value>Shutdown</value>
|
||||
</data>
|
||||
<data name="Silent" xml:space="preserve">
|
||||
<value>Silent</value>
|
||||
</data>
|
||||
<data name="Sleep" xml:space="preserve">
|
||||
<value>Sleep</value>
|
||||
</data>
|
||||
<data name="StandardGPUTooltip" xml:space="preserve">
|
||||
<value>Enables dGPU for standard use</value>
|
||||
</data>
|
||||
<data name="StandardMode" xml:space="preserve">
|
||||
<value>Standard</value>
|
||||
</data>
|
||||
<data name="StartupError" xml:space="preserve">
|
||||
<value>Startup Error</value>
|
||||
</data>
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<value>Toggle Aura</value>
|
||||
</data>
|
||||
<data name="Turbo" xml:space="preserve">
|
||||
<value>Turbo</value>
|
||||
</data>
|
||||
<data name="TurnedOff" xml:space="preserve">
|
||||
<value>Turned off</value>
|
||||
</data>
|
||||
<data name="TurnOffOnBattery" xml:space="preserve">
|
||||
<value>Turn off on battery</value>
|
||||
</data>
|
||||
<data name="UltimateGPUTooltip" xml:space="preserve">
|
||||
<value>Routes laptop screen to dGPU, maximizing FPS</value>
|
||||
</data>
|
||||
<data name="UltimateMode" xml:space="preserve">
|
||||
<value>Ultimate</value>
|
||||
</data>
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>Version</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>Volume Mute</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>Keep app window always on top</value>
|
||||
</data>
|
||||
</root>
|
||||
411
app/Properties/Strings.es.resx
Normal file
@@ -0,0 +1,411 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ACPIError" xml:space="preserve">
|
||||
<value>No se pudo conectar con ASUS ACPI. La aplicación no puede funcionar sin el recurso. Instale Asus System Control Interface</value>
|
||||
</data>
|
||||
<data name="AlertDGPU" xml:space="preserve">
|
||||
<value>Detectado uso intensivo de la GPU, ¿deshabilitarla?</value>
|
||||
</data>
|
||||
<data name="AlertDGPUTitle" xml:space="preserve">
|
||||
<value>Modo Eco</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOff" xml:space="preserve">
|
||||
<value>Desactivar el Modo Ultimate requiere reiniciar</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOn" xml:space="preserve">
|
||||
<value>Activar el Modo Ultimate requiere reiniciar</value>
|
||||
</data>
|
||||
<data name="AlertUltimateTitle" xml:space="preserve">
|
||||
<value>¿Reiniciar ahora?</value>
|
||||
</data>
|
||||
<data name="AnimationSpeed" xml:space="preserve">
|
||||
<value>Velocidad</value>
|
||||
</data>
|
||||
<data name="AnimeMatrix" xml:space="preserve">
|
||||
<value>Anime Matrix</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunning" xml:space="preserve">
|
||||
<value>La apliación ya está ejecutándose</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunningText" xml:space="preserve">
|
||||
<value>G-Helper ya está ejecutándose. Compruebe la bandeja del sistema.</value>
|
||||
</data>
|
||||
<data name="ApplyFanCurve" xml:space="preserve">
|
||||
<value>Aplicar curva personalizada</value>
|
||||
</data>
|
||||
<data name="ApplyPowerLimits" xml:space="preserve">
|
||||
<value>Aplicar límites de energía</value>
|
||||
</data>
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<value>Respiración</value>
|
||||
</data>
|
||||
<data name="AuraColorCycle" xml:space="preserve">
|
||||
<value>Ciclo de color</value>
|
||||
</data>
|
||||
<data name="AuraFast" xml:space="preserve">
|
||||
<value>Rápido</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>Normal</value>
|
||||
</data>
|
||||
<data name="AuraRainbow" xml:space="preserve">
|
||||
<value>Arcoíris</value>
|
||||
</data>
|
||||
<data name="AuraSlow" xml:space="preserve">
|
||||
<value>Lento</value>
|
||||
</data>
|
||||
<data name="AuraStatic" xml:space="preserve">
|
||||
<value>Estático</value>
|
||||
</data>
|
||||
<data name="AuraStrobe" xml:space="preserve">
|
||||
<value>Estroboscópico</value>
|
||||
</data>
|
||||
<data name="AutoMode" xml:space="preserve">
|
||||
<value>Automático</value>
|
||||
</data>
|
||||
<data name="AutoRefreshTooltip" xml:space="preserve">
|
||||
<value>Establece 60Hz con batería y vuelve cuando está enchufado</value>
|
||||
</data>
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>Encendida</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>Equilibrado</value>
|
||||
</data>
|
||||
<data name="BatteryChargeLimit" xml:space="preserve">
|
||||
<value>Límite de carga</value>
|
||||
</data>
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Al arrancar</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Brillo</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>Color</value>
|
||||
</data>
|
||||
<data name="CPUBoost" xml:space="preserve">
|
||||
<value>CPU Boost</value>
|
||||
</data>
|
||||
<data name="Custom" xml:space="preserve">
|
||||
<value>Personalizado</value>
|
||||
</data>
|
||||
<data name="Default" xml:space="preserve">
|
||||
<value>Por defecto</value>
|
||||
</data>
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<value>Desactivar Overdrive</value>
|
||||
</data>
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<value>Descargando</value>
|
||||
</data>
|
||||
<data name="DownloadUpdate" xml:space="preserve">
|
||||
<value>Descargar actualización</value>
|
||||
</data>
|
||||
<data name="EcoGPUTooltip" xml:space="preserve">
|
||||
<value>Deshabilita la dGPU para ahorrar batería</value>
|
||||
</data>
|
||||
<data name="EcoMode" xml:space="preserve">
|
||||
<value>Eco</value>
|
||||
</data>
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<value>Adicional</value>
|
||||
</data>
|
||||
<data name="ExtraSettings" xml:space="preserve">
|
||||
<value>Opciones adicionales</value>
|
||||
</data>
|
||||
<data name="FactoryDefaults" xml:space="preserve">
|
||||
<value>Valores de fábrica</value>
|
||||
</data>
|
||||
<data name="FanCurves" xml:space="preserve">
|
||||
<value>Curvas de ventiladores</value>
|
||||
</data>
|
||||
<data name="FanProfileCPU" xml:space="preserve">
|
||||
<value>Perfil ventilador CPU</value>
|
||||
</data>
|
||||
<data name="FanProfileGPU" xml:space="preserve">
|
||||
<value>Perfil ventilador GPU</value>
|
||||
</data>
|
||||
<data name="FanProfileMid" xml:space="preserve">
|
||||
<value>Perfil ventilador central</value>
|
||||
</data>
|
||||
<data name="FanProfiles" xml:space="preserve">
|
||||
<value>Ventiladores</value>
|
||||
</data>
|
||||
<data name="FansAndPower" xml:space="preserve">
|
||||
<value>Ventiladores y energía</value>
|
||||
</data>
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>Ventiladores + Energía</value>
|
||||
</data>
|
||||
<data name="GPUChanging" xml:space="preserve">
|
||||
<value>Cargando</value>
|
||||
</data>
|
||||
<data name="GPUMode" xml:space="preserve">
|
||||
<value>Modo de GPU</value>
|
||||
</data>
|
||||
<data name="GPUModeEco" xml:space="preserve">
|
||||
<value>Sólo iGPU</value>
|
||||
</data>
|
||||
<data name="GPUModeStandard" xml:space="preserve">
|
||||
<value>iGPU + dGPU</value>
|
||||
</data>
|
||||
<data name="GPUModeUltimate" xml:space="preserve">
|
||||
<value>Exclusivo dGPU</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>Atajos de teclado</value>
|
||||
</data>
|
||||
<data name="Keyboard" xml:space="preserve">
|
||||
<value>Teclado</value>
|
||||
</data>
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>Bajar retroiluminación con batería</value>
|
||||
</data>
|
||||
<data name="KeyboardBacklight" xml:space="preserve">
|
||||
<value>Retroiluminación del teclado</value>
|
||||
</data>
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<value>Teclado del portátil</value>
|
||||
</data>
|
||||
<data name="LaptopScreen" xml:space="preserve">
|
||||
<value>Pantalla del portátil</value>
|
||||
</data>
|
||||
<data name="MatrixBanner" xml:space="preserve">
|
||||
<value>Banner binario</value>
|
||||
</data>
|
||||
<data name="MatrixBright" xml:space="preserve">
|
||||
<value>Brillante</value>
|
||||
</data>
|
||||
<data name="MatrixClock" xml:space="preserve">
|
||||
<value>Reloj</value>
|
||||
</data>
|
||||
<data name="MatrixDim" xml:space="preserve">
|
||||
<value>Tenue</value>
|
||||
</data>
|
||||
<data name="MatrixLogo" xml:space="preserve">
|
||||
<value>Logo ROG</value>
|
||||
</data>
|
||||
<data name="MatrixMedium" xml:space="preserve">
|
||||
<value>Medio</value>
|
||||
</data>
|
||||
<data name="MatrixOff" xml:space="preserve">
|
||||
<value>Apagado</value>
|
||||
</data>
|
||||
<data name="MatrixPicture" xml:space="preserve">
|
||||
<value>Imagen</value>
|
||||
</data>
|
||||
<data name="MaxRefreshTooltip" xml:space="preserve">
|
||||
<value>Frecuencia de actualización máxima para una latencia más baja</value>
|
||||
</data>
|
||||
<data name="MinRefreshTooltip" xml:space="preserve">
|
||||
<value>Frecuencia de actualización de 60Hz para ahorrar batería</value>
|
||||
</data>
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>Multizona</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>Abrir ventana G-Helper</value>
|
||||
</data>
|
||||
<data name="Optimized" xml:space="preserve">
|
||||
<value>Optimizado</value>
|
||||
</data>
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<value>Cambia a Eco con batería y a Estándar cuando está enchufado</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>Otro</value>
|
||||
</data>
|
||||
<data name="Overdrive" xml:space="preserve">
|
||||
<value>Overdrive</value>
|
||||
</data>
|
||||
<data name="PerformanceMode" xml:space="preserve">
|
||||
<value>Modo de rendimiento</value>
|
||||
</data>
|
||||
<data name="PictureGif" xml:space="preserve">
|
||||
<value>Imagen / Gif</value>
|
||||
</data>
|
||||
<data name="PlayPause" xml:space="preserve">
|
||||
<value>Reproducir / Pausar</value>
|
||||
</data>
|
||||
<data name="PowerLimits" xml:space="preserve">
|
||||
<value>Límites de energía (PPT)</value>
|
||||
</data>
|
||||
<data name="PPTExperimental" xml:space="preserve">
|
||||
<value>Los límites de energía (PPT) son una característica experimental. ¡Úselo con cuidado y bajo su propio riesgo!</value>
|
||||
</data>
|
||||
<data name="PrintScreen" xml:space="preserve">
|
||||
<value>Capturar pantalla</value>
|
||||
</data>
|
||||
<data name="Quit" xml:space="preserve">
|
||||
<value>Quitar</value>
|
||||
</data>
|
||||
<data name="RPM" xml:space="preserve">
|
||||
<value>RPM</value>
|
||||
</data>
|
||||
<data name="RunOnStartup" xml:space="preserve">
|
||||
<value>Ejecutar al inicio</value>
|
||||
</data>
|
||||
<data name="Shutdown" xml:space="preserve">
|
||||
<value>Al apagar</value>
|
||||
</data>
|
||||
<data name="Silent" xml:space="preserve">
|
||||
<value>Silencio</value>
|
||||
</data>
|
||||
<data name="Sleep" xml:space="preserve">
|
||||
<value>En suspensión</value>
|
||||
</data>
|
||||
<data name="StandardGPUTooltip" xml:space="preserve">
|
||||
<value>Habilita la dGPU para uso estándar</value>
|
||||
</data>
|
||||
<data name="StandardMode" xml:space="preserve">
|
||||
<value>Estándar</value>
|
||||
</data>
|
||||
<data name="StartupError" xml:space="preserve">
|
||||
<value>Error de inicio</value>
|
||||
</data>
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<value>Alternar Aura</value>
|
||||
</data>
|
||||
<data name="Turbo" xml:space="preserve">
|
||||
<value>Turbo</value>
|
||||
</data>
|
||||
<data name="TurnedOff" xml:space="preserve">
|
||||
<value>Apagado</value>
|
||||
</data>
|
||||
<data name="TurnOffOnBattery" xml:space="preserve">
|
||||
<value>Apagar con batería</value>
|
||||
</data>
|
||||
<data name="UltimateGPUTooltip" xml:space="preserve">
|
||||
<value>Enruta la pantalla del portátil a la dGPU, maximizando FPS</value>
|
||||
</data>
|
||||
<data name="UltimateMode" xml:space="preserve">
|
||||
<value>Ultimate</value>
|
||||
</data>
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>Versión</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>Silenciar volumen</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>Mantener aplicación siempre visible</value>
|
||||
</data>
|
||||
</root>
|
||||
349
app/Properties/Strings.fr.resx
Normal file
@@ -0,0 +1,349 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ACPIError" xml:space="preserve">
|
||||
<value>Can't connect to ASUS ACPI. Application can't function without it. Try to install Asus System Control Interface</value>
|
||||
</data>
|
||||
<data name="AlertDGPU" xml:space="preserve">
|
||||
<value>Looks like GPU is in heavy use, disable it?</value>
|
||||
</data>
|
||||
<data name="AlertDGPUTitle" xml:space="preserve">
|
||||
<value>Eco Mode</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOff" xml:space="preserve">
|
||||
<value>Switching off Ultimate Mode requires restart</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOn" xml:space="preserve">
|
||||
<value>Ultimate Mode requires restart</value>
|
||||
</data>
|
||||
<data name="AlertUltimateTitle" xml:space="preserve">
|
||||
<value>Reboot now?</value>
|
||||
</data>
|
||||
<data name="AnimationSpeed" xml:space="preserve">
|
||||
<value>Animation Speed</value>
|
||||
</data>
|
||||
<data name="AnimeMatrix" xml:space="preserve">
|
||||
<value>Anime Matrix</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunning" xml:space="preserve">
|
||||
<value>App already running</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunningText" xml:space="preserve">
|
||||
<value>G-Helper is already running. Check system tray for an icon.</value>
|
||||
</data>
|
||||
<data name="ApplyFanCurve" xml:space="preserve">
|
||||
<value>Apply Custom Fan Curve</value>
|
||||
</data>
|
||||
<data name="ApplyPowerLimits" xml:space="preserve">
|
||||
<value>Apply Power Limits</value>
|
||||
</data>
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<value>Breathe</value>
|
||||
</data>
|
||||
<data name="AuraColorCycle" xml:space="preserve">
|
||||
<value>Color Cycle</value>
|
||||
</data>
|
||||
<data name="AuraFast" xml:space="preserve">
|
||||
<value>Fast</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>Normal</value>
|
||||
</data>
|
||||
<data name="AuraRainbow" xml:space="preserve">
|
||||
<value>Rainbow</value>
|
||||
</data>
|
||||
<data name="AuraSlow" xml:space="preserve">
|
||||
<value>Slow</value>
|
||||
</data>
|
||||
<data name="AuraStatic" xml:space="preserve">
|
||||
<value>Static</value>
|
||||
</data>
|
||||
<data name="AuraStrobe" xml:space="preserve">
|
||||
<value>Strobe</value>
|
||||
</data>
|
||||
<data name="AutoMode" xml:space="preserve">
|
||||
<value>Auto</value>
|
||||
</data>
|
||||
<data name="AutoRefreshTooltip" xml:space="preserve">
|
||||
<value>Sets 60Hz to save battery, and back when plugged</value>
|
||||
</data>
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>Awake</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>Balanced</value>
|
||||
</data>
|
||||
<data name="BatteryChargeLimit" xml:space="preserve">
|
||||
<value>Battery Charge Limit</value>
|
||||
</data>
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Boot</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>Color</value>
|
||||
</data>
|
||||
<data name="CPUBoost" xml:space="preserve">
|
||||
<value>CPU Boost</value>
|
||||
</data>
|
||||
<data name="Custom" xml:space="preserve">
|
||||
<value>Custom</value>
|
||||
</data>
|
||||
<data name="Default" xml:space="preserve">
|
||||
<value>Default</value>
|
||||
</data>
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<value>Disable screen overdrive</value>
|
||||
</data>
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<value>Discharging</value>
|
||||
</data>
|
||||
<data name="DownloadUpdate" xml:space="preserve">
|
||||
<value>Download Update</value>
|
||||
</data>
|
||||
<data name="EcoGPUTooltip" xml:space="preserve">
|
||||
<value>Disables dGPU for battery savings</value>
|
||||
</data>
|
||||
<data name="EcoMode" xml:space="preserve">
|
||||
<value>Eco</value>
|
||||
</data>
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<value>Extra</value>
|
||||
</data>
|
||||
<data name="ExtraSettings" xml:space="preserve">
|
||||
<value>Extra Settings</value>
|
||||
</data>
|
||||
<data name="FactoryDefaults" xml:space="preserve">
|
||||
<value>Factory Defaults</value>
|
||||
</data>
|
||||
<data name="FanCurves" xml:space="preserve">
|
||||
<value>Fan Curves</value>
|
||||
</data>
|
||||
<data name="FanProfileCPU" xml:space="preserve">
|
||||
<value>CPU Fan Profile</value>
|
||||
</data>
|
||||
<data name="FanProfileGPU" xml:space="preserve">
|
||||
<value>GPU Fan Profile</value>
|
||||
</data>
|
||||
<data name="FanProfileMid" xml:space="preserve">
|
||||
<value>Mid Fan Profile</value>
|
||||
</data>
|
||||
<data name="FanProfiles" xml:space="preserve">
|
||||
<value>Fan Profiles</value>
|
||||
</data>
|
||||
<data name="FansAndPower" xml:space="preserve">
|
||||
<value>Fans and Power</value>
|
||||
</data>
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>Fans + Power</value>
|
||||
</data>
|
||||
<data name="GPUChanging" xml:space="preserve">
|
||||
<value>Changing</value>
|
||||
</data>
|
||||
<data name="GPUMode" xml:space="preserve">
|
||||
<value>GPU Mode</value>
|
||||
</data>
|
||||
<data name="GPUModeEco" xml:space="preserve">
|
||||
<value>iGPU only</value>
|
||||
</data>
|
||||
<data name="GPUModeStandard" xml:space="preserve">
|
||||
<value>iGPU + dGPU</value>
|
||||
</data>
|
||||
<data name="GPUModeUltimate" xml:space="preserve">
|
||||
<value>dGPU exclusive</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>Key Bindings</value>
|
||||
</data>
|
||||
<data name="Keyboard" xml:space="preserve">
|
||||
<value>Keyboard</value>
|
||||
</data>
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>Lower backlight brightness on battery and back when plugged</value>
|
||||
</data>
|
||||
<data name="KeyboardBacklight" xml:space="preserve">
|
||||
<value>Keyboard Backlight</value>
|
||||
</data>
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<value>Laptop Keyboard</value>
|
||||
</data>
|
||||
<data name="LaptopScreen" xml:space="preserve">
|
||||
<value>Laptop Screen</value>
|
||||
</data>
|
||||
<data name="MatrixBanner" xml:space="preserve">
|
||||
<value>Binary Banner</value>
|
||||
</data>
|
||||
<data name="MatrixBright" xml:space="preserve">
|
||||
<value>Bright</value>
|
||||
</data>
|
||||
<data name="MatrixClock" xml:space="preserve">
|
||||
<value>Clock</value>
|
||||
</data>
|
||||
<data name="MatrixDim" xml:space="preserve">
|
||||
<value>Dim</value>
|
||||
</data>
|
||||
<data name="MatrixLogo" xml:space="preserve">
|
||||
<value>Rog Logo</value>
|
||||
</data>
|
||||
<data name="MatrixMedium" xml:space="preserve">
|
||||
<value>Medium</value>
|
||||
</data>
|
||||
<data name="MatrixOff" xml:space="preserve">
|
||||
<value>Off</value>
|
||||
</data>
|
||||
<data name="MatrixPicture" xml:space="preserve">
|
||||
<value>Picture</value>
|
||||
</data>
|
||||
<data name="MaxRefreshTooltip" xml:space="preserve">
|
||||
<value>Max refresh rate for lower latency</value>
|
||||
</data>
|
||||
<data name="MinRefreshTooltip" xml:space="preserve">
|
||||
<value>60Hz refresh rate to save battery</value>
|
||||
</data>
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>Multizone</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>Open G-Helper window</value>
|
||||
</data>
|
||||
<data name="Optimized" xml:space="preserve">
|
||||
<value>Optimized</value>
|
||||
</data>
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<value>Switch to Eco on battery and to Standard when plugged</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>Other</value>
|
||||
</data>
|
||||
<data name="Overdrive" xml:space="preserve">
|
||||
<value>Overdrive</value>
|
||||
</data>
|
||||
<data name="PerformanceMode" xml:space="preserve">
|
||||
<value>Performance Mode</value>
|
||||
</data>
|
||||
<data name="PictureGif" xml:space="preserve">
|
||||
<value>Picture / Gif</value>
|
||||
</data>
|
||||
<data name="PlayPause" xml:space="preserve">
|
||||
<value>Play / Pause</value>
|
||||
</data>
|
||||
<data name="PowerLimits" xml:space="preserve">
|
||||
<value>Power Limits (PPT)</value>
|
||||
</data>
|
||||
<data name="PPTExperimental" xml:space="preserve">
|
||||
<value>Power Limits (PPT) is experimental feature. Use carefully and on your own risk!</value>
|
||||
</data>
|
||||
<data name="PrintScreen" xml:space="preserve">
|
||||
<value>PrintScreen</value>
|
||||
</data>
|
||||
<data name="Quit" xml:space="preserve">
|
||||
<value>Quit</value>
|
||||
</data>
|
||||
<data name="RPM" xml:space="preserve">
|
||||
<value>RPM</value>
|
||||
</data>
|
||||
<data name="RunOnStartup" xml:space="preserve">
|
||||
<value>Run on Startup</value>
|
||||
</data>
|
||||
<data name="Shutdown" xml:space="preserve">
|
||||
<value>Shutdown</value>
|
||||
</data>
|
||||
<data name="Silent" xml:space="preserve">
|
||||
<value>Silent</value>
|
||||
</data>
|
||||
<data name="Sleep" xml:space="preserve">
|
||||
<value>Sleep</value>
|
||||
</data>
|
||||
<data name="StandardGPUTooltip" xml:space="preserve">
|
||||
<value>Enables dGPU for standard use</value>
|
||||
</data>
|
||||
<data name="StandardMode" xml:space="preserve">
|
||||
<value>Standard</value>
|
||||
</data>
|
||||
<data name="StartupError" xml:space="preserve">
|
||||
<value>Startup Error</value>
|
||||
</data>
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<value>Toggle Aura</value>
|
||||
</data>
|
||||
<data name="Turbo" xml:space="preserve">
|
||||
<value>Turbo</value>
|
||||
</data>
|
||||
<data name="TurnedOff" xml:space="preserve">
|
||||
<value>Turned off</value>
|
||||
</data>
|
||||
<data name="TurnOffOnBattery" xml:space="preserve">
|
||||
<value>Turn off on battery</value>
|
||||
</data>
|
||||
<data name="UltimateGPUTooltip" xml:space="preserve">
|
||||
<value>Routes laptop screen to dGPU, maximizing FPS</value>
|
||||
</data>
|
||||
<data name="UltimateMode" xml:space="preserve">
|
||||
<value>Ultimate</value>
|
||||
</data>
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>Version</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>Volume Mute</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>Keep app window always on top</value>
|
||||
</data>
|
||||
</root>
|
||||
349
app/Properties/Strings.it.resx
Normal file
@@ -0,0 +1,349 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ACPIError" xml:space="preserve">
|
||||
<value>Can't connect to ASUS ACPI. Application can't function without it. Try to install Asus System Control Interface</value>
|
||||
</data>
|
||||
<data name="AlertDGPU" xml:space="preserve">
|
||||
<value>Looks like GPU is in heavy use, disable it?</value>
|
||||
</data>
|
||||
<data name="AlertDGPUTitle" xml:space="preserve">
|
||||
<value>Eco Mode</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOff" xml:space="preserve">
|
||||
<value>Switching off Ultimate Mode requires restart</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOn" xml:space="preserve">
|
||||
<value>Ultimate Mode requires restart</value>
|
||||
</data>
|
||||
<data name="AlertUltimateTitle" xml:space="preserve">
|
||||
<value>Reboot now?</value>
|
||||
</data>
|
||||
<data name="AnimationSpeed" xml:space="preserve">
|
||||
<value>Animation Speed</value>
|
||||
</data>
|
||||
<data name="AnimeMatrix" xml:space="preserve">
|
||||
<value>Anime Matrix</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunning" xml:space="preserve">
|
||||
<value>App already running</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunningText" xml:space="preserve">
|
||||
<value>G-Helper is already running. Check system tray for an icon.</value>
|
||||
</data>
|
||||
<data name="ApplyFanCurve" xml:space="preserve">
|
||||
<value>Apply Custom Fan Curve</value>
|
||||
</data>
|
||||
<data name="ApplyPowerLimits" xml:space="preserve">
|
||||
<value>Apply Power Limits</value>
|
||||
</data>
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<value>Breathe</value>
|
||||
</data>
|
||||
<data name="AuraColorCycle" xml:space="preserve">
|
||||
<value>Color Cycle</value>
|
||||
</data>
|
||||
<data name="AuraFast" xml:space="preserve">
|
||||
<value>Fast</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>Normal</value>
|
||||
</data>
|
||||
<data name="AuraRainbow" xml:space="preserve">
|
||||
<value>Rainbow</value>
|
||||
</data>
|
||||
<data name="AuraSlow" xml:space="preserve">
|
||||
<value>Slow</value>
|
||||
</data>
|
||||
<data name="AuraStatic" xml:space="preserve">
|
||||
<value>Static</value>
|
||||
</data>
|
||||
<data name="AuraStrobe" xml:space="preserve">
|
||||
<value>Strobe</value>
|
||||
</data>
|
||||
<data name="AutoMode" xml:space="preserve">
|
||||
<value>Auto</value>
|
||||
</data>
|
||||
<data name="AutoRefreshTooltip" xml:space="preserve">
|
||||
<value>Sets 60Hz to save battery, and back when plugged</value>
|
||||
</data>
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>Awake</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>Balanced</value>
|
||||
</data>
|
||||
<data name="BatteryChargeLimit" xml:space="preserve">
|
||||
<value>Battery Charge Limit</value>
|
||||
</data>
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Boot</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>Color</value>
|
||||
</data>
|
||||
<data name="CPUBoost" xml:space="preserve">
|
||||
<value>CPU Boost</value>
|
||||
</data>
|
||||
<data name="Custom" xml:space="preserve">
|
||||
<value>Custom</value>
|
||||
</data>
|
||||
<data name="Default" xml:space="preserve">
|
||||
<value>Default</value>
|
||||
</data>
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<value>Disable screen overdrive</value>
|
||||
</data>
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<value>Discharging</value>
|
||||
</data>
|
||||
<data name="DownloadUpdate" xml:space="preserve">
|
||||
<value>Download Update</value>
|
||||
</data>
|
||||
<data name="EcoGPUTooltip" xml:space="preserve">
|
||||
<value>Disables dGPU for battery savings</value>
|
||||
</data>
|
||||
<data name="EcoMode" xml:space="preserve">
|
||||
<value>Eco</value>
|
||||
</data>
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<value>Extra</value>
|
||||
</data>
|
||||
<data name="ExtraSettings" xml:space="preserve">
|
||||
<value>Extra Settings</value>
|
||||
</data>
|
||||
<data name="FactoryDefaults" xml:space="preserve">
|
||||
<value>Factory Defaults</value>
|
||||
</data>
|
||||
<data name="FanCurves" xml:space="preserve">
|
||||
<value>Fan Curves</value>
|
||||
</data>
|
||||
<data name="FanProfileCPU" xml:space="preserve">
|
||||
<value>CPU Fan Profile</value>
|
||||
</data>
|
||||
<data name="FanProfileGPU" xml:space="preserve">
|
||||
<value>GPU Fan Profile</value>
|
||||
</data>
|
||||
<data name="FanProfileMid" xml:space="preserve">
|
||||
<value>Mid Fan Profile</value>
|
||||
</data>
|
||||
<data name="FanProfiles" xml:space="preserve">
|
||||
<value>Fan Profiles</value>
|
||||
</data>
|
||||
<data name="FansAndPower" xml:space="preserve">
|
||||
<value>Fans and Power</value>
|
||||
</data>
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>Fans + Power</value>
|
||||
</data>
|
||||
<data name="GPUChanging" xml:space="preserve">
|
||||
<value>Changing</value>
|
||||
</data>
|
||||
<data name="GPUMode" xml:space="preserve">
|
||||
<value>GPU Mode</value>
|
||||
</data>
|
||||
<data name="GPUModeEco" xml:space="preserve">
|
||||
<value>iGPU only</value>
|
||||
</data>
|
||||
<data name="GPUModeStandard" xml:space="preserve">
|
||||
<value>iGPU + dGPU</value>
|
||||
</data>
|
||||
<data name="GPUModeUltimate" xml:space="preserve">
|
||||
<value>dGPU exclusive</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>Key Bindings</value>
|
||||
</data>
|
||||
<data name="Keyboard" xml:space="preserve">
|
||||
<value>Keyboard</value>
|
||||
</data>
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>Lower backlight brightness on battery and back when plugged</value>
|
||||
</data>
|
||||
<data name="KeyboardBacklight" xml:space="preserve">
|
||||
<value>Keyboard Backlight</value>
|
||||
</data>
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<value>Laptop Keyboard</value>
|
||||
</data>
|
||||
<data name="LaptopScreen" xml:space="preserve">
|
||||
<value>Laptop Screen</value>
|
||||
</data>
|
||||
<data name="MatrixBanner" xml:space="preserve">
|
||||
<value>Binary Banner</value>
|
||||
</data>
|
||||
<data name="MatrixBright" xml:space="preserve">
|
||||
<value>Bright</value>
|
||||
</data>
|
||||
<data name="MatrixClock" xml:space="preserve">
|
||||
<value>Clock</value>
|
||||
</data>
|
||||
<data name="MatrixDim" xml:space="preserve">
|
||||
<value>Dim</value>
|
||||
</data>
|
||||
<data name="MatrixLogo" xml:space="preserve">
|
||||
<value>Rog Logo</value>
|
||||
</data>
|
||||
<data name="MatrixMedium" xml:space="preserve">
|
||||
<value>Medium</value>
|
||||
</data>
|
||||
<data name="MatrixOff" xml:space="preserve">
|
||||
<value>Off</value>
|
||||
</data>
|
||||
<data name="MatrixPicture" xml:space="preserve">
|
||||
<value>Picture</value>
|
||||
</data>
|
||||
<data name="MaxRefreshTooltip" xml:space="preserve">
|
||||
<value>Max refresh rate for lower latency</value>
|
||||
</data>
|
||||
<data name="MinRefreshTooltip" xml:space="preserve">
|
||||
<value>60Hz refresh rate to save battery</value>
|
||||
</data>
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>Multizone</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>Open G-Helper window</value>
|
||||
</data>
|
||||
<data name="Optimized" xml:space="preserve">
|
||||
<value>Optimized</value>
|
||||
</data>
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<value>Switch to Eco on battery and to Standard when plugged</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>Other</value>
|
||||
</data>
|
||||
<data name="Overdrive" xml:space="preserve">
|
||||
<value>Overdrive</value>
|
||||
</data>
|
||||
<data name="PerformanceMode" xml:space="preserve">
|
||||
<value>Performance Mode</value>
|
||||
</data>
|
||||
<data name="PictureGif" xml:space="preserve">
|
||||
<value>Picture / Gif</value>
|
||||
</data>
|
||||
<data name="PlayPause" xml:space="preserve">
|
||||
<value>Play / Pause</value>
|
||||
</data>
|
||||
<data name="PowerLimits" xml:space="preserve">
|
||||
<value>Power Limits (PPT)</value>
|
||||
</data>
|
||||
<data name="PPTExperimental" xml:space="preserve">
|
||||
<value>Power Limits (PPT) is experimental feature. Use carefully and on your own risk!</value>
|
||||
</data>
|
||||
<data name="PrintScreen" xml:space="preserve">
|
||||
<value>PrintScreen</value>
|
||||
</data>
|
||||
<data name="Quit" xml:space="preserve">
|
||||
<value>Quit</value>
|
||||
</data>
|
||||
<data name="RPM" xml:space="preserve">
|
||||
<value>RPM</value>
|
||||
</data>
|
||||
<data name="RunOnStartup" xml:space="preserve">
|
||||
<value>Run on Startup</value>
|
||||
</data>
|
||||
<data name="Shutdown" xml:space="preserve">
|
||||
<value>Shutdown</value>
|
||||
</data>
|
||||
<data name="Silent" xml:space="preserve">
|
||||
<value>Silent</value>
|
||||
</data>
|
||||
<data name="Sleep" xml:space="preserve">
|
||||
<value>Sleep</value>
|
||||
</data>
|
||||
<data name="StandardGPUTooltip" xml:space="preserve">
|
||||
<value>Enables dGPU for standard use</value>
|
||||
</data>
|
||||
<data name="StandardMode" xml:space="preserve">
|
||||
<value>Standard</value>
|
||||
</data>
|
||||
<data name="StartupError" xml:space="preserve">
|
||||
<value>Startup Error</value>
|
||||
</data>
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<value>Toggle Aura</value>
|
||||
</data>
|
||||
<data name="Turbo" xml:space="preserve">
|
||||
<value>Turbo</value>
|
||||
</data>
|
||||
<data name="TurnedOff" xml:space="preserve">
|
||||
<value>Turned off</value>
|
||||
</data>
|
||||
<data name="TurnOffOnBattery" xml:space="preserve">
|
||||
<value>Turn off on battery</value>
|
||||
</data>
|
||||
<data name="UltimateGPUTooltip" xml:space="preserve">
|
||||
<value>Routes laptop screen to dGPU, maximizing FPS</value>
|
||||
</data>
|
||||
<data name="UltimateMode" xml:space="preserve">
|
||||
<value>Ultimate</value>
|
||||
</data>
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>Version</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>Volume Mute</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>Keep app window always on top</value>
|
||||
</data>
|
||||
</root>
|
||||
420
app/Properties/Strings.resx
Normal file
@@ -0,0 +1,420 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ACPIError" xml:space="preserve">
|
||||
<value>Can't connect to ASUS ACPI. Application can't function without it. Try to install Asus System Control Interface</value>
|
||||
</data>
|
||||
<data name="AlertDGPU" xml:space="preserve">
|
||||
<value>Looks like GPU is in heavy use, disable it?</value>
|
||||
</data>
|
||||
<data name="AlertDGPUTitle" xml:space="preserve">
|
||||
<value>Eco Mode</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOff" xml:space="preserve">
|
||||
<value>Switching off Ultimate Mode requires restart</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOn" xml:space="preserve">
|
||||
<value>Ultimate Mode requires restart</value>
|
||||
</data>
|
||||
<data name="AlertUltimateTitle" xml:space="preserve">
|
||||
<value>Reboot now?</value>
|
||||
</data>
|
||||
<data name="AnimationSpeed" xml:space="preserve">
|
||||
<value>Animation Speed</value>
|
||||
</data>
|
||||
<data name="AnimeMatrix" xml:space="preserve">
|
||||
<value>Anime Matrix</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunning" xml:space="preserve">
|
||||
<value>App already running</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunningText" xml:space="preserve">
|
||||
<value>G-Helper is already running. Check system tray for an icon.</value>
|
||||
</data>
|
||||
<data name="ApplyFanCurve" xml:space="preserve">
|
||||
<value>Apply Custom Fan Curve</value>
|
||||
</data>
|
||||
<data name="ApplyPowerLimits" xml:space="preserve">
|
||||
<value>Apply Power Limits</value>
|
||||
</data>
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<value>Breathe</value>
|
||||
</data>
|
||||
<data name="AuraColorCycle" xml:space="preserve">
|
||||
<value>Color Cycle</value>
|
||||
</data>
|
||||
<data name="AuraFast" xml:space="preserve">
|
||||
<value>Fast</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>Normal</value>
|
||||
</data>
|
||||
<data name="AuraRainbow" xml:space="preserve">
|
||||
<value>Rainbow</value>
|
||||
</data>
|
||||
<data name="AuraSlow" xml:space="preserve">
|
||||
<value>Slow</value>
|
||||
</data>
|
||||
<data name="AuraStatic" xml:space="preserve">
|
||||
<value>Static</value>
|
||||
</data>
|
||||
<data name="AuraStrobe" xml:space="preserve">
|
||||
<value>Strobe</value>
|
||||
</data>
|
||||
<data name="AutoMode" xml:space="preserve">
|
||||
<value>Auto</value>
|
||||
</data>
|
||||
<data name="AutoRefreshTooltip" xml:space="preserve">
|
||||
<value>Sets 60Hz to save battery, and back when plugged</value>
|
||||
</data>
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>Awake</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>Balanced</value>
|
||||
</data>
|
||||
<data name="BatteryChargeLimit" xml:space="preserve">
|
||||
<value>Battery Charge Limit</value>
|
||||
</data>
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Boot</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Brightness</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>Color</value>
|
||||
</data>
|
||||
<data name="CPUBoost" xml:space="preserve">
|
||||
<value>CPU Boost</value>
|
||||
</data>
|
||||
<data name="Custom" xml:space="preserve">
|
||||
<value>Custom</value>
|
||||
</data>
|
||||
<data name="Default" xml:space="preserve">
|
||||
<value>Default</value>
|
||||
</data>
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<value>Disable screen overdrive</value>
|
||||
</data>
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<value>Discharging</value>
|
||||
</data>
|
||||
<data name="DownloadUpdate" xml:space="preserve">
|
||||
<value>Download Update</value>
|
||||
</data>
|
||||
<data name="EcoGPUTooltip" xml:space="preserve">
|
||||
<value>Disables dGPU for battery savings</value>
|
||||
</data>
|
||||
<data name="EcoMode" xml:space="preserve">
|
||||
<value>Eco</value>
|
||||
</data>
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<value>Extra</value>
|
||||
</data>
|
||||
<data name="ExtraSettings" xml:space="preserve">
|
||||
<value>Extra Settings</value>
|
||||
</data>
|
||||
<data name="FactoryDefaults" xml:space="preserve">
|
||||
<value>Factory Defaults</value>
|
||||
</data>
|
||||
<data name="FanCurves" xml:space="preserve">
|
||||
<value>Fan Curves</value>
|
||||
</data>
|
||||
<data name="FanProfileCPU" xml:space="preserve">
|
||||
<value>CPU Fan Profile</value>
|
||||
</data>
|
||||
<data name="FanProfileGPU" xml:space="preserve">
|
||||
<value>GPU Fan Profile</value>
|
||||
</data>
|
||||
<data name="FanProfileMid" xml:space="preserve">
|
||||
<value>Mid Fan Profile</value>
|
||||
</data>
|
||||
<data name="FanProfiles" xml:space="preserve">
|
||||
<value>Fan Profiles</value>
|
||||
</data>
|
||||
<data name="FansAndPower" xml:space="preserve">
|
||||
<value>Fans and Power</value>
|
||||
</data>
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>Fans + Power</value>
|
||||
</data>
|
||||
<data name="GPUChanging" xml:space="preserve">
|
||||
<value>Changing</value>
|
||||
</data>
|
||||
<data name="GPUMode" xml:space="preserve">
|
||||
<value>GPU Mode</value>
|
||||
</data>
|
||||
<data name="GPUModeEco" xml:space="preserve">
|
||||
<value>iGPU only</value>
|
||||
</data>
|
||||
<data name="GPUModeStandard" xml:space="preserve">
|
||||
<value>iGPU + dGPU</value>
|
||||
</data>
|
||||
<data name="GPUModeUltimate" xml:space="preserve">
|
||||
<value>dGPU exclusive</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>Key Bindings</value>
|
||||
</data>
|
||||
<data name="Keyboard" xml:space="preserve">
|
||||
<value>Keyboard</value>
|
||||
</data>
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>Lower backlight brightness on battery and back when plugged</value>
|
||||
</data>
|
||||
<data name="KeyboardBacklight" xml:space="preserve">
|
||||
<value>Keyboard Backlight</value>
|
||||
</data>
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<value>Laptop Keyboard</value>
|
||||
</data>
|
||||
<data name="LaptopScreen" xml:space="preserve">
|
||||
<value>Laptop Screen</value>
|
||||
</data>
|
||||
<data name="MatrixBanner" xml:space="preserve">
|
||||
<value>Binary Banner</value>
|
||||
</data>
|
||||
<data name="MatrixBright" xml:space="preserve">
|
||||
<value>Bright</value>
|
||||
</data>
|
||||
<data name="MatrixClock" xml:space="preserve">
|
||||
<value>Clock</value>
|
||||
</data>
|
||||
<data name="MatrixDim" xml:space="preserve">
|
||||
<value>Dim</value>
|
||||
</data>
|
||||
<data name="MatrixLogo" xml:space="preserve">
|
||||
<value>Rog Logo</value>
|
||||
</data>
|
||||
<data name="MatrixMedium" xml:space="preserve">
|
||||
<value>Medium</value>
|
||||
</data>
|
||||
<data name="MatrixOff" xml:space="preserve">
|
||||
<value>Off</value>
|
||||
</data>
|
||||
<data name="MatrixPicture" xml:space="preserve">
|
||||
<value>Picture</value>
|
||||
</data>
|
||||
<data name="MaxRefreshTooltip" xml:space="preserve">
|
||||
<value>Max refresh rate for lower latency</value>
|
||||
</data>
|
||||
<data name="MinRefreshTooltip" xml:space="preserve">
|
||||
<value>60Hz refresh rate to save battery</value>
|
||||
</data>
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>Multizone</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>Open G-Helper window</value>
|
||||
</data>
|
||||
<data name="Optimized" xml:space="preserve">
|
||||
<value>Optimized</value>
|
||||
</data>
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<value>Switch to Eco on battery and to Standard when plugged</value>
|
||||
</data>
|
||||
<data name="OptimizedUSBC" xml:space="preserve">
|
||||
<value>Keep GPU disabled on USB-C charger in Optimized mode</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>Other</value>
|
||||
</data>
|
||||
<data name="Overdrive" xml:space="preserve">
|
||||
<value>Overdrive</value>
|
||||
</data>
|
||||
<data name="PerformanceMode" xml:space="preserve">
|
||||
<value>Performance Mode</value>
|
||||
</data>
|
||||
<data name="PictureGif" xml:space="preserve">
|
||||
<value>Picture / Gif</value>
|
||||
</data>
|
||||
<data name="PlayPause" xml:space="preserve">
|
||||
<value>Play / Pause</value>
|
||||
</data>
|
||||
<data name="PowerLimits" xml:space="preserve">
|
||||
<value>Power Limits (PPT)</value>
|
||||
</data>
|
||||
<data name="PPTExperimental" xml:space="preserve">
|
||||
<value>Power Limits (PPT) is experimental feature. Use carefully and on your own risk!</value>
|
||||
</data>
|
||||
<data name="PrintScreen" xml:space="preserve">
|
||||
<value>PrintScreen</value>
|
||||
</data>
|
||||
<data name="Quit" xml:space="preserve">
|
||||
<value>Quit</value>
|
||||
</data>
|
||||
<data name="RPM" xml:space="preserve">
|
||||
<value>RPM</value>
|
||||
</data>
|
||||
<data name="RunOnStartup" xml:space="preserve">
|
||||
<value>Run on Startup</value>
|
||||
</data>
|
||||
<data name="Shutdown" xml:space="preserve">
|
||||
<value>Shutdown</value>
|
||||
</data>
|
||||
<data name="Silent" xml:space="preserve">
|
||||
<value>Silent</value>
|
||||
</data>
|
||||
<data name="Sleep" xml:space="preserve">
|
||||
<value>Sleep</value>
|
||||
</data>
|
||||
<data name="StandardGPUTooltip" xml:space="preserve">
|
||||
<value>Enables dGPU for standard use</value>
|
||||
</data>
|
||||
<data name="StandardMode" xml:space="preserve">
|
||||
<value>Standard</value>
|
||||
</data>
|
||||
<data name="StartupError" xml:space="preserve">
|
||||
<value>Startup Error</value>
|
||||
</data>
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<value>Toggle Aura</value>
|
||||
</data>
|
||||
<data name="ToggleMiniled" xml:space="preserve">
|
||||
<value>Toggle Miniled (if supported)</value>
|
||||
</data>
|
||||
<data name="ToggleScreen" xml:space="preserve">
|
||||
<value>Toggle Screen</value>
|
||||
</data>
|
||||
<data name="Turbo" xml:space="preserve">
|
||||
<value>Turbo</value>
|
||||
</data>
|
||||
<data name="TurnedOff" xml:space="preserve">
|
||||
<value>Turned off</value>
|
||||
</data>
|
||||
<data name="TurnOffOnBattery" xml:space="preserve">
|
||||
<value>Turn off on battery</value>
|
||||
</data>
|
||||
<data name="UltimateGPUTooltip" xml:space="preserve">
|
||||
<value>Routes laptop screen to dGPU, maximizing FPS</value>
|
||||
</data>
|
||||
<data name="UltimateMode" xml:space="preserve">
|
||||
<value>Ultimate</value>
|
||||
</data>
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>Version</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>Volume Mute</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>Keep app window always on top</value>
|
||||
</data>
|
||||
</root>
|
||||
411
app/Properties/Strings.tr.resx
Normal file
@@ -0,0 +1,411 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ACPIError" xml:space="preserve">
|
||||
<value>ASUS ACPI'ye bağlanılamıyor. Uygulama o olmadan çalışamaz. Asus Sistem Kontrol Arayüzü'nü yüklemeyi deneyin.</value>
|
||||
</data>
|
||||
<data name="AlertDGPU" xml:space="preserve">
|
||||
<value>Görünüşe göre GPU yoğun bir şekilde kullanılıyor, devre dışı bırakılsın mı?</value>
|
||||
</data>
|
||||
<data name="AlertDGPUTitle" xml:space="preserve">
|
||||
<value>Eko Modu</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOff" xml:space="preserve">
|
||||
<value>Ultimate Modu kapatmak yeniden başlatmayı gerektirir</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOn" xml:space="preserve">
|
||||
<value>Ultimate Modu etkinleştirmek yeniden başlatmayı gerektirir</value>
|
||||
</data>
|
||||
<data name="AlertUltimateTitle" xml:space="preserve">
|
||||
<value>Şimdi yeniden başlatılsın mı?</value>
|
||||
</data>
|
||||
<data name="AnimationSpeed" xml:space="preserve">
|
||||
<value>Animasyon Hızı</value>
|
||||
</data>
|
||||
<data name="AnimeMatrix" xml:space="preserve">
|
||||
<value>Anime Matrix</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunning" xml:space="preserve">
|
||||
<value>Uygulama zaten çalışıyor</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunningText" xml:space="preserve">
|
||||
<value>G-Helper zaten çalışıyor. Simge için görev çubuğunu kontrol edin.</value>
|
||||
</data>
|
||||
<data name="ApplyFanCurve" xml:space="preserve">
|
||||
<value>Özel Fan Eğrisini Uygula</value>
|
||||
</data>
|
||||
<data name="ApplyPowerLimits" xml:space="preserve">
|
||||
<value>Güç Sınırlarını Uygula</value>
|
||||
</data>
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<value>Nefes</value>
|
||||
</data>
|
||||
<data name="AuraColorCycle" xml:space="preserve">
|
||||
<value>Renk Döngüsü</value>
|
||||
</data>
|
||||
<data name="AuraFast" xml:space="preserve">
|
||||
<value>Hızlı</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>Normal</value>
|
||||
</data>
|
||||
<data name="AuraRainbow" xml:space="preserve">
|
||||
<value>Gökkuşağı</value>
|
||||
</data>
|
||||
<data name="AuraSlow" xml:space="preserve">
|
||||
<value>Yavaş</value>
|
||||
</data>
|
||||
<data name="AuraStatic" xml:space="preserve">
|
||||
<value>Sabit</value>
|
||||
</data>
|
||||
<data name="AuraStrobe" xml:space="preserve">
|
||||
<value>Flaş</value>
|
||||
</data>
|
||||
<data name="AutoMode" xml:space="preserve">
|
||||
<value>Otomatik</value>
|
||||
</data>
|
||||
<data name="AutoRefreshTooltip" xml:space="preserve">
|
||||
<value>Pil tasarrufu için 60Hz kullanılır ve şarja takıldığında eski haline getirir</value>
|
||||
</data>
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>Uyanık</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>Dengeli</value>
|
||||
</data>
|
||||
<data name="BatteryChargeLimit" xml:space="preserve">
|
||||
<value>Pil Şarj Limiti</value>
|
||||
</data>
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Önyükleme</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Parlaklığı</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>Renk</value>
|
||||
</data>
|
||||
<data name="CPUBoost" xml:space="preserve">
|
||||
<value>CPU Boost</value>
|
||||
</data>
|
||||
<data name="Custom" xml:space="preserve">
|
||||
<value>Özel</value>
|
||||
</data>
|
||||
<data name="Default" xml:space="preserve">
|
||||
<value>Varsayılan</value>
|
||||
</data>
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<value>Ekran overdrive özelliğini devre dışı bırak</value>
|
||||
</data>
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<value>Pil boşalıyor</value>
|
||||
</data>
|
||||
<data name="DownloadUpdate" xml:space="preserve">
|
||||
<value>Güncelleştirmeyi İndir</value>
|
||||
</data>
|
||||
<data name="EcoGPUTooltip" xml:space="preserve">
|
||||
<value>Pil tasarrufu için harici GPU'yu devre dışı bırakır</value>
|
||||
</data>
|
||||
<data name="EcoMode" xml:space="preserve">
|
||||
<value>Eko</value>
|
||||
</data>
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<value>Ekstra</value>
|
||||
</data>
|
||||
<data name="ExtraSettings" xml:space="preserve">
|
||||
<value>Ekstra Ayarlar</value>
|
||||
</data>
|
||||
<data name="FactoryDefaults" xml:space="preserve">
|
||||
<value>Fabrika Ayarları</value>
|
||||
</data>
|
||||
<data name="FanCurves" xml:space="preserve">
|
||||
<value>Fan Eğrileri</value>
|
||||
</data>
|
||||
<data name="FanProfileCPU" xml:space="preserve">
|
||||
<value>CPU Fan Profili</value>
|
||||
</data>
|
||||
<data name="FanProfileGPU" xml:space="preserve">
|
||||
<value>GPU Fan Profili</value>
|
||||
</data>
|
||||
<data name="FanProfileMid" xml:space="preserve">
|
||||
<value>Orta Fan Profili</value>
|
||||
</data>
|
||||
<data name="FanProfiles" xml:space="preserve">
|
||||
<value>Fan Profilleri</value>
|
||||
</data>
|
||||
<data name="FansAndPower" xml:space="preserve">
|
||||
<value>Fanlar ve Güç</value>
|
||||
</data>
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>Fanlar + Güç</value>
|
||||
</data>
|
||||
<data name="GPUChanging" xml:space="preserve">
|
||||
<value>Değiştiriliyor</value>
|
||||
</data>
|
||||
<data name="GPUMode" xml:space="preserve">
|
||||
<value>GPU Modu</value>
|
||||
</data>
|
||||
<data name="GPUModeEco" xml:space="preserve">
|
||||
<value>sadece dahili GPU</value>
|
||||
</data>
|
||||
<data name="GPUModeStandard" xml:space="preserve">
|
||||
<value>dahili + harici GPU</value>
|
||||
</data>
|
||||
<data name="GPUModeUltimate" xml:space="preserve">
|
||||
<value>sadece harici GPU</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>Tuş Bağlantıları</value>
|
||||
</data>
|
||||
<data name="Keyboard" xml:space="preserve">
|
||||
<value>Klavye</value>
|
||||
</data>
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>Pille çalışırken klavye aydınlatmasını kıs, şarjdayken eski haline dön</value>
|
||||
</data>
|
||||
<data name="KeyboardBacklight" xml:space="preserve">
|
||||
<value>Klavye Aydınlatması</value>
|
||||
</data>
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<value>Laptop Klavyesi</value>
|
||||
</data>
|
||||
<data name="LaptopScreen" xml:space="preserve">
|
||||
<value>Laptop Ekranı</value>
|
||||
</data>
|
||||
<data name="MatrixBanner" xml:space="preserve">
|
||||
<value>Matrix Banner</value>
|
||||
</data>
|
||||
<data name="MatrixBright" xml:space="preserve">
|
||||
<value>Parlak</value>
|
||||
</data>
|
||||
<data name="MatrixClock" xml:space="preserve">
|
||||
<value>Saat</value>
|
||||
</data>
|
||||
<data name="MatrixDim" xml:space="preserve">
|
||||
<value>Mat</value>
|
||||
</data>
|
||||
<data name="MatrixLogo" xml:space="preserve">
|
||||
<value>Rog Logosu</value>
|
||||
</data>
|
||||
<data name="MatrixMedium" xml:space="preserve">
|
||||
<value>Orta</value>
|
||||
</data>
|
||||
<data name="MatrixOff" xml:space="preserve">
|
||||
<value>Kapalı</value>
|
||||
</data>
|
||||
<data name="MatrixPicture" xml:space="preserve">
|
||||
<value>Resim</value>
|
||||
</data>
|
||||
<data name="MaxRefreshTooltip" xml:space="preserve">
|
||||
<value>Daha düşük gecikme için maksimum yenileme hızı</value>
|
||||
</data>
|
||||
<data name="MinRefreshTooltip" xml:space="preserve">
|
||||
<value>Pil tasarrufu için 60Hz yenileme hızı</value>
|
||||
</data>
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>Çoklu Bölge</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>G-Helper penceresini aç</value>
|
||||
</data>
|
||||
<data name="Optimized" xml:space="preserve">
|
||||
<value>Optimize edilmiş</value>
|
||||
</data>
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<value>Pille çalışırken Eko moda ve şarjdayken Standart moda geçiş yapın</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>Diğer</value>
|
||||
</data>
|
||||
<data name="Overdrive" xml:space="preserve">
|
||||
<value>Overdrive</value>
|
||||
</data>
|
||||
<data name="PerformanceMode" xml:space="preserve">
|
||||
<value>Performans Modu</value>
|
||||
</data>
|
||||
<data name="PictureGif" xml:space="preserve">
|
||||
<value>Resim / Gif</value>
|
||||
</data>
|
||||
<data name="PlayPause" xml:space="preserve">
|
||||
<value>Oynat / Duraklat</value>
|
||||
</data>
|
||||
<data name="PowerLimits" xml:space="preserve">
|
||||
<value>Güç Sınırları (PPT)</value>
|
||||
</data>
|
||||
<data name="PPTExperimental" xml:space="preserve">
|
||||
<value>Güç Sınırları (PPT) deneysel bir özelliktir. Riski göze alarak dikkatli kullanın!</value>
|
||||
</data>
|
||||
<data name="PrintScreen" xml:space="preserve">
|
||||
<value>Ekran Görüntüsü Al</value>
|
||||
</data>
|
||||
<data name="Quit" xml:space="preserve">
|
||||
<value>Çıkış Yap</value>
|
||||
</data>
|
||||
<data name="RPM" xml:space="preserve">
|
||||
<value>RPM</value>
|
||||
</data>
|
||||
<data name="RunOnStartup" xml:space="preserve">
|
||||
<value>Başlangıçta Çalıştır</value>
|
||||
</data>
|
||||
<data name="Shutdown" xml:space="preserve">
|
||||
<value>Kapalı</value>
|
||||
</data>
|
||||
<data name="Silent" xml:space="preserve">
|
||||
<value>Sessiz</value>
|
||||
</data>
|
||||
<data name="Sleep" xml:space="preserve">
|
||||
<value>Uyku</value>
|
||||
</data>
|
||||
<data name="StandardGPUTooltip" xml:space="preserve">
|
||||
<value>Standart kullanım için harici GPU'yu etkinleştirir</value>
|
||||
</data>
|
||||
<data name="StandardMode" xml:space="preserve">
|
||||
<value>Standart</value>
|
||||
</data>
|
||||
<data name="StartupError" xml:space="preserve">
|
||||
<value>Başlatma Hatası</value>
|
||||
</data>
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<value>Aura'yı Değiştir</value>
|
||||
</data>
|
||||
<data name="Turbo" xml:space="preserve">
|
||||
<value>Turbo</value>
|
||||
</data>
|
||||
<data name="TurnedOff" xml:space="preserve">
|
||||
<value>Kapatıldı</value>
|
||||
</data>
|
||||
<data name="TurnOffOnBattery" xml:space="preserve">
|
||||
<value>Pille çalışırken kapat</value>
|
||||
</data>
|
||||
<data name="UltimateGPUTooltip" xml:space="preserve">
|
||||
<value>Dizüstü ekranını harici GPU'ya yönlendirerek FPS'yi maksimize eder</value>
|
||||
</data>
|
||||
<data name="UltimateMode" xml:space="preserve">
|
||||
<value>Ultimate</value>
|
||||
</data>
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>Sürüm</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>Ses Kısma</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>Uygulama penceresini her zaman en üstte tut</value>
|
||||
</data>
|
||||
</root>
|
||||
411
app/Properties/Strings.uk.resx
Normal file
@@ -0,0 +1,411 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ACPIError" xml:space="preserve">
|
||||
<value>Не вдається підключитися до ASUS ACPI. Програма не може працювати без нього. Спробуйте встановити Asus System Control Interface</value>
|
||||
</data>
|
||||
<data name="AlertDGPU" xml:space="preserve">
|
||||
<value>Здається, що GPU використовується, вимкнути її?</value>
|
||||
</data>
|
||||
<data name="AlertDGPUTitle" xml:space="preserve">
|
||||
<value>Еко Режим</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOff" xml:space="preserve">
|
||||
<value>Вимкнення ультимативного режиму потребує перезавантаження</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOn" xml:space="preserve">
|
||||
<value>Ультимативний режим потребує перезавантаження</value>
|
||||
</data>
|
||||
<data name="AlertUltimateTitle" xml:space="preserve">
|
||||
<value>Перезавантажитися зараз?</value>
|
||||
</data>
|
||||
<data name="AnimationSpeed" xml:space="preserve">
|
||||
<value>Швидкість Анімації</value>
|
||||
</data>
|
||||
<data name="AnimeMatrix" xml:space="preserve">
|
||||
<value>Аніме Матриця</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunning" xml:space="preserve">
|
||||
<value>Програма вже запущена</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunningText" xml:space="preserve">
|
||||
<value>G-Helper вже запущено. Перевірте значок у системному лотку.</value>
|
||||
</data>
|
||||
<data name="ApplyFanCurve" xml:space="preserve">
|
||||
<value>Застосувати профілі кулерів</value>
|
||||
</data>
|
||||
<data name="ApplyPowerLimits" xml:space="preserve">
|
||||
<value>Застосувати потужність</value>
|
||||
</data>
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<value>Дихання</value>
|
||||
</data>
|
||||
<data name="AuraColorCycle" xml:space="preserve">
|
||||
<value>Зміна Кольорів</value>
|
||||
</data>
|
||||
<data name="AuraFast" xml:space="preserve">
|
||||
<value>Швидка</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>Нормальна</value>
|
||||
</data>
|
||||
<data name="AuraRainbow" xml:space="preserve">
|
||||
<value>Веселка</value>
|
||||
</data>
|
||||
<data name="AuraSlow" xml:space="preserve">
|
||||
<value>Повільна</value>
|
||||
</data>
|
||||
<data name="AuraStatic" xml:space="preserve">
|
||||
<value>Статична</value>
|
||||
</data>
|
||||
<data name="AuraStrobe" xml:space="preserve">
|
||||
<value>Стробоскоп</value>
|
||||
</data>
|
||||
<data name="AutoMode" xml:space="preserve">
|
||||
<value>Авто</value>
|
||||
</data>
|
||||
<data name="AutoRefreshTooltip" xml:space="preserve">
|
||||
<value>Частота 60Гц на батареї та максимальна на зарядці</value>
|
||||
</data>
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>Робота</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>Баланс</value>
|
||||
</data>
|
||||
<data name="BatteryChargeLimit" xml:space="preserve">
|
||||
<value>Ліміт заряду батареї</value>
|
||||
</data>
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Старт</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Яскравість</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>Колір</value>
|
||||
</data>
|
||||
<data name="CPUBoost" xml:space="preserve">
|
||||
<value>CPU Boost</value>
|
||||
</data>
|
||||
<data name="Custom" xml:space="preserve">
|
||||
<value>Своє</value>
|
||||
</data>
|
||||
<data name="Default" xml:space="preserve">
|
||||
<value>За замовчуванням</value>
|
||||
</data>
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<value>Вимкнути овердрайв дисплею</value>
|
||||
</data>
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<value>Розрядка</value>
|
||||
</data>
|
||||
<data name="DownloadUpdate" xml:space="preserve">
|
||||
<value>Завантажити</value>
|
||||
</data>
|
||||
<data name="EcoGPUTooltip" xml:space="preserve">
|
||||
<value>Вимикає dGPU, щоб зберегти заряд</value>
|
||||
</data>
|
||||
<data name="EcoMode" xml:space="preserve">
|
||||
<value>Еко</value>
|
||||
</data>
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<value>Додатково</value>
|
||||
</data>
|
||||
<data name="ExtraSettings" xml:space="preserve">
|
||||
<value>Додаткові Налаштування</value>
|
||||
</data>
|
||||
<data name="FactoryDefaults" xml:space="preserve">
|
||||
<value>Скинути</value>
|
||||
</data>
|
||||
<data name="FanCurves" xml:space="preserve">
|
||||
<value>Криві кулерів</value>
|
||||
</data>
|
||||
<data name="FanProfileCPU" xml:space="preserve">
|
||||
<value>Профіль кулеру CPU</value>
|
||||
</data>
|
||||
<data name="FanProfileGPU" xml:space="preserve">
|
||||
<value>Профіль кулеру GPU</value>
|
||||
</data>
|
||||
<data name="FanProfileMid" xml:space="preserve">
|
||||
<value>Профіль додаткового кулеру</value>
|
||||
</data>
|
||||
<data name="FanProfiles" xml:space="preserve">
|
||||
<value>Профілі кулерів</value>
|
||||
</data>
|
||||
<data name="FansAndPower" xml:space="preserve">
|
||||
<value>Кулери та Потужність</value>
|
||||
</data>
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>Кулери та Потужність</value>
|
||||
</data>
|
||||
<data name="GPUChanging" xml:space="preserve">
|
||||
<value>Зміна</value>
|
||||
</data>
|
||||
<data name="GPUMode" xml:space="preserve">
|
||||
<value>Режим Графіки</value>
|
||||
</data>
|
||||
<data name="GPUModeEco" xml:space="preserve">
|
||||
<value>Тільки iGPU</value>
|
||||
</data>
|
||||
<data name="GPUModeStandard" xml:space="preserve">
|
||||
<value>iGPU + dGPU</value>
|
||||
</data>
|
||||
<data name="GPUModeUltimate" xml:space="preserve">
|
||||
<value>Ексклюзивний dGPU</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>Прив'язки клавіш</value>
|
||||
</data>
|
||||
<data name="Keyboard" xml:space="preserve">
|
||||
<value>Клавіатура</value>
|
||||
</data>
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>Вимкнути підсвітку на батареї та увімкнути на зарядці</value>
|
||||
</data>
|
||||
<data name="KeyboardBacklight" xml:space="preserve">
|
||||
<value>Підсвітка клавіатури</value>
|
||||
</data>
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<value>Клавіатура</value>
|
||||
</data>
|
||||
<data name="LaptopScreen" xml:space="preserve">
|
||||
<value>Дисплей</value>
|
||||
</data>
|
||||
<data name="MatrixBanner" xml:space="preserve">
|
||||
<value>Бінарний банер</value>
|
||||
</data>
|
||||
<data name="MatrixBright" xml:space="preserve">
|
||||
<value>Яскрава</value>
|
||||
</data>
|
||||
<data name="MatrixClock" xml:space="preserve">
|
||||
<value>Годинник</value>
|
||||
</data>
|
||||
<data name="MatrixDim" xml:space="preserve">
|
||||
<value>Слабка</value>
|
||||
</data>
|
||||
<data name="MatrixLogo" xml:space="preserve">
|
||||
<value>Логотип Rog</value>
|
||||
</data>
|
||||
<data name="MatrixMedium" xml:space="preserve">
|
||||
<value>Середня</value>
|
||||
</data>
|
||||
<data name="MatrixOff" xml:space="preserve">
|
||||
<value>Вимкнена</value>
|
||||
</data>
|
||||
<data name="MatrixPicture" xml:space="preserve">
|
||||
<value>Картинка</value>
|
||||
</data>
|
||||
<data name="MaxRefreshTooltip" xml:space="preserve">
|
||||
<value>Максимальна частота оновлення для мінімізації затримок</value>
|
||||
</data>
|
||||
<data name="MinRefreshTooltip" xml:space="preserve">
|
||||
<value>Частота 60Гц, щоб зберегти заряд батареї</value>
|
||||
</data>
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>Мультизони</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>Відкрити вікно G-Helper</value>
|
||||
</data>
|
||||
<data name="Optimized" xml:space="preserve">
|
||||
<value>Авто</value>
|
||||
</data>
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<value>Вмикає Еко на батареї та Стандартний на зарядці</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>Інше</value>
|
||||
</data>
|
||||
<data name="Overdrive" xml:space="preserve">
|
||||
<value>Овердрайв</value>
|
||||
</data>
|
||||
<data name="PerformanceMode" xml:space="preserve">
|
||||
<value>Режим Роботи</value>
|
||||
</data>
|
||||
<data name="PictureGif" xml:space="preserve">
|
||||
<value>Картинка / GIF</value>
|
||||
</data>
|
||||
<data name="PlayPause" xml:space="preserve">
|
||||
<value>Відтворення / Пауза</value>
|
||||
</data>
|
||||
<data name="PowerLimits" xml:space="preserve">
|
||||
<value>Ліміти Потужності (PPT)</value>
|
||||
</data>
|
||||
<data name="PPTExperimental" xml:space="preserve">
|
||||
<value>Налаштування лімітів потужності (PPT) є експериментальною функцією. Використовуйте обережно та на свій страх і ризик!</value>
|
||||
</data>
|
||||
<data name="PrintScreen" xml:space="preserve">
|
||||
<value>Print Screen</value>
|
||||
</data>
|
||||
<data name="Quit" xml:space="preserve">
|
||||
<value>Вихід</value>
|
||||
</data>
|
||||
<data name="RPM" xml:space="preserve">
|
||||
<value>Оберти</value>
|
||||
</data>
|
||||
<data name="RunOnStartup" xml:space="preserve">
|
||||
<value>Запускати на старті</value>
|
||||
</data>
|
||||
<data name="Shutdown" xml:space="preserve">
|
||||
<value>Вимикання</value>
|
||||
</data>
|
||||
<data name="Silent" xml:space="preserve">
|
||||
<value>Тихий</value>
|
||||
</data>
|
||||
<data name="Sleep" xml:space="preserve">
|
||||
<value>Сон</value>
|
||||
</data>
|
||||
<data name="StandardGPUTooltip" xml:space="preserve">
|
||||
<value>Вмикає dGPU для нормального використання</value>
|
||||
</data>
|
||||
<data name="StandardMode" xml:space="preserve">
|
||||
<value>Стандартний</value>
|
||||
</data>
|
||||
<data name="StartupError" xml:space="preserve">
|
||||
<value>Помилка запуску</value>
|
||||
</data>
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<value>Аура</value>
|
||||
</data>
|
||||
<data name="Turbo" xml:space="preserve">
|
||||
<value>Турбо</value>
|
||||
</data>
|
||||
<data name="TurnedOff" xml:space="preserve">
|
||||
<value>Вимкнений</value>
|
||||
</data>
|
||||
<data name="TurnOffOnBattery" xml:space="preserve">
|
||||
<value>Вимикати на батареї</value>
|
||||
</data>
|
||||
<data name="UltimateGPUTooltip" xml:space="preserve">
|
||||
<value>Підключає екран лептопу до dGPU, щоб підвищити FPS</value>
|
||||
</data>
|
||||
<data name="UltimateMode" xml:space="preserve">
|
||||
<value>Ультімейт</value>
|
||||
</data>
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>Версія</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>Вимкнення звуку</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>Тримати вікно завжди зверху</value>
|
||||
</data>
|
||||
</root>
|
||||
411
app/Properties/Strings.zh-CN.resx
Normal file
@@ -0,0 +1,411 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ACPIError" xml:space="preserve">
|
||||
<value>无法连接到ASUS ACPI。 没有它应用程序将无法运行。 请尝试安装Asus System Control Interface驱动。</value>
|
||||
</data>
|
||||
<data name="AlertDGPU" xml:space="preserve">
|
||||
<value>看起来 GPU 正在大量耗电,是否禁用?</value>
|
||||
</data>
|
||||
<data name="AlertDGPUTitle" xml:space="preserve">
|
||||
<value>节能模式</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOff" xml:space="preserve">
|
||||
<value>关闭独显直连需要重新启动</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOn" xml:space="preserve">
|
||||
<value>独显直连需要重启</value>
|
||||
</data>
|
||||
<data name="AlertUltimateTitle" xml:space="preserve">
|
||||
<value>现在重新启动吗?</value>
|
||||
</data>
|
||||
<data name="AnimationSpeed" xml:space="preserve">
|
||||
<value>动画速度</value>
|
||||
</data>
|
||||
<data name="AnimeMatrix" xml:space="preserve">
|
||||
<value>Anime Matrix 光显矩阵屏</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunning" xml:space="preserve">
|
||||
<value>应用已经在运行</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunningText" xml:space="preserve">
|
||||
<value>G-Helper已经在运行。 请查看系统托盘中的图标。</value>
|
||||
</data>
|
||||
<data name="ApplyFanCurve" xml:space="preserve">
|
||||
<value>应用自定义扇形曲线</value>
|
||||
</data>
|
||||
<data name="ApplyPowerLimits" xml:space="preserve">
|
||||
<value>应用功率限制</value>
|
||||
</data>
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<value>呼吸</value>
|
||||
</data>
|
||||
<data name="AuraColorCycle" xml:space="preserve">
|
||||
<value>彩色循环</value>
|
||||
</data>
|
||||
<data name="AuraFast" xml:space="preserve">
|
||||
<value>快速</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>正常</value>
|
||||
</data>
|
||||
<data name="AuraRainbow" xml:space="preserve">
|
||||
<value>彩虹</value>
|
||||
</data>
|
||||
<data name="AuraSlow" xml:space="preserve">
|
||||
<value>慢</value>
|
||||
</data>
|
||||
<data name="AuraStatic" xml:space="preserve">
|
||||
<value>恒亮(静态)</value>
|
||||
</data>
|
||||
<data name="AuraStrobe" xml:space="preserve">
|
||||
<value>闪烁</value>
|
||||
</data>
|
||||
<data name="AutoMode" xml:space="preserve">
|
||||
<value>自动</value>
|
||||
</data>
|
||||
<data name="AutoRefreshTooltip" xml:space="preserve">
|
||||
<value>使用电池时设置为60Hz,并在插上电源时恢复</value>
|
||||
</data>
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>唤醒时</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>平衡模式</value>
|
||||
</data>
|
||||
<data name="BatteryChargeLimit" xml:space="preserve">
|
||||
<value>电池充电限制</value>
|
||||
</data>
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>开机时</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>亮度</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>颜色</value>
|
||||
</data>
|
||||
<data name="CPUBoost" xml:space="preserve">
|
||||
<value>CPU 睿频</value>
|
||||
</data>
|
||||
<data name="Custom" xml:space="preserve">
|
||||
<value>自定义设置</value>
|
||||
</data>
|
||||
<data name="Default" xml:space="preserve">
|
||||
<value>默认</value>
|
||||
</data>
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<value>禁用屏幕快速显示(OD)</value>
|
||||
</data>
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<value>正在放电</value>
|
||||
</data>
|
||||
<data name="DownloadUpdate" xml:space="preserve">
|
||||
<value>下载更新</value>
|
||||
</data>
|
||||
<data name="EcoGPUTooltip" xml:space="preserve">
|
||||
<value>禁用独显以节省电池电量</value>
|
||||
</data>
|
||||
<data name="EcoMode" xml:space="preserve">
|
||||
<value>集显模式</value>
|
||||
</data>
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<value>更多</value>
|
||||
</data>
|
||||
<data name="ExtraSettings" xml:space="preserve">
|
||||
<value>更多设置</value>
|
||||
</data>
|
||||
<data name="FactoryDefaults" xml:space="preserve">
|
||||
<value>恢复默认设置</value>
|
||||
</data>
|
||||
<data name="FanCurves" xml:space="preserve">
|
||||
<value>风扇曲线</value>
|
||||
</data>
|
||||
<data name="FanProfileCPU" xml:space="preserve">
|
||||
<value>CPU 风扇配置文件</value>
|
||||
</data>
|
||||
<data name="FanProfileGPU" xml:space="preserve">
|
||||
<value>GPU 风扇配置文件</value>
|
||||
</data>
|
||||
<data name="FanProfileMid" xml:space="preserve">
|
||||
<value>中等风扇配置</value>
|
||||
</data>
|
||||
<data name="FanProfiles" xml:space="preserve">
|
||||
<value>风扇配置</value>
|
||||
</data>
|
||||
<data name="FansAndPower" xml:space="preserve">
|
||||
<value>风扇和电源</value>
|
||||
</data>
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>风扇与电源设置</value>
|
||||
</data>
|
||||
<data name="GPUChanging" xml:space="preserve">
|
||||
<value>切换中...</value>
|
||||
</data>
|
||||
<data name="GPUMode" xml:space="preserve">
|
||||
<value>显卡模式</value>
|
||||
</data>
|
||||
<data name="GPUModeEco" xml:space="preserve">
|
||||
<value>仅限核显</value>
|
||||
</data>
|
||||
<data name="GPUModeStandard" xml:space="preserve">
|
||||
<value>核显 + 独显</value>
|
||||
</data>
|
||||
<data name="GPUModeUltimate" xml:space="preserve">
|
||||
<value>独显直连</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>按键绑定</value>
|
||||
</data>
|
||||
<data name="Keyboard" xml:space="preserve">
|
||||
<value>键盘</value>
|
||||
</data>
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>电池模式下降低键盘亮度以省电,并在插上电源时恢复</value>
|
||||
</data>
|
||||
<data name="KeyboardBacklight" xml:space="preserve">
|
||||
<value>键盘背光</value>
|
||||
</data>
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<value>笔记本键盘</value>
|
||||
</data>
|
||||
<data name="LaptopScreen" xml:space="preserve">
|
||||
<value>笔记本屏幕</value>
|
||||
</data>
|
||||
<data name="MatrixBanner" xml:space="preserve">
|
||||
<value>Anime Matrix 标识</value>
|
||||
</data>
|
||||
<data name="MatrixBright" xml:space="preserve">
|
||||
<value>明亮</value>
|
||||
</data>
|
||||
<data name="MatrixClock" xml:space="preserve">
|
||||
<value>时钟</value>
|
||||
</data>
|
||||
<data name="MatrixDim" xml:space="preserve">
|
||||
<value>暗淡</value>
|
||||
</data>
|
||||
<data name="MatrixLogo" xml:space="preserve">
|
||||
<value>ROG logo</value>
|
||||
</data>
|
||||
<data name="MatrixMedium" xml:space="preserve">
|
||||
<value>中</value>
|
||||
</data>
|
||||
<data name="MatrixOff" xml:space="preserve">
|
||||
<value>关闭</value>
|
||||
</data>
|
||||
<data name="MatrixPicture" xml:space="preserve">
|
||||
<value>图片</value>
|
||||
</data>
|
||||
<data name="MaxRefreshTooltip" xml:space="preserve">
|
||||
<value>更高的刷新率和更低的延迟</value>
|
||||
</data>
|
||||
<data name="MinRefreshTooltip" xml:space="preserve">
|
||||
<value>调整刷新率为60Hz以节省电量</value>
|
||||
</data>
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>多区域设置</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>打开G-Helper窗口</value>
|
||||
</data>
|
||||
<data name="Optimized" xml:space="preserve">
|
||||
<value>自动切换</value>
|
||||
</data>
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<value>使用电池时切换到集显模式,并在插上电源后重新启用标准模式</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>其他</value>
|
||||
</data>
|
||||
<data name="Overdrive" xml:space="preserve">
|
||||
<value>OD</value>
|
||||
</data>
|
||||
<data name="PerformanceMode" xml:space="preserve">
|
||||
<value>性能模式</value>
|
||||
</data>
|
||||
<data name="PictureGif" xml:space="preserve">
|
||||
<value>图片/动图</value>
|
||||
</data>
|
||||
<data name="PlayPause" xml:space="preserve">
|
||||
<value>播放/暂停</value>
|
||||
</data>
|
||||
<data name="PowerLimits" xml:space="preserve">
|
||||
<value>功率限制 (PPT)</value>
|
||||
</data>
|
||||
<data name="PPTExperimental" xml:space="preserve">
|
||||
<value>功率限制 (PPT) 是实验性功能。 谨慎使用,风险自负!</value>
|
||||
</data>
|
||||
<data name="PrintScreen" xml:space="preserve">
|
||||
<value>截图</value>
|
||||
</data>
|
||||
<data name="Quit" xml:space="preserve">
|
||||
<value>退出</value>
|
||||
</data>
|
||||
<data name="RPM" xml:space="preserve">
|
||||
<value>RPM</value>
|
||||
</data>
|
||||
<data name="RunOnStartup" xml:space="preserve">
|
||||
<value>开机自启</value>
|
||||
</data>
|
||||
<data name="Shutdown" xml:space="preserve">
|
||||
<value>关机时</value>
|
||||
</data>
|
||||
<data name="Silent" xml:space="preserve">
|
||||
<value>静音模式</value>
|
||||
</data>
|
||||
<data name="Sleep" xml:space="preserve">
|
||||
<value>睡眠时</value>
|
||||
</data>
|
||||
<data name="StandardGPUTooltip" xml:space="preserve">
|
||||
<value>启用独显以供日常使用</value>
|
||||
</data>
|
||||
<data name="StandardMode" xml:space="preserve">
|
||||
<value>标准模式</value>
|
||||
</data>
|
||||
<data name="StartupError" xml:space="preserve">
|
||||
<value>启动错误</value>
|
||||
</data>
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<value>切换 Aura 模式</value>
|
||||
</data>
|
||||
<data name="Turbo" xml:space="preserve">
|
||||
<value>增强模式</value>
|
||||
</data>
|
||||
<data name="TurnedOff" xml:space="preserve">
|
||||
<value>已关闭</value>
|
||||
</data>
|
||||
<data name="TurnOffOnBattery" xml:space="preserve">
|
||||
<value>使用电池时关闭</value>
|
||||
</data>
|
||||
<data name="UltimateGPUTooltip" xml:space="preserve">
|
||||
<value>开启独显直连获得最佳帧率</value>
|
||||
</data>
|
||||
<data name="UltimateMode" xml:space="preserve">
|
||||
<value>独显直连</value>
|
||||
</data>
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>版本</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>静音</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>窗口置顶</value>
|
||||
</data>
|
||||
</root>
|
||||
411
app/Properties/Strings.zh-TW.resx
Normal file
@@ -0,0 +1,411 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ACPIError" xml:space="preserve">
|
||||
<value>無法連結到華碩 ACPI。 没有它,應用程式將無法執行。 嘗試安裝Asus System Control Interface</value>
|
||||
</data>
|
||||
<data name="AlertDGPU" xml:space="preserve">
|
||||
<value>看起来 GPU 正在大量使用,是否禁用它?</value>
|
||||
</data>
|
||||
<data name="AlertDGPUTitle" xml:space="preserve">
|
||||
<value>節能模式</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOff" xml:space="preserve">
|
||||
<value>關閉獨顯需要重新啟動</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOn" xml:space="preserve">
|
||||
<value>獨顯直連需要重啟</value>
|
||||
</data>
|
||||
<data name="AlertUltimateTitle" xml:space="preserve">
|
||||
<value>現在重新啟動嗎?</value>
|
||||
</data>
|
||||
<data name="AnimationSpeed" xml:space="preserve">
|
||||
<value>動畫速度</value>
|
||||
</data>
|
||||
<data name="AnimeMatrix" xml:space="preserve">
|
||||
<value>AnimeMatrix</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunning" xml:space="preserve">
|
||||
<value>程式已正在執行</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunningText" xml:space="preserve">
|
||||
<value>G-Helper已經在執行。 請確認右下工作列中的圖示。</value>
|
||||
</data>
|
||||
<data name="ApplyFanCurve" xml:space="preserve">
|
||||
<value>套用自定義風扇曲線</value>
|
||||
</data>
|
||||
<data name="ApplyPowerLimits" xml:space="preserve">
|
||||
<value>套用功率限制</value>
|
||||
</data>
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<value>呼吸</value>
|
||||
</data>
|
||||
<data name="AuraColorCycle" xml:space="preserve">
|
||||
<value>循環</value>
|
||||
</data>
|
||||
<data name="AuraFast" xml:space="preserve">
|
||||
<value>快速</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>正常</value>
|
||||
</data>
|
||||
<data name="AuraRainbow" xml:space="preserve">
|
||||
<value>彩虹</value>
|
||||
</data>
|
||||
<data name="AuraSlow" xml:space="preserve">
|
||||
<value>慢</value>
|
||||
</data>
|
||||
<data name="AuraStatic" xml:space="preserve">
|
||||
<value>靜態</value>
|
||||
</data>
|
||||
<data name="AuraStrobe" xml:space="preserve">
|
||||
<value>閃爍</value>
|
||||
</data>
|
||||
<data name="AutoMode" xml:space="preserve">
|
||||
<value>自動</value>
|
||||
</data>
|
||||
<data name="AutoRefreshTooltip" xml:space="preserve">
|
||||
<value>電池模式時自動60Hz</value>
|
||||
</data>
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>喚醒時</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>平衡模式</value>
|
||||
</data>
|
||||
<data name="BatteryChargeLimit" xml:space="preserve">
|
||||
<value>電池充電上限</value>
|
||||
</data>
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>開機時</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>亮度</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>顏色</value>
|
||||
</data>
|
||||
<data name="CPUBoost" xml:space="preserve">
|
||||
<value>CPU 加速</value>
|
||||
</data>
|
||||
<data name="Custom" xml:space="preserve">
|
||||
<value>自定義設置</value>
|
||||
</data>
|
||||
<data name="Default" xml:space="preserve">
|
||||
<value>預設</value>
|
||||
</data>
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<value>禁用螢幕加速OD</value>
|
||||
</data>
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<value>正在釋放電力</value>
|
||||
</data>
|
||||
<data name="DownloadUpdate" xml:space="preserve">
|
||||
<value>下載更新</value>
|
||||
</data>
|
||||
<data name="EcoGPUTooltip" xml:space="preserve">
|
||||
<value>禁用獨顯以節省電池電量</value>
|
||||
</data>
|
||||
<data name="EcoMode" xml:space="preserve">
|
||||
<value>節能模式</value>
|
||||
</data>
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<value>更多</value>
|
||||
</data>
|
||||
<data name="ExtraSettings" xml:space="preserve">
|
||||
<value>更多設定</value>
|
||||
</data>
|
||||
<data name="FactoryDefaults" xml:space="preserve">
|
||||
<value>恢復原廠設定</value>
|
||||
</data>
|
||||
<data name="FanCurves" xml:space="preserve">
|
||||
<value>風扇曲線</value>
|
||||
</data>
|
||||
<data name="FanProfileCPU" xml:space="preserve">
|
||||
<value>CPU 風扇設置文件</value>
|
||||
</data>
|
||||
<data name="FanProfileGPU" xml:space="preserve">
|
||||
<value>GPU 風扇設置文件</value>
|
||||
</data>
|
||||
<data name="FanProfileMid" xml:space="preserve">
|
||||
<value>中等風扇設置</value>
|
||||
</data>
|
||||
<data name="FanProfiles" xml:space="preserve">
|
||||
<value>風扇設置</value>
|
||||
</data>
|
||||
<data name="FansAndPower" xml:space="preserve">
|
||||
<value>風扇和電源</value>
|
||||
</data>
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>自定義設置</value>
|
||||
</data>
|
||||
<data name="GPUChanging" xml:space="preserve">
|
||||
<value>切換中...</value>
|
||||
</data>
|
||||
<data name="GPUMode" xml:space="preserve">
|
||||
<value>GPU 模式</value>
|
||||
</data>
|
||||
<data name="GPUModeEco" xml:space="preserve">
|
||||
<value>僅限內顯</value>
|
||||
</data>
|
||||
<data name="GPUModeStandard" xml:space="preserve">
|
||||
<value>內顯 + 獨顯</value>
|
||||
</data>
|
||||
<data name="GPUModeUltimate" xml:space="preserve">
|
||||
<value>獨立顯卡</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>按鍵綁定</value>
|
||||
</data>
|
||||
<data name="Keyboard" xml:space="preserve">
|
||||
<value>鍵盤</value>
|
||||
</data>
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>電池模式時自動降低鍵盤背光亮度以省電</value>
|
||||
</data>
|
||||
<data name="KeyboardBacklight" xml:space="preserve">
|
||||
<value>鍵盤背光</value>
|
||||
</data>
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<value>鍵盤背光:</value>
|
||||
</data>
|
||||
<data name="LaptopScreen" xml:space="preserve">
|
||||
<value>螢幕顯示</value>
|
||||
</data>
|
||||
<data name="MatrixBanner" xml:space="preserve">
|
||||
<value>横幅</value>
|
||||
</data>
|
||||
<data name="MatrixBright" xml:space="preserve">
|
||||
<value>明亮</value>
|
||||
</data>
|
||||
<data name="MatrixClock" xml:space="preserve">
|
||||
<value>時鐘</value>
|
||||
</data>
|
||||
<data name="MatrixDim" xml:space="preserve">
|
||||
<value>黯淡</value>
|
||||
</data>
|
||||
<data name="MatrixLogo" xml:space="preserve">
|
||||
<value>ROG logo</value>
|
||||
</data>
|
||||
<data name="MatrixMedium" xml:space="preserve">
|
||||
<value>中</value>
|
||||
</data>
|
||||
<data name="MatrixOff" xml:space="preserve">
|
||||
<value>關閉</value>
|
||||
</data>
|
||||
<data name="MatrixPicture" xml:space="preserve">
|
||||
<value>圖片</value>
|
||||
</data>
|
||||
<data name="MaxRefreshTooltip" xml:space="preserve">
|
||||
<value>更高的更新率和更低延遲</value>
|
||||
</data>
|
||||
<data name="MinRefreshTooltip" xml:space="preserve">
|
||||
<value>維持60Hz以節省電量</value>
|
||||
</data>
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>多區域</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>打開G-Helper視窗</value>
|
||||
</data>
|
||||
<data name="Optimized" xml:space="preserve">
|
||||
<value>自動模式</value>
|
||||
</data>
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<value>使用電池切換到節能模式,插入電源時切換到標準模式</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>其他</value>
|
||||
</data>
|
||||
<data name="Overdrive" xml:space="preserve">
|
||||
<value>OD</value>
|
||||
</data>
|
||||
<data name="PerformanceMode" xml:space="preserve">
|
||||
<value>性能模式:</value>
|
||||
</data>
|
||||
<data name="PictureGif" xml:space="preserve">
|
||||
<value>圖片/動圖</value>
|
||||
</data>
|
||||
<data name="PlayPause" xml:space="preserve">
|
||||
<value>播放/暫停</value>
|
||||
</data>
|
||||
<data name="PowerLimits" xml:space="preserve">
|
||||
<value>功率限制 (PPT)</value>
|
||||
</data>
|
||||
<data name="PPTExperimental" xml:space="preserve">
|
||||
<value>功率限制 (PPT) 是實驗性功能。 謹慎使用,風險自負!</value>
|
||||
</data>
|
||||
<data name="PrintScreen" xml:space="preserve">
|
||||
<value>截圖</value>
|
||||
</data>
|
||||
<data name="Quit" xml:space="preserve">
|
||||
<value>退出</value>
|
||||
</data>
|
||||
<data name="RPM" xml:space="preserve">
|
||||
<value>每分鐘轉數</value>
|
||||
</data>
|
||||
<data name="RunOnStartup" xml:space="preserve">
|
||||
<value>開機自動開啟</value>
|
||||
</data>
|
||||
<data name="Shutdown" xml:space="preserve">
|
||||
<value>關機時</value>
|
||||
</data>
|
||||
<data name="Silent" xml:space="preserve">
|
||||
<value>安靜模式</value>
|
||||
</data>
|
||||
<data name="Sleep" xml:space="preserve">
|
||||
<value>睡眠時</value>
|
||||
</data>
|
||||
<data name="StandardGPUTooltip" xml:space="preserve">
|
||||
<value>標準模式會啟用獨顯</value>
|
||||
</data>
|
||||
<data name="StandardMode" xml:space="preserve">
|
||||
<value>標準模式</value>
|
||||
</data>
|
||||
<data name="StartupError" xml:space="preserve">
|
||||
<value>啟動錯誤</value>
|
||||
</data>
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<value>切換Aura</value>
|
||||
</data>
|
||||
<data name="Turbo" xml:space="preserve">
|
||||
<value>極速模式</value>
|
||||
</data>
|
||||
<data name="TurnedOff" xml:space="preserve">
|
||||
<value>已關閉</value>
|
||||
</data>
|
||||
<data name="TurnOffOnBattery" xml:space="preserve">
|
||||
<value>電池模式時關閉</value>
|
||||
</data>
|
||||
<data name="UltimateGPUTooltip" xml:space="preserve">
|
||||
<value>開啟獨顯直連獲得最佳幀數</value>
|
||||
</data>
|
||||
<data name="UltimateMode" xml:space="preserve">
|
||||
<value>獨顯直連</value>
|
||||
</data>
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>版本</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>靜音</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>視窗置頂</value>
|
||||
</data>
|
||||
</root>
|
||||
7
app/Properties/launchSettings.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"profiles": {
|
||||
"GHelper": {
|
||||
"commandName": "Project"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
BIN
app/Resources/icons8-balance-symbol-96.png
Normal file
|
After Width: | Height: | Size: 710 B |
BIN
app/Resources/icons8-bicycle-48 (1).png
Normal file
|
After Width: | Height: | Size: 924 B |
|
Before Width: | Height: | Size: 421 B After Width: | Height: | Size: 421 B |
BIN
app/Resources/icons8-fan-48.png
Normal file
|
After Width: | Height: | Size: 992 B |
BIN
app/Resources/icons8-fan-head-96.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
app/Resources/icons8-fan-speed-48.png
Normal file
|
After Width: | Height: | Size: 870 B |
BIN
app/Resources/icons8-fiat-500-48.png
Normal file
|
After Width: | Height: | Size: 784 B |
BIN
app/Resources/icons8-game-controller-48.png
Normal file
|
After Width: | Height: | Size: 611 B |
BIN
app/Resources/icons8-help-64.bmp
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
app/Resources/icons8-help-64.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
app/Resources/icons8-keyboard-48.png
Normal file
|
After Width: | Height: | Size: 515 B |
|
Before Width: | Height: | Size: 260 B After Width: | Height: | Size: 260 B |
BIN
app/Resources/icons8-launch-96.png
Normal file
|
After Width: | Height: | Size: 648 B |
BIN
app/Resources/icons8-leaf-48.png
Normal file
|
After Width: | Height: | Size: 851 B |
BIN
app/Resources/icons8-leaf-96.png
Normal file
|
After Width: | Height: | Size: 910 B |
BIN
app/Resources/icons8-matrix-desktop-48.png
Normal file
|
After Width: | Height: | Size: 428 B |
BIN
app/Resources/icons8-organic-food-96.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
app/Resources/icons8-organic-food-961.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
app/Resources/icons8-processor-96.png
Normal file
|
After Width: | Height: | Size: 710 B |
BIN
app/Resources/icons8-project-management-48 (1).png
Normal file
|
After Width: | Height: | Size: 837 B |
BIN
app/Resources/icons8-project-management-48.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
app/Resources/icons8-rocket-48.png
Normal file
|
After Width: | Height: | Size: 763 B |
BIN
app/Resources/icons8-spa-flower-48.png
Normal file
|
After Width: | Height: | Size: 949 B |
BIN
app/Resources/icons8-spa-flower-96.png
Normal file
|
After Width: | Height: | Size: 954 B |
|
Before Width: | Height: | Size: 885 B After Width: | Height: | Size: 885 B |
BIN
app/Resources/icons8-speed-96.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
app/Resources/icons8-video-48.png
Normal file
|
After Width: | Height: | Size: 635 B |
|
Before Width: | Height: | Size: 400 B After Width: | Height: | Size: 400 B |
BIN
app/Resources/icons8-xbox-controller-96.png
Normal file
|
After Width: | Height: | Size: 724 B |
BIN
app/Resources/itsfine.jpg
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
1144
app/Settings.Designer.cs
generated
Normal file
1468
app/Settings.cs
Normal file
118
app/Settings.resx
Normal file
@@ -0,0 +1,118 @@
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="pictureBattery.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
|
||||
DAAACwwBP0AiyAAAAY1JREFUaEPtlz1OAzEQhVdIFFyCH0EFDQ1wAhDcgxPACYCOA/BzGTo6aKGKFOAE
|
||||
0FCABO9FsbSK3uI8J9kFMZ/0FdmMZ+xovLGrIAiCIAiCQLIMr+EL/IRfM5Y1WOsKsvZE7ME3qAq1IWvv
|
||||
wiJWYJeTT77CJWjDtlEJu/AS2rAPVbIufII2bWzYceVcbFQix1V4CKe1j2xUEscEN+ANVDGONiqJY505
|
||||
eATfoYp15N48gFnUYEfFOryDKt7xGWZRA0flhHbgOewNnyWbmIcn8APW412zqEGj8u9+ASY24Rl8GHz6
|
||||
mS34CFXeccyiBik5iW2Yg4vi4rjIBBfPH0HlzZlFDWqS7XAK2R5N1OPZbmw7tt/G8JlrFjUo5z3khBQq
|
||||
vtSpbWIlX5XHkK/OOiq2RE5+H2ZRgx1v4RpMqBhHG5XElccIHie4EPW9o82fP8yx11SyLuxDm9L38yy8
|
||||
gDa8UP+WK+UiLIIXaiZQiduQtYsv9Qme53kn5bWujY3NGqzFtin+5YMgCIIgCP4PVfUNWXMTLz5Z0sYA
|
||||
AAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<data name="picturePerf.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
|
||||
DAAACwwBP0AiyAAAA31JREFUaEPt2NnrTkEcx/HHmj37hTWJP0BCSe5ESSnklivJUsiuXFiSIlsS98qW
|
||||
CLmTP0FKUkqkrNn37f2p39T07fucmfM85/eQzqdexW/mzJlzzpyZeU6jTp06df6L9MQsbMdF3MVrfOui
|
||||
f+tvF7ANM6Fj/nrGYT+e4HdJj7EPY9HxjMBJfIXXuTK+4ASGoyNZjpfwOtOOF1iGbktv6K57J6/Scehc
|
||||
laY/rsI7YfADt7EReqFHow8GYCJmYzNu4ju8NoIr0Dkrie5GUec/4QDU4dzMh9dWTBdRyZMoGjbnMR5l
|
||||
oxfWa886hraiF9Zr+Cc05/dAHF3MGtzAPXzARzzCNWzAAmit8Nr1LEFL0VTpzTbqvC4sjuby09B7YOsX
|
||||
UVvrMBA7u/5mPccwlE6zoaM7H2cR3sGrW0SdX4mQIfDqSemhpBXWW6Q05uNhsxbqiK2XYjuvrIdXV7TY
|
||||
jUF2tD2wjWi2iV9Y3fmqOq//p9rai6z0gre30VQZojFfxbBRcjovmgiyNoBahOzBejnjef4MbJ2UnM6f
|
||||
w1BonfAWuxlIRi+pPVArbIiGUSuzTc6dn4cQrdhxmWxBMpdgD9T8HaIX15YX+YVViNNs2MTn2Qpbrkkk
|
||||
Gf3wsAdqWIVchy23NINp36OZYxDiNOu8aMsSor2TLb+DZF7BHjgKIfdhy61mj7qo8/IQIZNgy7XlTsab
|
||||
//siJGf28ebswSjqvGjrEaLV2ZZrPUhGleyB8TB4D1tueRegqderG9PNCdEF2/KsC9Dewx44BSEPYMst
|
||||
bwh5L6Wl4RkyFbb8GZLxXuI5CNFO05ZbGoa6CD0J0b9zfj9rxxoyF7Y86yXWYmIP3ISQstNoGasRoou2
|
||||
5WeRzA7YA28hZAJSPwlboTbjvZYWT1tH35SSmQ57oBofiRDt/W2ddp1CiLYt3mo/Dclow/QU9uB4M6ft
|
||||
9lvYOq16g/gD10HYOvoQZn8BNs0e2AY+I37E2nCV3RN5tDYsRIguRFt3W283sqOO6pumbUTfNuO7oEZt
|
||||
nbLijqltby+mGSx+Qlk5AtuQ6LdryGR4dcrQliFkF7w6h1E6emm9fZEe+QpopVTDtrysQ1BbzfZJ2v+0
|
||||
/N10MWyDnbYUbUVfjr2GO+Eo2o5+I5f5EFWVyj4tKvrQehneibqDZqJ+qDR6EnrhcjZlrVLbOofOVadO
|
||||
nTr/fBqNP4sju3bXhjy/AAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureGPU.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
|
||||
DAAACwwBP0AiyAAAAZVJREFUaEPtmTtOxDAURYcGGtgAsCJo6PisACE2ALTAvvgVsB0KQBRwT2HJGl3y
|
||||
EtloHPCRjiKNfJ/sOLGV8aLT6XSa4Fa+ya/MD3kjm2dNvsq888l3OQu408szkJwlfQCr5k8NoAVZEV/k
|
||||
vhyFK9KKBzLEBVvxWYa4YCuO2ptcsCVDXKim9/JQbst1uSOP5IN07ZcNcaEafspTOcSZpJ3LJ0NcCC8k
|
||||
d8zB75fS5ZJR5xMMwuWTIS6Em3KILelyeCen8ChdHQxxIeQOD83AlXQ55JmfwrF0dTDEhUrlhZ0CL7ar
|
||||
gyEuVOpPM/cTG9LVwRAXKnXqDOxKVwdDXAhLViHW+SmcSFcHQ1wIS1YhNqmx8Jn7JF0dDHEhLFmFkPV9
|
||||
DOfS5ZMhLlRDdthoEHT+13biWrJJsc7zojJzXHnmhx6b3BAXaskQF2rF2X8PzP6LbE+GuOAq5V8J7vyo
|
||||
zkMeniX/ZgB5u5oWM7ZY3q6mxYwtxsuVt61hlTOJdFbAdQjOFWoOglrXshg6xqnNLI6YOp1OZ1UsFt/W
|
||||
cWCm8IATjAAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="pictureScreen.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
|
||||
DAAACwwBP0AiyAAAANBJREFUaEPt2DESAUEUhOF1PQQuxd1wHAGi1U8galU9ktej+qv6M71myyZriYiI
|
||||
+Fd7dEFPtDZV311n2KEhdXh2wc4OSHZF7CKdnZGs87H51gPJ2AUckrGxQzI2dkjGxg7J2NghGRs7JGNj
|
||||
h2Rs7JCMjR2SsbFDMjZ2SMbGDsnY2CEZGzskY2OHZGzskIyNHZKxsUOy6V8pp3+pr/9h2EU626IhdRN1
|
||||
191/bNUZhg8fMeiE7og9h47VWY/obYNuiH3QuTrzR93NtL9ARET8aFleMDJURjd/4/oAAAAASUVORK5C
|
||||
YII=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
168
app/Slider.cs
Normal file
@@ -0,0 +1,168 @@
|
||||
using System.Drawing.Drawing2D;
|
||||
|
||||
namespace WinFormsSliderBar
|
||||
{
|
||||
public static class GraphicsExtensions
|
||||
{
|
||||
public static void DrawCircle(this Graphics g, Pen pen,
|
||||
float centerX, float centerY, float radius)
|
||||
{
|
||||
g.DrawEllipse(pen, centerX - radius, centerY - radius,
|
||||
radius + radius, radius + radius);
|
||||
}
|
||||
|
||||
public static void FillCircle(this Graphics g, Brush brush,
|
||||
float centerX, float centerY, float radius)
|
||||
{
|
||||
g.FillEllipse(brush, centerX - radius, centerY - radius,
|
||||
radius + radius, radius + radius);
|
||||
}
|
||||
}
|
||||
|
||||
public class Slider : Control
|
||||
{
|
||||
private float _radius;
|
||||
private PointF _thumbPos;
|
||||
private SizeF _barSize;
|
||||
private PointF _barPos;
|
||||
|
||||
private int _step = 5;
|
||||
|
||||
public Color accentColor = Color.FromArgb(255, 58, 174, 239);
|
||||
public Color borderColor = Color.White;
|
||||
|
||||
public event EventHandler ValueChanged;
|
||||
|
||||
public Slider()
|
||||
{
|
||||
// This reduces flicker
|
||||
DoubleBuffered = true;
|
||||
}
|
||||
|
||||
private int _min = 0;
|
||||
public int Min
|
||||
{
|
||||
get => _min;
|
||||
set
|
||||
{
|
||||
_min = value;
|
||||
RecalculateParameters();
|
||||
}
|
||||
}
|
||||
|
||||
private int _max = 100;
|
||||
public int Max
|
||||
{
|
||||
get => _max;
|
||||
set
|
||||
{
|
||||
_max = value;
|
||||
RecalculateParameters();
|
||||
}
|
||||
}
|
||||
|
||||
private int _value = 50;
|
||||
public int Value
|
||||
{
|
||||
get => _value;
|
||||
set
|
||||
{
|
||||
|
||||
value = (int)Math.Round(value / (float)_step) * _step;
|
||||
|
||||
if (_value != value)
|
||||
{
|
||||
_value = value;
|
||||
ValueChanged?.Invoke(this, EventArgs.Empty);
|
||||
RecalculateParameters();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
base.OnPaint(e);
|
||||
|
||||
Brush brushAccent = new SolidBrush(accentColor);
|
||||
Brush brushEmpty = new SolidBrush(Color.Gray);
|
||||
Brush brushBorder = new SolidBrush(borderColor);
|
||||
|
||||
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
e.Graphics.FillRectangle(brushEmpty,
|
||||
_barPos.X, _barPos.Y, _barSize.Width, _barSize.Height);
|
||||
e.Graphics.FillRectangle(brushAccent,
|
||||
_barPos.X, _barPos.Y, _thumbPos.X - _barPos.X, _barSize.Height);
|
||||
|
||||
e.Graphics.FillCircle(brushBorder, _thumbPos.X, _thumbPos.Y, _radius);
|
||||
e.Graphics.FillCircle(brushAccent, _thumbPos.X, _thumbPos.Y, 0.7f * _radius);
|
||||
}
|
||||
|
||||
protected override void OnResize(EventArgs e)
|
||||
{
|
||||
base.OnResize(e);
|
||||
RecalculateParameters();
|
||||
}
|
||||
|
||||
private void RecalculateParameters()
|
||||
{
|
||||
_radius = 0.4F * ClientSize.Height;
|
||||
_barSize = new SizeF(ClientSize.Width - 4 * _radius, ClientSize.Height * 0.15F);
|
||||
_barPos = new PointF(_radius, (ClientSize.Height - _barSize.Height) / 2);
|
||||
_thumbPos = new PointF(
|
||||
_barSize.Width / (Max - Min) * (Value - Min) + _barPos.X,
|
||||
_barPos.Y + 0.5f * _barSize.Height);
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
bool _moving = false;
|
||||
SizeF _delta;
|
||||
|
||||
protected override void OnMouseDown(MouseEventArgs e)
|
||||
{
|
||||
base.OnMouseDown(e);
|
||||
|
||||
// Difference between tumb and mouse position.
|
||||
_delta = new SizeF(e.Location.X - _thumbPos.X, e.Location.Y - _thumbPos.Y);
|
||||
if (_delta.Width * _delta.Width + _delta.Height * _delta.Height <= _radius * _radius)
|
||||
{
|
||||
// Clicking inside thumb.
|
||||
_moving = true;
|
||||
}
|
||||
|
||||
_calculateValue(e);
|
||||
|
||||
}
|
||||
|
||||
private void _calculateValue(MouseEventArgs e)
|
||||
{
|
||||
float thumbX = e.Location.X; // - _delta.Width;
|
||||
if (thumbX < _barPos.X)
|
||||
{
|
||||
thumbX = _barPos.X;
|
||||
}
|
||||
else if (thumbX > _barPos.X + _barSize.Width)
|
||||
{
|
||||
thumbX = _barPos.X + _barSize.Width;
|
||||
}
|
||||
Value = (int)Math.Round(Min + (thumbX - _barPos.X) * (Max - Min) / _barSize.Width);
|
||||
|
||||
}
|
||||
|
||||
protected override void OnMouseMove(MouseEventArgs e)
|
||||
{
|
||||
base.OnMouseMove(e);
|
||||
if (_moving)
|
||||
{
|
||||
_calculateValue(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnMouseUp(MouseEventArgs e)
|
||||
{
|
||||
base.OnMouseUp(e);
|
||||
_moving = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
64
app/Startup.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
using Microsoft.Win32.TaskScheduler;
|
||||
using System.Diagnostics;
|
||||
using System.Security.Principal;
|
||||
|
||||
public class Startup
|
||||
{
|
||||
|
||||
static string taskName = "GHelper";
|
||||
|
||||
public static bool IsScheduled()
|
||||
{
|
||||
TaskService taskService = new TaskService();
|
||||
return (taskService.RootFolder.AllTasks.Any(t => t.Name == taskName));
|
||||
}
|
||||
|
||||
public static void Schedule()
|
||||
{
|
||||
|
||||
string strExeFilePath = Application.ExecutablePath;
|
||||
|
||||
if (strExeFilePath is null) return;
|
||||
|
||||
var userId = WindowsIdentity.GetCurrent().Name;
|
||||
|
||||
using (TaskDefinition td = TaskService.Instance.NewTask())
|
||||
{
|
||||
td.RegistrationInfo.Description = "G-Helper Auto Start";
|
||||
td.Triggers.Add(new LogonTrigger { UserId = userId });
|
||||
td.Actions.Add(strExeFilePath);
|
||||
|
||||
td.Settings.StopIfGoingOnBatteries = false;
|
||||
td.Settings.DisallowStartIfOnBatteries = false;
|
||||
td.Settings.ExecutionTimeLimit = TimeSpan.Zero;
|
||||
|
||||
Debug.WriteLine(strExeFilePath);
|
||||
Debug.WriteLine(userId);
|
||||
|
||||
try
|
||||
{
|
||||
TaskService.Instance.RootFolder.RegisterTaskDefinition(taskName, td);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show("Can't create a start up task. Try running Task Scheduler by hand and manually deleting GHelper task if it exists there.", "Scheduler Error", MessageBoxButtons.OK);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void UnSchedule()
|
||||
{
|
||||
using (TaskService taskService = new TaskService())
|
||||
{
|
||||
try
|
||||
{
|
||||
taskService.RootFolder.DeleteTask(taskName);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show("Can't remove task. Try running Task Scheduler by hand and manually deleting GHelper task if it exists there.", "Scheduler Error", MessageBoxButtons.OK);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
94
app/ToastForm.cs
Normal file
@@ -0,0 +1,94 @@
|
||||
using System.Drawing.Drawing2D;
|
||||
using OSD;
|
||||
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
|
||||
static class Drawing
|
||||
{
|
||||
|
||||
public static GraphicsPath RoundedRect(Rectangle bounds, int radius)
|
||||
{
|
||||
int diameter = radius * 2;
|
||||
Size size = new Size(diameter, diameter);
|
||||
Rectangle arc = new Rectangle(bounds.Location, size);
|
||||
GraphicsPath path = new GraphicsPath();
|
||||
|
||||
if (radius == 0)
|
||||
{
|
||||
path.AddRectangle(bounds);
|
||||
return path;
|
||||
}
|
||||
|
||||
path.AddArc(arc, 180, 90);
|
||||
arc.X = bounds.Right - diameter;
|
||||
path.AddArc(arc, 270, 90);
|
||||
arc.Y = bounds.Bottom - diameter;
|
||||
path.AddArc(arc, 0, 90);
|
||||
arc.X = bounds.Left;
|
||||
path.AddArc(arc, 90, 90);
|
||||
path.CloseFigure();
|
||||
return path;
|
||||
}
|
||||
|
||||
public static void FillRoundedRectangle(this Graphics graphics, Brush brush, Rectangle bounds, int cornerRadius)
|
||||
{
|
||||
using (GraphicsPath path = RoundedRect(bounds, cornerRadius))
|
||||
{
|
||||
graphics.FillPath(brush, path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ToastForm : OSDNativeForm
|
||||
{
|
||||
|
||||
protected static string toastText = "Balanced";
|
||||
protected static System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
|
||||
|
||||
protected override void PerformPaint(PaintEventArgs e)
|
||||
{
|
||||
Brush brush = new SolidBrush(Color.FromArgb(150,Color.Black));
|
||||
Drawing.FillRoundedRectangle(e.Graphics, brush, this.Bound, 10);
|
||||
|
||||
StringFormat format = new StringFormat();
|
||||
format.LineAlignment = StringAlignment.Center;
|
||||
format.Alignment = StringAlignment.Center;
|
||||
|
||||
e.Graphics.DrawString(toastText,
|
||||
new Font("Segoe UI", 16f, FontStyle.Bold),
|
||||
new SolidBrush(Color.White),
|
||||
new PointF(this.Bound.Width/2, this.Bound.Height / 2),
|
||||
format);
|
||||
}
|
||||
|
||||
public void RunToast(string text)
|
||||
{
|
||||
|
||||
toastText = text;
|
||||
Screen screen1 = Screen.FromHandle(base.Handle);
|
||||
|
||||
Width = 300;
|
||||
Height = 100;
|
||||
X = (screen1.Bounds.Width - this.Width)/2;
|
||||
Y = screen1.Bounds.Height - 300 - this.Height;
|
||||
|
||||
Show();
|
||||
|
||||
timer.Stop();
|
||||
timer.Tick -= timer_Tick;
|
||||
|
||||
timer.Tick += timer_Tick;
|
||||
timer.Enabled = true;
|
||||
timer.Interval = 2000;
|
||||
timer.Start();
|
||||
}
|
||||
|
||||
private void timer_Tick(object? sender, EventArgs e)
|
||||
{
|
||||
timer.Stop();
|
||||
Hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,9 @@
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|
||||
<security>
|
||||
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<!-- UAC Manifest Options
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||
|
||||
<!-- UAC Manifest Options
|
||||
If you want to change the Windows User Account Control level replace the
|
||||
requestedExecutionLevel node with one of the following.
|
||||
|
||||
@@ -16,7 +18,6 @@
|
||||
Remove this element if your application requires this virtualization for backwards
|
||||
compatibility.
|
||||
-->
|
||||
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
@@ -53,13 +54,16 @@
|
||||
Makes the application long-path aware. See https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->
|
||||
|
||||
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<windowsSettings>
|
||||
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
|
||||
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
|
||||
</windowsSettings>
|
||||
</application>
|
||||
<windowsSettings>
|
||||
<!--<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitor/dpiAwareness>-->
|
||||
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">System</dpiAwareness>
|
||||
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
|
||||
</windowsSettings>
|
||||
</application>
|
||||
|
||||
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
|
||||
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
|
||||
|
||||
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity
|
||||
BIN
app/favicon.ico
Normal file
|
After Width: | Height: | Size: 96 KiB |