commit 46c4d7d17944a557237d311c86dea9aa974e4242 Author: fankesyooni Date: Tue Sep 12 13:48:06 2023 +0800 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..496ee2c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store \ No newline at end of file diff --git a/Hacker/ebook.exe b/Hacker/ebook.exe new file mode 100644 index 0000000..91fd442 Binary files /dev/null and b/Hacker/ebook.exe differ diff --git a/Hacker/ebook.mscr b/Hacker/ebook.mscr new file mode 100644 index 0000000..8b38482 --- /dev/null +++ b/Hacker/ebook.mscr @@ -0,0 +1,50 @@ +## +# Hanvon EBook Hacker +# Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +# https://github.com/fankes/HanvonEBookHacker +# +# This software is non-free but opensource software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License +# as published by the Free Software Foundation; either +# version 3 of the License, or any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# and eula along with this software. If not, see +# +# +# This file is created by fankes on 2023/9/9. +## + +# 外置 TF 卡 +tfCard = "\Storage Card" + +# 外置 TF 卡的启动项 +launcherProgram = tfCard & "\Programs\Launcher\Launcher.exe" + +# 记录 TF 卡状态 +tfCardStatus = "未知" + +If(DirExists(tfCard)) + tfCardStatus = "已插入" +Else + tfCardStatus = "未插入" +EndIf + +# 延迟确保系统已经启动 +Sleep(2500) + +# 一直等待直到存在启动项 +While(NOT FileExists(launcherProgram)) + SleepMessage(10, "未发现启动项:" & launcherProgram & "^NL^^NL^\ + TF 卡状态:" & tfCardStatus & "^NL^^NL^\ + 请插入 TF 卡并将需要启动的应用程序放置于此位置。^NL^^NL^\ + 将在以下秒数后自动重试。^NL^", "Hanvon EBook Launcher Hacker") +EndWhile + +# 运行启动项 +Run(launcherProgram) \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d482682 --- /dev/null +++ b/LICENSE @@ -0,0 +1,660 @@ +# GNU AFFERO GENERAL PUBLIC LICENSE + +Version 3, 19 November 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +### Preamble + +The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains +free software for all its users. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + +A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + +The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + +An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing +under this license. + +The precise terms and conditions for copying, distribution and +modification follow. + +### TERMS AND CONDITIONS + +#### 0. Definitions. + +"This License" refers to version 3 of the GNU Affero General Public +License. + +"Copyright" also means copyright-like laws that apply to other kinds +of works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of +an exact copy. The resulting work is called a "modified version" of +the earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based +on the Program. + +To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user +through a computer network, with no transfer of a copy, is not +conveying. + +An interactive user interface displays "Appropriate Legal Notices" to +the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +#### 1. Source Code. + +The "source code" for a work means the preferred form of the work for +making modifications to it. "Object code" means any non-source form of +a work. + +A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same +work. + +#### 2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 makes +it unnecessary. + +#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with +respect to the covered work, and you disclaim any intention to limit +operation or modification of the work as a means of enforcing, against +the work's users, your or third parties' legal rights to forbid +circumvention of technological measures. + +#### 4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +#### 5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these +conditions: + +- a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. +- b) The work must carry prominent notices stating that it is + released under this License and any conditions added under + section 7. This requirement modifies the requirement in section 4 + to "keep intact all notices". +- c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. +- d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +#### 6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these +ways: + +- a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. +- b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the Corresponding + Source from a network server at no charge. +- c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. +- d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. +- e) Convey the object code using peer-to-peer transmission, + provided you inform other peers where the object code and + Corresponding Source of the work are being offered to the general + public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, +family, or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of +coverage. For a particular product received by a particular user, +"normally used" refers to a typical or common use of that class of +product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected +to use, the product. A product is a consumer product regardless of +whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant +mode of use of the product. + +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to +install and execute modified versions of a covered work in that User +Product from a modified version of its Corresponding Source. The +information must suffice to ensure that the continued functioning of +the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or +updates for a work that has been modified or installed by the +recipient, or for the User Product in which it has been modified or +installed. Access to a network may be denied when the modification +itself materially and adversely affects the operation of the network +or violates the rules and protocols for communication across the +network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +#### 7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: + +- a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or +- b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or +- c) Prohibiting misrepresentation of the origin of that material, + or requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or +- d) Limiting the use for publicity purposes of names of licensors + or authors of the material; or +- e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or +- f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions + of it) with contractual assumptions of liability to the recipient, + for any liability that these contractual assumptions directly + impose on those licensors and authors. + +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the +above requirements apply either way. + +#### 8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +#### 9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run +a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +#### 10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +#### 11. Patents. + +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims owned +or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is "discriminatory" if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you +are a party to an arrangement with a third party that is in the +business of distributing software, under which you make payment to the +third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties +who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by +you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the +covered work, unless you entered into that arrangement, or that patent +license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +#### 12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under +this License and any other pertinent obligations, then as a +consequence you may not convey it at all. For example, if you agree to +terms that obligate you to collect a royalty for further conveying +from those to whom you convey the Program, the only way you could +satisfy both those terms and this License would be to refrain entirely +from conveying the Program. + +#### 13. Remote Network Interaction; Use with the GNU General Public License. + +Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your +version supports such interaction) an opportunity to receive the +Corresponding Source of your version by providing access to the +Corresponding Source from a network server at no charge, through some +standard or customary means of facilitating copying of software. This +Corresponding Source shall include the Corresponding Source for any +work covered by version 3 of the GNU General Public License that is +incorporated pursuant to the following paragraph. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + +#### 14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU Affero General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever +published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions +of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +#### 15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +#### 16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +#### 17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + +### How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively state +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper +mail. + +If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for +the specific requirements. + +You should also get your employer (if you work as a programmer) or +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. For more information on this, and how to apply and follow +the GNU AGPL, see . \ No newline at end of file diff --git a/Launcher/Daemon.exe b/Launcher/Daemon.exe new file mode 100644 index 0000000..91fd442 Binary files /dev/null and b/Launcher/Daemon.exe differ diff --git a/Launcher/Daemon.mscr b/Launcher/Daemon.mscr new file mode 100644 index 0000000..c7710c0 --- /dev/null +++ b/Launcher/Daemon.mscr @@ -0,0 +1,83 @@ +## +# Hanvon EBook Hacker +# Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +# https://github.com/fankes/HanvonEBookHacker +# +# This software is non-free but opensource software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License +# as published by the Free Software Foundation; either +# version 3 of the License, or any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# and eula along with this software. If not, see +# +# +# This file is created by fankes on 2023/9/10. +## + +# 这将表示为 explorer.exe 的进程名 +explorerProgramProcess = "explorer.exe" + +# Hanvon 主程序 (已重命名) +mainProgram = "\NAND\ebook\ebook.original.exe" +# 这将表示为它的进程名 +mainProgramProcess = "ebook.original.exe" + +# 开机画面 LOGO 文件 +startLogo = "\NAND\start.jpg" + +# 启动无限循环监听 +# 可在循环内加入自己的事件 +While(True) + + # 获取当前程序窗口标题 + currentWindow = ActiveWindow() + + # 进入 Windows CE 的标识标题 + toWinceTitle = "进入 WinCE 桌面" + + # 判断主程序在运行 + If(ProcExists(mainProgramProcess)) + # 判断收到指定窗口标题 + # 说明:这里进行了一次重新启动进程 + # 这是为了防止在二级界面中屏幕刷新功能出错 + If(currentWindow eq toWinceTitle) + # 强制结束进程 + Kill(mainProgramProcess) + # 此脚本不会帮你自动启动 explorer.exe + # 请确保其已在 "Launcher.mscr" 中启动 + If(ProcExists(explorerProgramProcess)) + # 延迟以继续 + SleepMessage(1, "正在准备 Windows CE 桌面...", "请稍候") + # 重新启动 + Run(mainProgram) + # 根据有无开机画面设置延迟 + delay = 3 + If(FileExists(startLogo)) + delay = 7 + EndIf + # 延迟以继续 + SleepMessage(delay, "正在进入 Windows CE 桌面...", "请稍候") + # 再次结束进程 + Kill(mainProgramProcess) + Else + SleepMessage(15, "无法进入 Windows CE 桌面。^NL^^NL^\ + 当前系统的 explorer.exe 并未在运行,\ + 请修改启动脚本使其在启动项中启动,然后重启机器。^NL^^NL^\ + 15 秒内无任何操作后将重启主程序。^NL^", "启动失败") + Run(mainProgram) + EndIf + # 延迟防止重复执行 + Sleep(1500) + EndIf + EndIf + + # 设置下一个监听周期 + Sleep(500) + +EndWhile \ No newline at end of file diff --git a/Launcher/Launcher.exe b/Launcher/Launcher.exe new file mode 100644 index 0000000..91fd442 Binary files /dev/null and b/Launcher/Launcher.exe differ diff --git a/Launcher/Launcher.mscr b/Launcher/Launcher.mscr new file mode 100644 index 0000000..0d7d3d1 --- /dev/null +++ b/Launcher/Launcher.mscr @@ -0,0 +1,91 @@ +## +# Hanvon EBook Hacker +# Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +# https://github.com/fankes/HanvonEBookHacker +# +# This software is non-free but opensource software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License +# as published by the Free Software Foundation; either +# version 3 of the License, or any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# and eula along with this software. If not, see +# +# +# This file is created by fankes on 2023/9/9. +## + +# 设备常用的几个 Flash 存储区 (不同型号可能不一样) +# - Hive 注册表: \HIVE +# - Hanvon 主程序: \NAND +# - 用户内置存储: \USER +# - 外置 TF 卡: \Storage Card + +# 守护进程 +# 你可以直接修改 "Daemon.mscr" 中的内容 +daemonProgram = "\Storage Card\Programs\Launcher\Daemon.exe" + +# 核心程序 nk.exe +nkProgram = "\Windows\nk.exe" + +# Windows 资源管理器 +# 首次启动会进入 Windows CE 桌面 +explorerProgram = "\Windows\explorer.exe" + +# Windows 控制面板 +controlProgram = "\Windows\control.exe" + +# Hanvon 主程序 (已重命名) +mainProgram = "\NAND\ebook\ebook.original.exe" +# 这将表示为它的进程名 +mainProgramProcess = "ebook.original.exe" + +# Hanvon 自带浏览器 (部分机型未在其设备中加入此功能但保留了程序文件) +webBrowserProgram = "\NAND\ebook\webbrowser\WebBrowser.exe" + +# Windows 默认的桌面目录 +desktopFolderEng = "\Windows\Desktop" +desktopFolderChs = "\Windows\桌面" + +# 为主程序、浏览器创建快捷方式 + +# 你可以双击桌面的 "EBook" 重新回到主程序 +mainShortcutName = "EBook.lnk" + +# 你可以双击桌面的 "浏览器" 打开内置的浏览器 +webBrowserShortcutName = "浏览器.lnk" + +If(DirExists(desktopFolderEng)) + CreateShortCut(desktopFolderEng & "\" & mainShortcutName, mainProgram) + If(FileExists(webBrowserProgram)) + CreateShortCut(desktopFolderEng & "\" & webBrowserShortcutName, webBrowserProgram) + EndIf +EndIf +If(DirExists(desktopFolderChs)) + CreateShortCut(desktopFolderChs & "\" & mainShortcutName, mainProgram) + If(FileExists(webBrowserProgram)) + CreateShortCut(desktopFolderChs & "\" & webBrowserShortcutName, webBrowserProgram) + EndIf +EndIf + +# 启动守护进程 +Run(daemonProgram) + +# 启动项 1 +Run(explorerProgram) + +# 延迟等待下一个操作 +Sleep(1500) + +# 启动项 2 +Run(mainProgram) + +# (可选) 如果你想保持进入 Windows CE 桌面 +# 可以在其启动后直接结束它 +# Sleep(2500) +# Kill(mainProgramProcess) \ No newline at end of file diff --git a/MortScript/MortRunner.exe b/MortScript/MortRunner.exe new file mode 100644 index 0000000..91fd442 Binary files /dev/null and b/MortScript/MortRunner.exe differ diff --git a/MortScript/MortScript.exe b/MortScript/MortScript.exe new file mode 100644 index 0000000..ea4a16f Binary files /dev/null and b/MortScript/MortScript.exe differ diff --git a/MortScript/README.md b/MortScript/README.md new file mode 100644 index 0000000..98cb1d2 --- /dev/null +++ b/MortScript/README.md @@ -0,0 +1,5 @@ +# MortScript + +杩欎簺浜岃繘鍒舵枃浠舵潵鑷 [MortScript](http://www.sto-helit.de/index.php?module=page&entry=ms_overview)锛岀洰鍓嶅叾缃戠珯搴旇鏄仠姝㈡洿鏂颁簡銆 + +杩欓噷鐨勪簩杩涘埗鏂囦欢浠呬负 MIPS 鐗堟湰锛屼綘搴旇鑳藉緢杞绘澗鍦版壘鍒板畠鐨 ARM 鐗堟湰銆 \ No newline at end of file diff --git a/MortScript/mortzip.dll b/MortScript/mortzip.dll new file mode 100644 index 0000000..c2c07a7 Binary files /dev/null and b/MortScript/mortzip.dll differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..f0e4637 --- /dev/null +++ b/README.md @@ -0,0 +1,114 @@ +# Hanvon EBook Hacker + +[![GitHub license](https://img.shields.io/github/license/fankes/HanvonEBookHacker?color=blue)](https://github.com/fankes/HanvonEBookHacker/blob/master/LICENSE) + +姹夌帇 Windows CE 6 (MIPS) 绯诲垪鐢电焊涔﹁秺鐙辨暀绋嬨 + +杩欐槸涓涓湰搴旇浜 2014-2015 骞村氨瀹屾垚鐨勯」鐩紝鐜板湪浣滀负鎴戝褰撳勾鐮旂┒鎴愭灉鐨勬儏鎬锛岄噸鏂扮紪鍐欏苟寮婧愩 + +寰楃泭浜庡叾绯荤粺浣跨敤鐨勬槸 Windows 宓屽叆寮忓钩鍙帮紝鍙紪绋嬪苟鍏锋湁浜涜杞欢鐢熸侊紝瀵逛簬鍏舵満甯︾郴缁熷唴瀹瑰苟鏈仛鍔犲瘑涓斿叏閮ㄥ啓鍦ㄤ竴寮 TF 鍗′笂锛岃秺鐙遍毦搴﹀拰鎴愭湰鐩稿杈冧綆锛屼笖鏈夐儴鍒 MIPS 鐨勫簲鐢ㄧ▼搴忎緥濡 CorePlayer 鍙嫇灞曡繖鍙板瞾鏈堝巻鍙茬殑鏈哄櫒涓浜涘彲鐜╂с + +鐜板浠 Windows CE 璁惧宸茶 Android 甯傚満鍙栦唬锛屽井杞篃鏀惧純浜嗚繖涓郴缁燂紝杩欎篃鏄竴涓椂浠g殑缁堢粨銆 + +鐗瑰埆鎰熻阿 [MortScript](http://www.sto-helit.de/index.php?module=page&entry=ms_overview) 涓鸿嚜鍔ㄥ寲鑴氭湰鍋氬嚭鐨勫法澶ц础鐚紝鐩墠鍏剁綉绔欏簲璇ユ槸鍋滄鏇存柊浜嗐 + +杩欎簺鏁欑▼鍜岃祫婧愬畬鍏ㄦ槸鍑轰簬涓汉鐖卞ソ缂栧啓锛屼笉鎻愪緵浠讳綍鍙潬鎬т繚闅滐紝涓斾粎鍦ㄥ瀷鍙 `F30III` 涓婃祴璇曢氳繃锛岃嚜琛屾媶鍗告満鍣ㄥ紩璧风殑鎹熷け鐢辨偍鑷鎵挎媴銆 + +濡傛偍鍙戠幇鏈暀绋嬩腑瀛樺湪渚电姱鎮ㄦ垨鍏徃 (缁勭粐) 鐨勪换浣曞唴瀹癸紝璇烽殢鏃惰仈绯绘垜锛屾垜浼氱珛鍗宠繘琛屽垹闄ゃ + +鐗堟潈鎵鏈夛細@fankes + +## 瀹炵幇鍘熺悊 + +閫氳繃鍋锋鎹㈡煴娉曟浛鎹 `ebook.exe`锛屽疄鐜颁簡鍏嶄慨鏀圭郴缁熸敞鍐岃〃鑷畾涔夊惎鍔ㄩ」鍔熻兘銆 + +## 蹇熷紑濮 + +- 鍏虫満锛屽彇涓嬫満鍣ㄥ悗鐩栵紝涓虹‘淇濆畨鍏紝鏂紑鐢垫睜鐢垫簮 + +- 鍙栧嚭鏈哄甫 TF 鍗″苟浣跨敤 USB 杩炴帴鐢佃剳锛岃繘鍏ョ浜屼釜鍒嗗尯鐨 `ebook` 鐩綍 + +- 閲嶅懡鍚 `ebook` 鐩綍涓嬬殑 `ebook.exe` 涓 `ebook.original.exe` + +- 灏 `Hacker` 鐩綍涓殑鎵鏈夋枃浠舵斁缃簬褰撳墠鐩綍 + +- 灏 `MortScript` 鐩綍涓櫎浜 `MortRunner.exe` 鍜 `README.md` 涔嬪鐨勬墍鏈夋枃浠舵斁缃簬褰撳墠鐩綍 + +- 鍑嗗涓寮 TF 鍗★紝澶у皬涓嶈秴杩 32 GB + +- 灏 `Launcher` 鐩綍鏀剧疆浜庡噯澶囧ソ TF 鍗℃牴鐩綍鍚嶄负 `Programs` 鐨勬柊寤烘枃浠跺す涓 + +- 鎸夌収姝ラ 5锛屽鏀剧疆鍚庣殑 `Launcher` 鐩綍杩涜鐩稿悓鐨勬搷浣 + +- 灏嗘満甯 TF 鍗℃彃鍥炴満鍣紝鍚屾椂鎻掑叆鍑嗗濂界殑澶栫疆 TF 鍗 + +- 涓婄數寮鏈 + +鍚庢湡浣犲皢鏃犻渶鍐嶆鎷嗕笅鏈哄甫 TF 鍗★紝鐩存帴浣跨敤澶栫疆 TF 鍗″畨瑁呬綘闇瑕佺殑搴旂敤绋嬪簭鍗冲彲銆 + +## 鍦ㄤ富绋嬪簭涓繘鍏 WinCE 妗岄潰 + +浣犲彧闇瑕佹柊寤轰竴涓枃浠跺す鍛藉悕涓 `杩涘叆 WinCE 妗岄潰` 鍗冲彲銆 + +鐒跺悗灏嗚繖涓枃浠跺す鏀惧埌鈥滅數瀛愪功搴撯濇垨鈥淧C 涓嬭浇鈥濅腑涓涓綘鍠滄鐨勭洰褰曟垨鏍圭洰褰曚腑銆 + +鐐瑰嚮杩欎釜鏂囦欢澶瑰嵆鍙鍑轰富绋嬪簭锛屽洖鍒 WinCE 妗岄潰锛岃繖涓鍒囩殑鍓嶆彁涓轰綘骞舵湭鑷繁淇敼 `Launcher` 涓殑鐩稿叧鑴氭湰骞朵笖纭繚宸叉纭惎鍔 `explorer.exe`銆 + +杩欎竴杩囩▼澶ф闇瑕 3-7 绉 (鍙栧喅浜庝綘鏄惁璁剧疆浜嗗紑鏈虹敾闈)锛屽湪杩欐湡闂翠細閲嶆柊鍑虹幇涓荤▼搴忕晫闈紝璇疯愬績绛夊緟瀹屽叏杩涘叆 WinCE 妗岄潰鍚庡啀浣跨敤銆 + +浣犲彲浠ヤ慨鏀 `Launcher` 鐩綍涓殑 `Daemon.mscr` 鏉ヨ嚜瀹氫箟鐩戝惉鐨勫悕绉般 + +### 瀹炵幇鍘熺悊 + +閫氳繃鐩戝惉 `ebook.exe` 瀵硅嚜韬獥鍙e悕绉扮殑鏇存柊鏉ュ垽鏂綋鍓嶇敤鎴风殑鎿嶄綔銆 + +鍙嶇紪璇 `ebook.exe` 鍙兘鑺辫垂鐨勭簿鍔涗細鏇村ぇ锛屼笖涓嶅煎緱銆 + +鎵浠ヨ繖涓柟妗堝氨寰堝畬缇庣殑鍒╃敤浜嗚繖涓紡娲炴潵瀹炵幇闅忔椂閮藉彲浠ヤ粠涓荤▼搴忎腑閫鍑哄苟杩涘叆 WinCE 妗岄潰鐨勫姛鑳斤紝涔熸病鏈夊涓荤▼搴忕殑鍔熻兘浜х敓浠讳綍鐮村潖琛屼负銆 + +## 娉ㄦ剰浜嬮」 & 璇存槑 + +- `explorer.exe` 鍙兘鏃犳硶淇濊瘉鍦ㄦ瘡涓郴缁熷浐浠剁増鏈腑閮借兘鍚姩鎴愬姛锛屽鏋滃惎鍔ㄦ椂鍑虹幇搴旂敤绋嬪簭鍙戠敓寮傚父鐨勫璇濇锛屼綘闇瑕佹墜鍔ㄨ繍琛屼竴娆 `nk.exe` 鍚庡啀娆″皾璇曞惎鍔 (鍦 `Launcher.mscr` 涓凡缁忛缃浉鍏冲姛鑳) + +- Hanvon 涓荤▼搴忎細鑷姩鍚姩瑙︽懜鍜岃儗鍏夐┍鍔紝杩欐槸闈炲父閲嶈鐨勫姛鑳斤紝鐩墠鏄棤娉曟墜鍔ㄥ姞杞藉搴旂殑椹卞姩绋嬪簭鐨勶紝濡傛灉涓嶅惎鍔ㄥ氨浼氬鑷存満鍣ㄦ棤娉曟搷浣滐紝鍦ㄤ富绋嬪簭鍚姩鍚庯紝鍙傝 [鍦ㄤ富绋嬪簭涓繘鍏 WinCE 妗岄潰](#鍦ㄤ富绋嬪簭涓繘鍏-wince-妗岄潰)锛屽氨鑳界户缁娇鐢 Windows CE + +- 褰撲富绋嬪簭鍏抽棴鍚庯紝鑳屽厜璋冭妭浠ュ強閿佸睆銆佸叧鏈哄姛鑳介兘灏嗕細澶辨晥锛屼綘鍙互閲嶆柊鎵撳紑涓荤▼搴忚繘琛屾搷浣滐紝杩欎簺鍔熻兘鍙楅檺浜庝富绋嬪簭鐨勭粺涓鍖栬皟鐢ㄧ鐞嗭紝鐩墠鏃犳硶鎵嬪姩瀹炵幇瀵瑰畠浠殑璋冪敤 + +- USB 杩炴帴鍔熻兘浠呮敮鎸佷粠涓荤▼搴忎腑璋冪敤锛屼富绋嬪簭鏈惎鍔ㄧ殑鏃跺欏畠鍙兘鍏呯數锛屼篃涓嶈兘杩炴帴鐢佃剳浣跨敤 ActiveAsync锛岀洰鍓嶄篃鏈兘鍙戠幇涓绘澘鐣欐湁涓插彛閫氳鐨勬Ы浣 + +- 鍦 Windows CE 涓紝`F30III` 鐨勫疄浣撹彍鍗曟寜閽浉褰撲簬 `Enter` 鍔熻兘 + +- 鍦 Windows CE 涓紝璐磋繎灞忓箷杈圭紭鐨勮Е鎺у彲鑳戒細鏃犳晥鎴栧亸绉伙紝杩欐槸瑙︽帶鎶鏈喅瀹氱殑锛屼緥濡傚彲鑳芥棤娉曠偣鍑诲叏灞忓彸涓婅鐨勫叧闂寜閽侀《閮ㄧ殑鑿滃崟鏍忔垨鏄乏涓嬭鐨勫紑濮嬭彍鍗曟寜閽互鍙婁换鍔℃爮鍜屽彸涓嬭鐨勬墭鐩樺尯鍩 + +- 鎷ユ湁 WiFi 鍔熻兘鐨勬満鍣紝璇峰湪涓荤▼搴忎腑杩炴帴 WiFi 浣垮叾鍒涘缓涓涓綉缁滆澶囷紝鐒跺悗鍙傝 [鍦ㄤ富绋嬪簭涓繘鍏 WinCE 妗岄潰](#鍦ㄤ富绋嬪簭涓繘鍏-wince-妗岄潰)锛屽氨鍙互浣跨敤缃戠粶鍔熻兘浜 + +- 涓荤▼搴忔湭鍚姩鐨勬儏鍐典笅锛岄儴鍒嗙晫闈㈠彲鑳戒細鍒锋柊涓嶅強鏃讹紝姝ゆ椂浣犲彲浠ヤ娇鐢 `Tools` 鐩綍涓殑 `ScreenRefresh` 宸ュ叿鏉ユ墜鍔ㄥ埛鏂帮紝濡傛灉渚濈劧鏃犳硶鍒锋柊锛岃閲嶆柊鍚姩涓荤▼搴忕劧鍚庡弬鑰 [鍦ㄤ富绋嬪簭涓繘鍏 WinCE 妗岄潰](#鍦ㄤ富绋嬪簭涓繘鍏-wince-妗岄潰) + +## 鍏跺畠鍐呭 + +浣犲簲璇ュ彲浠ュ湪 `Launcher` 鐩綍鐨勮剼鏈腑鐪嬪埌姣忎竴涓懡浠ょ殑娉ㄩ噴骞跺彲浠ユ寜闇杩涜淇敼銆 + +浣犺繕鍙互鍦 `Tools` 鐩綍涓壘鍒颁竴浜涘疄鐢ㄥ伐鍏枫 + +## 璁稿彲璇 + +- [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html) + +``` +Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +``` + +鐗堟潈鎵鏈 漏 2017-2023 Fankes Studio(qzmmcn@163.com) \ No newline at end of file diff --git a/Tools/ScreenRefresh/README.md b/Tools/ScreenRefresh/README.md new file mode 100644 index 0000000..6f34bd6 --- /dev/null +++ b/Tools/ScreenRefresh/README.md @@ -0,0 +1,11 @@ +# Screen Refresh + +杩愯骞冲彴锛歐indows CE (鎻愪緵鐨勪簩杩涘埗鏂囦欢涓 MIPSII) + +杩欐槸涓涓傜敤浜庣數瀛愬ⅷ姘村睆鐨勭畝鏄撳睆骞曞埛鏂板伐鍏凤紝鍔熻兘涓洪粦鐧介棯鐑佸睆骞曚互杈惧埌鍒锋柊鐩殑銆 + +浣犲彲浠ュ湪 `sources` 鐩綍鎵惧埌鍏舵簮浠g爜銆 + +## 浣跨敤鏂规硶 + +鐩存帴杩愯 `ScreenRefresh.exe` 鍗冲彲绔嬪嵆鍒锋柊鏁翠釜灞忓箷銆 \ No newline at end of file diff --git a/Tools/ScreenRefresh/ScreenRefresh.exe b/Tools/ScreenRefresh/ScreenRefresh.exe new file mode 100644 index 0000000..7d19dc8 Binary files /dev/null and b/Tools/ScreenRefresh/ScreenRefresh.exe differ diff --git a/Tools/ScreenRefresh/sources/ScreenRefresh.ncb b/Tools/ScreenRefresh/sources/ScreenRefresh.ncb new file mode 100644 index 0000000..d26b6d3 Binary files /dev/null and b/Tools/ScreenRefresh/sources/ScreenRefresh.ncb differ diff --git a/Tools/ScreenRefresh/sources/ScreenRefresh.sln b/Tools/ScreenRefresh/sources/ScreenRefresh.sln new file mode 100644 index 0000000..f2dfd00 --- /dev/null +++ b/Tools/ScreenRefresh/sources/ScreenRefresh.sln @@ -0,0 +1,29 @@ +锘縈icrosoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ScreenRefresh", "ScreenRefresh\ScreenRefresh.vcproj", "{D1A27E77-B853-49A0-B1ED-BAF6B0B4F4B9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|CHSINT SDK For WinCE 6.0 (ARMV4I) = Debug|CHSINT SDK For WinCE 6.0 (ARMV4I) + Debug|STANDARDSDK_500 (MIPSII) = Debug|STANDARDSDK_500 (MIPSII) + Release|CHSINT SDK For WinCE 6.0 (ARMV4I) = Release|CHSINT SDK For WinCE 6.0 (ARMV4I) + Release|STANDARDSDK_500 (MIPSII) = Release|STANDARDSDK_500 (MIPSII) + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D1A27E77-B853-49A0-B1ED-BAF6B0B4F4B9}.Debug|CHSINT SDK For WinCE 6.0 (ARMV4I).ActiveCfg = Debug|CHSINT SDK For WinCE 6.0 (ARMV4I) + {D1A27E77-B853-49A0-B1ED-BAF6B0B4F4B9}.Debug|CHSINT SDK For WinCE 6.0 (ARMV4I).Build.0 = Debug|CHSINT SDK For WinCE 6.0 (ARMV4I) + {D1A27E77-B853-49A0-B1ED-BAF6B0B4F4B9}.Debug|CHSINT SDK For WinCE 6.0 (ARMV4I).Deploy.0 = Debug|CHSINT SDK For WinCE 6.0 (ARMV4I) + {D1A27E77-B853-49A0-B1ED-BAF6B0B4F4B9}.Debug|STANDARDSDK_500 (MIPSII).ActiveCfg = Debug|STANDARDSDK_500 (MIPSII) + {D1A27E77-B853-49A0-B1ED-BAF6B0B4F4B9}.Debug|STANDARDSDK_500 (MIPSII).Build.0 = Debug|STANDARDSDK_500 (MIPSII) + {D1A27E77-B853-49A0-B1ED-BAF6B0B4F4B9}.Debug|STANDARDSDK_500 (MIPSII).Deploy.0 = Debug|STANDARDSDK_500 (MIPSII) + {D1A27E77-B853-49A0-B1ED-BAF6B0B4F4B9}.Release|CHSINT SDK For WinCE 6.0 (ARMV4I).ActiveCfg = Release|CHSINT SDK For WinCE 6.0 (ARMV4I) + {D1A27E77-B853-49A0-B1ED-BAF6B0B4F4B9}.Release|CHSINT SDK For WinCE 6.0 (ARMV4I).Build.0 = Release|CHSINT SDK For WinCE 6.0 (ARMV4I) + {D1A27E77-B853-49A0-B1ED-BAF6B0B4F4B9}.Release|CHSINT SDK For WinCE 6.0 (ARMV4I).Deploy.0 = Release|CHSINT SDK For WinCE 6.0 (ARMV4I) + {D1A27E77-B853-49A0-B1ED-BAF6B0B4F4B9}.Release|STANDARDSDK_500 (MIPSII).ActiveCfg = Release|STANDARDSDK_500 (MIPSII) + {D1A27E77-B853-49A0-B1ED-BAF6B0B4F4B9}.Release|STANDARDSDK_500 (MIPSII).Build.0 = Release|STANDARDSDK_500 (MIPSII) + {D1A27E77-B853-49A0-B1ED-BAF6B0B4F4B9}.Release|STANDARDSDK_500 (MIPSII).Deploy.0 = Release|STANDARDSDK_500 (MIPSII) + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal \ No newline at end of file diff --git a/Tools/ScreenRefresh/sources/ScreenRefresh.suo b/Tools/ScreenRefresh/sources/ScreenRefresh.suo new file mode 100644 index 0000000..90902c7 Binary files /dev/null and b/Tools/ScreenRefresh/sources/ScreenRefresh.suo differ diff --git a/Tools/ScreenRefresh/sources/ScreenRefresh/ReadMe.txt b/Tools/ScreenRefresh/sources/ScreenRefresh/ReadMe.txt new file mode 100644 index 0000000..6edfc78 --- /dev/null +++ b/Tools/ScreenRefresh/sources/ScreenRefresh/ReadMe.txt @@ -0,0 +1,62 @@ +======================================================================== + WIN32 应用程序:ScreenRefresh 项目概述 +======================================================================== + +应用程序向导已为您创建了此 ScreenRefresh 应用程序。 + +此文件概述了组成 ScreenRefresh 应用程序的每个文件 +的内容。 + + +ScreenRefresh.vcproj + 这是使用应用程序向导生成的 VC++ 项目的主项目文件。 + 它包含有关生成该文件所使用的 Visual C++ 版本的信息,以及 + 有关在应用程序向导中选择的平台、配置和项目功能 + 的信息。 + +ScreenRefresh.cpp + 这是主应用程序源文件。 + +///////////////////////////////////////////////////////////////////////////// +应用程序向导创建了下列资源: + +ScreenRefresh.rc + 这是程序使用的所有 Microsoft Windows 资源的清单 + (当针对使用标准 Windows CE 外壳程序的平台 + 进行编译时)。它包括存储在 RES 子目录中的图标、位图 + 和光标。此文件可以直接在 Microsoft Visual C++ + 中进行编辑。如果 .rc 文件保持不变,数据节中的定义 + 将保持为它们所定义为的数值的十六进制版本, + 而不是定义的友好名称。 + +ScreenRefresh.rc2 + 此文件包含不由 Microsoft + Visual C++ 编辑的资源。您应将所有无法由资源编辑器编辑的资源 + 放置到此文件中。 + +Resource.h + 这是标准头文件,它定义新的资源 ID。 + Microsoft Visual C++ 读取并更新此文件。 + + + + + +ScreenRefresh.ico + 这是用作应用程序图标 (32x32) 的图标文件。 + 此图标包括在主资源文件 ScreenRefresh.rc 中。 + +///////////////////////////////////////////////////////////////////////////// +其他标准文件: + +StdAfx.h,StdAfx.cpp + 这些文件用于生成名为 ScreenRefresh.pch 的预编译头 (PCH) 文件 + 和名为 StdAfx.obj 的预编译类型文件。 + +///////////////////////////////////////////////////////////////////////////// +其他注释: + +应用程序向导使用“TODO:”注释指示 +应添加或自定义的源代码部分。 + +/////////////////////////////////////////////////////////////////////////////s \ No newline at end of file diff --git a/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.aps b/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.aps new file mode 100644 index 0000000..4eddf5c Binary files /dev/null and b/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.aps differ diff --git a/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.cpp b/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.cpp new file mode 100644 index 0000000..54cdb09 --- /dev/null +++ b/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.cpp @@ -0,0 +1,223 @@ +// Hanvon EBook Hacker +// Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +// https://github.com/fankes/HanvonEBookHacker +// +// This software is non-free but opensource software: you can redistribute it +// and/or modify it under the terms of the GNU Affero General Public License +// as published by the Free Software Foundation; either +// version 3 of the License, or any later version. +// +// This software is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// and eula along with this software. If not, see +// +// +// This file is created by fankes on 2023/9/12. +// +// ScreenRefresh.cpp : 定义应用程序的入口点。 + +#include "stdafx.h" +#include "ScreenRefresh.h" + +#define MAX_LOADSTRING 100 + +// 全局变量: +HINSTANCE g_hInst; // 当前实例 +HWND g_hWndCommandBar; // 命令栏句柄 + +// 此代码模块中包含的函数的前向声明: +ATOM MyRegisterClass(HINSTANCE, LPTSTR); +BOOL InitInstance(HINSTANCE, int); +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); + +int WINAPI WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPTSTR lpCmdLine, + int nCmdShow) +{ + MSG msg; + + // 执行应用程序初始化: + if (!InitInstance(hInstance, nCmdShow)) + { + return FALSE; + } + + HACCEL hAccelTable; + hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_SCREENREFRESH)); + + // 主消息循环: + while (GetMessage(&msg, NULL, 0, 0)) + { + if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + return (int)msg.wParam; +} + +// +// 函数: MyRegisterClass() +// +// 目的: 注册窗口类。 +// +// 注释: +// +ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass) +{ + WNDCLASS wc; + + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SCREENREFRESH)); + wc.hCursor = 0; + wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); + wc.lpszMenuName = 0; + wc.lpszClassName = szWindowClass; + + return RegisterClass(&wc); +} + +// +// 函数: InitInstance(HINSTANCE, int) +// +// 目的: 保存实例句柄并创建主窗口 +// +// 注释: +// +// 在此函数中,我们在全局变量中保存实例句柄并 +// 创建和显示主程序窗口。 +// +BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) +{ + HWND hWnd; + TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本 + TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名 + + g_hInst = hInstance; // 将实例句柄存储在全局变量中 + + LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); + LoadString(hInstance, IDC_SCREENREFRESH, szWindowClass, MAX_LOADSTRING); + + if (!MyRegisterClass(hInstance, szWindowClass)) + { + return FALSE; + } + + // 获取屏幕尺寸 + int screenWidth = GetSystemMetrics(SM_CXSCREEN); + int screenHeight = GetSystemMetrics(SM_CYSCREEN); + + // 创建全屏窗口 + hWnd = CreateWindow(szWindowClass, L"ScreenRefresh", WS_POPUP | WS_VISIBLE, + 0, 0, screenWidth, screenHeight, NULL, NULL, hInstance, NULL); + + if (!hWnd) + { + return FALSE; + } + + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + + if (g_hWndCommandBar) + { + CommandBar_Show(g_hWndCommandBar, TRUE); + } + + return TRUE; +} + +// +// 函数: WndProc(HWND, UINT, WPARAM, LPARAM) +// +// 目的: 处理主窗口的消息。 +// +// WM_COMMAND - 处理应用程序菜单 +// WM_PAINT - 绘制主窗口 +// WM_DESTROY - 发送退出消息并返回 +// +// +LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + static int s_nFlashCount = 0; + static bool s_bIsBlack = false; + static UINT_PTR s_nTimerId = 0; + + HWND taskbarWnd = FindWindow(L"HHTaskBar", NULL); + + switch (msg) + { + case WM_CREATE: + // 创建定时器 + s_nTimerId = SetTimer(hWnd, 1, 1000, NULL); + if (taskbarWnd != NULL) + { + // 隐藏任务栏 + ShowWindow(taskbarWnd, SW_HIDE); + } + break; + + case WM_TIMER: + // 处理定时器消息 + s_bIsBlack = !s_bIsBlack; + InvalidateRect(hWnd, NULL, TRUE); + + if (++s_nFlashCount >= 3) + { + // 停止定时器 + KillTimer(hWnd, s_nTimerId); + s_nTimerId = 0; + + // 关闭窗口 + PostMessage(hWnd, WM_CLOSE, 0, 0); + } + break; + + case WM_PAINT: + { + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hWnd, &ps); + + // 根据背景颜色绘制矩形 + RECT rect; + GetClientRect(hWnd, &rect); + HBRUSH hBrush = CreateSolidBrush(s_bIsBlack ? RGB(0, 0, 0) : RGB(255, 255, 255)); + FillRect(hdc, &rect, hBrush); + DeleteObject(hBrush); + + EndPaint(hWnd, &ps); + break; + } + + case WM_CLOSE: + if (taskbarWnd != NULL) + { + // 显示任务栏 + ShowWindow(taskbarWnd, SW_SHOW); + } + // 销毁窗口 + DestroyWindow(hWnd); + break; + + case WM_DESTROY: + // 退出应用程序 + PostQuitMessage(0); + break; + + default: + return DefWindowProc(hWnd, msg, wParam, lParam); + } + + return 0; +} \ No newline at end of file diff --git a/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.h b/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.h new file mode 100644 index 0000000..aaa5d84 --- /dev/null +++ b/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.h @@ -0,0 +1,22 @@ +// Hanvon EBook Hacker +// Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +// https://github.com/fankes/HanvonEBookHacker +// +// This software is non-free but opensource software: you can redistribute it +// and/or modify it under the terms of the GNU Affero General Public License +// as published by the Free Software Foundation; either +// version 3 of the License, or any later version. +// +// This software is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// and eula along with this software. If not, see +// +// +// This file is created by fankes on 2023/9/12. + +#pragma once +#include "resource.h" \ No newline at end of file diff --git a/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.ico b/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.ico new file mode 100644 index 0000000..d551aa3 Binary files /dev/null and b/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.ico differ diff --git a/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.rc b/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.rc new file mode 100644 index 0000000..e40549d --- /dev/null +++ b/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.rc @@ -0,0 +1,155 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#include "resdefce.h" +#undef APSTUDIO_HIDDEN_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// 中文(中华人民共和国) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) +#ifdef _WIN32 +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED +#pragma code_page(936) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_SCREENREFRESH ICON "ScreenRefresh.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDC_SCREENREFRESH ACCELERATORS +BEGIN + "A", IDM_HELP_ABOUT, VIRTKEY, CONTROL, NOINVERT + "Q", IDOK, VIRTKEY, CONTROL, NOINVERT +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#include ""resdefce.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n" + "LANGUAGE 4, 2\r\n" + "#pragma code_page(936)\r\n" + "#include ""ScreenRefresh.rc2"" // 非 Microsoft Visual C++ 编辑的资源\r\n" + "#endif\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080404b0" + BEGIN + VALUE "FileDescription", "Windows CE 下电子墨水屏的简易屏幕刷新工具。" + VALUE "FileVersion", "1, 0, 0, 1" + VALUE "InternalName", "屏幕刷新" + VALUE "LegalCopyright", "Copyright (C) 2017-2023 Fankes Studio" + VALUE "OriginalFilename", "ScreenRefresh.exe" + VALUE "ProductName", "屏幕刷新" + VALUE "ProductVersion", "1, 0, 0, 1" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x804, 1200 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDS_APP_TITLE "ScreenRefresh" + IDC_SCREENREFRESH "SCREENREFRESH" +END + +STRINGTABLE +BEGIN + IDS_TOOLS "工具" +END + +#endif // 中文(中华人民共和国) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) +LANGUAGE 4, 2 +#pragma code_page(936) +#include "ScreenRefresh.rc2" // 非 Microsoft Visual C++ 编辑的资源 +#endif + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.rc2 b/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.rc2 new file mode 100644 index 0000000..8735f99 --- /dev/null +++ b/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.rc2 @@ -0,0 +1,11 @@ +// +// ScreenRefresh.RC2 - Microsoft Visual C++ 不会直接编辑的资源 +// + +#ifdef APSTUDIO_INVOKED +#error 此文件不能用 Microsoft Visual C++ 编辑 +#endif //APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// 在此处添加手动编辑的资源... diff --git a/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.vcproj b/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.vcproj new file mode 100644 index 0000000..910318c --- /dev/null +++ b/Tools/ScreenRefresh/sources/ScreenRefresh/ScreenRefresh.vcproj @@ -0,0 +1,467 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tools/ScreenRefresh/sources/ScreenRefresh/resource.h b/Tools/ScreenRefresh/sources/ScreenRefresh/resource.h new file mode 100644 index 0000000..77e3598 --- /dev/null +++ b/Tools/ScreenRefresh/sources/ScreenRefresh/resource.h @@ -0,0 +1,42 @@ +// Hanvon EBook Hacker +// Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +// https://github.com/fankes/HanvonEBookHacker +// +// This software is non-free but opensource software: you can redistribute it +// and/or modify it under the terms of the GNU Affero General Public License +// as published by the Free Software Foundation; either +// version 3 of the License, or any later version. +// +// This software is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// and eula along with this software. If not, see +// +// +// This file is created by fankes on 2023/9/12. + +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by ScreenRefresh.rc +// +#define IDS_APP_TITLE 1 +#define IDC_SCREENREFRESH 2 +#define IDI_SCREENREFRESH 101 +#define IDS_TOOLS 104 +#define IDM_HELP_ABOUT 40002 +#define IDC_STATIC -1 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 129 +#define _APS_NEXT_COMMAND_VALUE 32771 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 110 +#endif +#endif \ No newline at end of file diff --git a/Tools/ScreenRefresh/sources/ScreenRefresh/stdafx.cpp b/Tools/ScreenRefresh/sources/ScreenRefresh/stdafx.cpp new file mode 100644 index 0000000..2fc16cb --- /dev/null +++ b/Tools/ScreenRefresh/sources/ScreenRefresh/stdafx.cpp @@ -0,0 +1,29 @@ +// Hanvon EBook Hacker +// Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +// https://github.com/fankes/HanvonEBookHacker +// +// This software is non-free but opensource software: you can redistribute it +// and/or modify it under the terms of the GNU Affero General Public License +// as published by the Free Software Foundation; either +// version 3 of the License, or any later version. +// +// This software is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// and eula along with this software. If not, see +// +// +// This file is created by fankes on 2023/9/12. +// + +// stdafx.cpp : 只包括标准包含文件的源文件 +// ScreenRefresh.pch 将作为预编译头 +// stdafx.obj 将包含预编译类型信息 + +#include "stdafx.h" + +// TODO: 在 STDAFX.H 中 +// 引用任何所需的附加头文件,而不是在此文件中引用 \ No newline at end of file diff --git a/Tools/ScreenRefresh/sources/ScreenRefresh/stdafx.h b/Tools/ScreenRefresh/sources/ScreenRefresh/stdafx.h new file mode 100644 index 0000000..9186177 --- /dev/null +++ b/Tools/ScreenRefresh/sources/ScreenRefresh/stdafx.h @@ -0,0 +1,79 @@ +// Hanvon EBook Hacker +// Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +// https://github.com/fankes/HanvonEBookHacker +// +// This software is non-free but opensource software: you can redistribute it +// and/or modify it under the terms of the GNU Affero General Public License +// as published by the Free Software Foundation; either +// version 3 of the License, or any later version. +// +// This software is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// and eula along with this software. If not, see +// +// +// This file is created by fankes on 2023/9/12. +// +// stdafx.h : 标准系统包含文件的包含文件, +// 或是经常使用但不常更改的 +// 特定于项目的包含文件 + +#pragma once + +#pragma comment(linker, "/nodefaultlib:libc.lib") +#pragma comment(linker, "/nodefaultlib:libcd.lib") + +// 注意 - 这个值与作为目标的 Windows CE OS 版本的关联性并不强 +#define WINVER _WIN32_WCE + +#include +#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP) +#define SHELL_AYGSHELL +#endif + +#ifdef _CE_DCOM +#define _ATL_APARTMENT_THREADED +#endif + +#include +#include + + + +// Windows 头文件: +#include + +// C 运行时头文件 +#include +#include +#include +#include + +#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP) +#ifndef _DEVICE_RESOLUTION_AWARE +#define _DEVICE_RESOLUTION_AWARE +#endif +#endif + +#ifdef _DEVICE_RESOLUTION_AWARE +#include "DeviceResolutionAware.h" +#endif + +#if _WIN32_WCE < 0x500 && ( defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP) ) + #pragma comment(lib, "ccrtrtti.lib") + #ifdef _X86_ + #if defined(_DEBUG) + #pragma comment(lib, "libcmtx86d.lib") + #else + #pragma comment(lib, "libcmtx86.lib") + #endif + #endif +#endif + +#include + +// TODO: 在此处引用程序需要的其他头文件 \ No newline at end of file diff --git a/Tools/ScreenRotating/README.md b/Tools/ScreenRotating/README.md new file mode 100644 index 0000000..b9d3359 --- /dev/null +++ b/Tools/ScreenRotating/README.md @@ -0,0 +1,11 @@ +# Screen Rotating + +杩愯骞冲彴锛歐indows CE (鎻愪緵鐨勪簩杩涘埗鏂囦欢涓 MIPSII) + +杩欐槸涓涓畝鏄撶殑灞忓箷鏃嬭浆鎺у埗鍣紝鏍稿績閮ㄥ垎浣跨敤 [MortScript](http://www.sto-helit.de/index.php?module=page&entry=ms_overview) 瀹炵幇銆 + +浣犲彲浠ュ湪 `sources` 鐩綍鎵惧埌鍏舵簮浠g爜銆 + +## 浣跨敤鏂规硶 + +璇峰皢 `MortScript` 鐩綍涓櫎浜 `MortRunner.exe` 鍜 `README.md` 涔嬪鐨勬墍鏈夋枃浠舵斁缃簬褰撳墠鐩綍锛岀劧鍚庡啀灏 `Tools\ScreenRefresh` 鐩綍涓殑 `ScreenRefresh.exe` 鏀剧疆浜庡綋鍓嶇洰褰曪紝杩愯 `ScreenRotating.exe` 鍗冲彲銆 \ No newline at end of file diff --git a/Tools/ScreenRotating/Rotate0.exe b/Tools/ScreenRotating/Rotate0.exe new file mode 100644 index 0000000..91fd442 Binary files /dev/null and b/Tools/ScreenRotating/Rotate0.exe differ diff --git a/Tools/ScreenRotating/Rotate0.mscr b/Tools/ScreenRotating/Rotate0.mscr new file mode 100644 index 0000000..f1880ac --- /dev/null +++ b/Tools/ScreenRotating/Rotate0.mscr @@ -0,0 +1,23 @@ +## +# Hanvon EBook Hacker +# Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +# https://github.com/fankes/HanvonEBookHacker +# +# This software is non-free but opensource software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License +# as published by the Free Software Foundation; either +# version 3 of the License, or any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# and eula along with this software. If not, see +# +# +# This file is created by fankes on 2023/9/12. +## + +Rotate(0) \ No newline at end of file diff --git a/Tools/ScreenRotating/Rotate180.exe b/Tools/ScreenRotating/Rotate180.exe new file mode 100644 index 0000000..91fd442 Binary files /dev/null and b/Tools/ScreenRotating/Rotate180.exe differ diff --git a/Tools/ScreenRotating/Rotate180.mscr b/Tools/ScreenRotating/Rotate180.mscr new file mode 100644 index 0000000..d07e967 --- /dev/null +++ b/Tools/ScreenRotating/Rotate180.mscr @@ -0,0 +1,23 @@ +## +# Hanvon EBook Hacker +# Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +# https://github.com/fankes/HanvonEBookHacker +# +# This software is non-free but opensource software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License +# as published by the Free Software Foundation; either +# version 3 of the License, or any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# and eula along with this software. If not, see +# +# +# This file is created by fankes on 2023/9/12. +## + +Rotate(180) \ No newline at end of file diff --git a/Tools/ScreenRotating/Rotate270.exe b/Tools/ScreenRotating/Rotate270.exe new file mode 100644 index 0000000..91fd442 Binary files /dev/null and b/Tools/ScreenRotating/Rotate270.exe differ diff --git a/Tools/ScreenRotating/Rotate270.mscr b/Tools/ScreenRotating/Rotate270.mscr new file mode 100644 index 0000000..61d7ee0 --- /dev/null +++ b/Tools/ScreenRotating/Rotate270.mscr @@ -0,0 +1,23 @@ +## +# Hanvon EBook Hacker +# Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +# https://github.com/fankes/HanvonEBookHacker +# +# This software is non-free but opensource software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License +# as published by the Free Software Foundation; either +# version 3 of the License, or any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# and eula along with this software. If not, see +# +# +# This file is created by fankes on 2023/9/12. +## + +Rotate(270) \ No newline at end of file diff --git a/Tools/ScreenRotating/Rotate90.exe b/Tools/ScreenRotating/Rotate90.exe new file mode 100644 index 0000000..91fd442 Binary files /dev/null and b/Tools/ScreenRotating/Rotate90.exe differ diff --git a/Tools/ScreenRotating/Rotate90.mscr b/Tools/ScreenRotating/Rotate90.mscr new file mode 100644 index 0000000..268da1b --- /dev/null +++ b/Tools/ScreenRotating/Rotate90.mscr @@ -0,0 +1,23 @@ +## +# Hanvon EBook Hacker +# Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +# https://github.com/fankes/HanvonEBookHacker +# +# This software is non-free but opensource software: you can redistribute it +# and/or modify it under the terms of the GNU Affero General Public License +# as published by the Free Software Foundation; either +# version 3 of the License, or any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# and eula along with this software. If not, see +# +# +# This file is created by fankes on 2023/9/12. +## + +Rotate(90) \ No newline at end of file diff --git a/Tools/ScreenRotating/ScreenRotating.exe b/Tools/ScreenRotating/ScreenRotating.exe new file mode 100644 index 0000000..e5ed602 Binary files /dev/null and b/Tools/ScreenRotating/ScreenRotating.exe differ diff --git a/Tools/ScreenRotating/sources/ScreenRotating.ncb b/Tools/ScreenRotating/sources/ScreenRotating.ncb new file mode 100644 index 0000000..cb27b2a Binary files /dev/null and b/Tools/ScreenRotating/sources/ScreenRotating.ncb differ diff --git a/Tools/ScreenRotating/sources/ScreenRotating.sln b/Tools/ScreenRotating/sources/ScreenRotating.sln new file mode 100644 index 0000000..800d945 --- /dev/null +++ b/Tools/ScreenRotating/sources/ScreenRotating.sln @@ -0,0 +1,29 @@ +锘縈icrosoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ScreenRotating", "ScreenRotating\ScreenRotating.vcproj", "{A41153E8-7C9A-4FBD-B849-3C6286151E54}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|CHSINT SDK For WinCE 6.0 (ARMV4I) = Debug|CHSINT SDK For WinCE 6.0 (ARMV4I) + Debug|STANDARDSDK_500 (MIPSII) = Debug|STANDARDSDK_500 (MIPSII) + Release|CHSINT SDK For WinCE 6.0 (ARMV4I) = Release|CHSINT SDK For WinCE 6.0 (ARMV4I) + Release|STANDARDSDK_500 (MIPSII) = Release|STANDARDSDK_500 (MIPSII) + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A41153E8-7C9A-4FBD-B849-3C6286151E54}.Debug|CHSINT SDK For WinCE 6.0 (ARMV4I).ActiveCfg = Debug|CHSINT SDK For WinCE 6.0 (ARMV4I) + {A41153E8-7C9A-4FBD-B849-3C6286151E54}.Debug|CHSINT SDK For WinCE 6.0 (ARMV4I).Build.0 = Debug|CHSINT SDK For WinCE 6.0 (ARMV4I) + {A41153E8-7C9A-4FBD-B849-3C6286151E54}.Debug|CHSINT SDK For WinCE 6.0 (ARMV4I).Deploy.0 = Debug|CHSINT SDK For WinCE 6.0 (ARMV4I) + {A41153E8-7C9A-4FBD-B849-3C6286151E54}.Debug|STANDARDSDK_500 (MIPSII).ActiveCfg = Debug|STANDARDSDK_500 (MIPSII) + {A41153E8-7C9A-4FBD-B849-3C6286151E54}.Debug|STANDARDSDK_500 (MIPSII).Build.0 = Debug|STANDARDSDK_500 (MIPSII) + {A41153E8-7C9A-4FBD-B849-3C6286151E54}.Debug|STANDARDSDK_500 (MIPSII).Deploy.0 = Debug|STANDARDSDK_500 (MIPSII) + {A41153E8-7C9A-4FBD-B849-3C6286151E54}.Release|CHSINT SDK For WinCE 6.0 (ARMV4I).ActiveCfg = Release|CHSINT SDK For WinCE 6.0 (ARMV4I) + {A41153E8-7C9A-4FBD-B849-3C6286151E54}.Release|CHSINT SDK For WinCE 6.0 (ARMV4I).Build.0 = Release|CHSINT SDK For WinCE 6.0 (ARMV4I) + {A41153E8-7C9A-4FBD-B849-3C6286151E54}.Release|CHSINT SDK For WinCE 6.0 (ARMV4I).Deploy.0 = Release|CHSINT SDK For WinCE 6.0 (ARMV4I) + {A41153E8-7C9A-4FBD-B849-3C6286151E54}.Release|STANDARDSDK_500 (MIPSII).ActiveCfg = Release|STANDARDSDK_500 (MIPSII) + {A41153E8-7C9A-4FBD-B849-3C6286151E54}.Release|STANDARDSDK_500 (MIPSII).Build.0 = Release|STANDARDSDK_500 (MIPSII) + {A41153E8-7C9A-4FBD-B849-3C6286151E54}.Release|STANDARDSDK_500 (MIPSII).Deploy.0 = Release|STANDARDSDK_500 (MIPSII) + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal \ No newline at end of file diff --git a/Tools/ScreenRotating/sources/ScreenRotating.suo b/Tools/ScreenRotating/sources/ScreenRotating.suo new file mode 100644 index 0000000..e34bc12 Binary files /dev/null and b/Tools/ScreenRotating/sources/ScreenRotating.suo differ diff --git a/Tools/ScreenRotating/sources/ScreenRotating/ReadMe.txt b/Tools/ScreenRotating/sources/ScreenRotating/ReadMe.txt new file mode 100644 index 0000000..875909a --- /dev/null +++ b/Tools/ScreenRotating/sources/ScreenRotating/ReadMe.txt @@ -0,0 +1,62 @@ +======================================================================== + WIN32 应用程序:ScreenRotating 项目概述 +======================================================================== + +应用程序向导已为您创建了此 ScreenRotating 应用程序。 + +此文件概述了组成 ScreenRotating 应用程序的每个文件 +的内容。 + + +ScreenRotating.vcproj + 这是使用应用程序向导生成的 VC++ 项目的主项目文件。 + 它包含有关生成该文件所使用的 Visual C++ 版本的信息,以及 + 有关在应用程序向导中选择的平台、配置和项目功能 + 的信息。 + +ScreenRotating.cpp + 这是主应用程序源文件。 + +///////////////////////////////////////////////////////////////////////////// +应用程序向导创建了下列资源: + +ScreenRotating.rc + 这是程序使用的所有 Microsoft Windows 资源的清单 + (当针对使用标准 Windows CE 外壳程序的平台 + 进行编译时)。它包括存储在 RES 子目录中的图标、位图 + 和光标。此文件可以直接在 Microsoft Visual C++ + 中进行编辑。如果 .rc 文件保持不变,数据节中的定义 + 将保持为它们所定义为的数值的十六进制版本, + 而不是定义的友好名称。 + +ScreenRotating.rc2 + 此文件包含不由 Microsoft + Visual C++ 编辑的资源。您应将所有无法由资源编辑器编辑的资源 + 放置到此文件中。 + +Resource.h + 这是标准头文件,它定义新的资源 ID。 + Microsoft Visual C++ 读取并更新此文件。 + + + + + +ScreenRotating.ico + 这是用作应用程序图标 (32x32) 的图标文件。 + 此图标包括在主资源文件 ScreenRotating.rc 中。 + +///////////////////////////////////////////////////////////////////////////// +其他标准文件: + +StdAfx.h,StdAfx.cpp + 这些文件用于生成名为 ScreenRotating.pch 的预编译头 (PCH) 文件 + 和名为 StdAfx.obj 的预编译类型文件。 + +///////////////////////////////////////////////////////////////////////////// +其他注释: + +应用程序向导使用“TODO:”注释指示 +应添加或自定义的源代码部分。 + +/////////////////////////////////////////////////////////////////////////////s \ No newline at end of file diff --git a/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.aps b/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.aps new file mode 100644 index 0000000..ab6e06c Binary files /dev/null and b/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.aps differ diff --git a/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.cpp b/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.cpp new file mode 100644 index 0000000..e30efc6 --- /dev/null +++ b/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.cpp @@ -0,0 +1,343 @@ +// Hanvon EBook Hacker +// Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +// https://github.com/fankes/HanvonEBookHacker +// +// This software is non-free but opensource software: you can redistribute it +// and/or modify it under the terms of the GNU Affero General Public License +// as published by the Free Software Foundation; either +// version 3 of the License, or any later version. +// +// This software is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// and eula along with this software. If not, see +// +// +// This file is created by fankes on 2023/9/12. +// +// ScreenRotating.cpp : 定义应用程序的入口点。 + +#include "stdafx.h" +#include "ScreenRotating.h" +#include + +#define MAX_LOADSTRING 100 + +// 全局变量: +HINSTANCE g_hInst; // 当前实例 +HWND g_hWndCommandBar; // 命令栏句柄 + +// 此代码模块中包含的函数的前向声明: +ATOM MyRegisterClass(HINSTANCE, LPTSTR); +BOOL InitInstance(HINSTANCE, int); +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +INT_PTR CALLBACK Main(HWND, UINT, WPARAM, LPARAM); + +int WINAPI WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPTSTR lpCmdLine, + int nCmdShow) +{ + MSG msg; + + // 执行应用程序初始化: + if (!InitInstance(hInstance, nCmdShow)) + { + return FALSE; + } + + HACCEL hAccelTable; + hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_SCREENROTATING)); + + // 主消息循环: + while (GetMessage(&msg, NULL, 0, 0)) + { + if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + return (int)msg.wParam; +} + +// +// 函数: MyRegisterClass() +// +// 目的: 注册窗口类。 +// +// 注释: +// +ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass) +{ + WNDCLASS wc; + + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SCREENROTATING)); + wc.hCursor = 0; + wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); + wc.lpszMenuName = 0; + wc.lpszClassName = szWindowClass; + + return RegisterClass(&wc); +} + +// +// 函数: InitInstance(HINSTANCE, int) +// +// 目的: 保存实例句柄并创建主窗口 +// +// 注释: +// +// 在此函数中,我们在全局变量中保存实例句柄并 +// 创建和显示主程序窗口。 +// +BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) +{ + HWND hWnd; + TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本 + TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名 + + g_hInst = hInstance; // 将实例句柄存储在全局变量中 + + LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); + LoadString(hInstance, IDC_SCREENROTATING, szWindowClass, MAX_LOADSTRING); + + if (!MyRegisterClass(hInstance, szWindowClass)) + { + return FALSE; + } + + hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPED, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); + + if (!hWnd) + { + return FALSE; + } + + DialogBox(g_hInst, (LPCTSTR)IDD_MAINBOX, hWnd, Main); + + if (g_hWndCommandBar) + { + CommandBar_Show(g_hWndCommandBar, TRUE); + } + + return TRUE; +} + +// +// 函数: WndProc(HWND, UINT, WPARAM, LPARAM) +// +// 目的: 处理主窗口的消息。 +// +// WM_COMMAND - 处理应用程序菜单 +// WM_PAINT - 绘制主窗口 +// WM_DESTROY - 发送退出消息并返回 +// +// +LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + PAINTSTRUCT ps; + HDC hdc; + + switch (message) + { + case WM_COMMAND: + break; + case WM_CREATE: + g_hWndCommandBar = CommandBar_Create(g_hInst, hWnd, 1); + CommandBar_AddAdornments(g_hWndCommandBar, 0, 0); + break; + case WM_PAINT: + hdc = BeginPaint(hWnd, &ps); + + // TODO: 在此添加任意绘图代码... + + EndPaint(hWnd, &ps); + break; + case WM_DESTROY: + CommandBar_Destroy(g_hWndCommandBar); + PostQuitMessage(0); + break; + + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + return 0; +} + +bool GetSelfExecutablePath(LPCTSTR &path) +{ + static TCHAR buffer[MAX_PATH]; + DWORD result = GetModuleFileName(NULL, buffer, MAX_PATH); + if (result == 0) + { + _tprintf(_T("Failed to get self executable path. Error: %d\n"), GetLastError()); + return false; + } + + // 寻找最后一个路径分隔符的位置 + LPTSTR lastSlash = _tcsrchr(buffer, _T('\\')); + if (lastSlash != NULL) + { + // 将路径分隔符后的部分截断,只保留目录路径 + *(lastSlash + 1) = _T('\0'); + } + + path = buffer; + return true; +} + +bool OpenShellProgram(HWND hDlg, LPCTSTR programPath, LPCTSTR argument) +{ + // 创建进程的信息结构体 + PROCESS_INFORMATION processInfo; + ZeroMemory(&processInfo, sizeof(PROCESS_INFORMATION)); + + // 创建进程的启动信息结构体 + STARTUPINFO startupInfo; + ZeroMemory(&startupInfo, sizeof(STARTUPINFO)); + startupInfo.cb = sizeof(STARTUPINFO); + + // 使用 CreateProcess 打开程序 + if (!CreateProcess(programPath, argument != NULL ? const_cast(argument) : NULL, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo)) + { + // 打开程序失败 + MessageBox(hDlg, L"请确认当前程序目录下的扩展支持程序 Rotate0.exe、Rotate90.exe、Rotate180.exe、Rotate270.exe 以及 ScreenRefresh.exe 是否存在。", L"错误", MB_ICONERROR | MB_OK); + return false; + } + + // 关闭进程和线程的句柄 + CloseHandle(processInfo.hProcess); + CloseHandle(processInfo.hThread); + + // 成功打开程序 + return true; +} + +void RotateScreen(HWND hDlg, DWORD dwRotationAngle) +{ + LPCTSTR selfPath; + if (!GetSelfExecutablePath(selfPath)) + { + return; + } + + bool isOk = false; + + switch (dwRotationAngle) + { + case DMDO_0: + TCHAR appendedString0[MAX_PATH]; + lstrcpy(appendedString0, selfPath); + lstrcat(appendedString0, _T("Rotate0.exe")); + isOk = OpenShellProgram(hDlg, appendedString0, NULL); + break; + + case DMDO_90: + TCHAR appendedString1[MAX_PATH]; + lstrcpy(appendedString1, selfPath); + lstrcat(appendedString1, _T("Rotate90.exe")); + isOk = OpenShellProgram(hDlg, appendedString1, NULL); + break; + + case DMDO_180: + TCHAR appendedString2[MAX_PATH]; + lstrcpy(appendedString2, selfPath); + lstrcat(appendedString2, _T("Rotate180.exe")); + isOk = OpenShellProgram(hDlg, appendedString2, NULL); + break; + + case DMDO_270: + TCHAR appendedString3[MAX_PATH]; + lstrcpy(appendedString3, selfPath); + lstrcat(appendedString3, _T("Rotate270.exe")); + isOk = OpenShellProgram(hDlg, appendedString3, NULL); + break; + } + if (!isOk) + { + return; + } + TCHAR appendedString4[MAX_PATH]; + lstrcpy(appendedString4, selfPath); + lstrcat(appendedString4, _T("ScreenRefresh.exe")); + OpenShellProgram(hDlg, appendedString4, NULL); +} + +// “主界面”框的消息处理程序。 +INT_PTR CALLBACK Main(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_INITDIALOG: + { + RECT rectChild, rectParent; + int DlgWidth, DlgHeight; // 以像素为单位的对话框宽度和高度 + int NewPosX, NewPosY; + + // 设法使“主界面”对话框居中显示 + if (GetWindowRect(hDlg, &rectChild)) + { + GetClientRect(GetParent(hDlg), &rectParent); + DlgWidth = rectChild.right - rectChild.left; + DlgHeight = rectChild.bottom - rectChild.top; + NewPosX = (rectParent.right - rectParent.left - DlgWidth) / 2; + NewPosY = (rectParent.bottom - rectParent.top - DlgHeight) / 2; + + // 如果“主界面”框比实际屏幕大 + if (NewPosX < 0) + NewPosX = 0; + if (NewPosY < 0) + NewPosY = 0; + SetWindowPos(hDlg, 0, NewPosX, NewPosY, + 0, 0, SWP_NOZORDER | SWP_NOSIZE); + } + return (INT_PTR)TRUE; + } + + case WM_COMMAND: + if ((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDCANCEL)) + { + EndDialog(hDlg, LOWORD(wParam)); + exit(0); + return TRUE; + } + if (LOWORD(wParam) == IDC_BUTTON_A && HIWORD(wParam) == BN_CLICKED) + { + DWORD rotationAngle = DMDO_0; + RotateScreen(hDlg, rotationAngle); + } + if (LOWORD(wParam) == IDC_BUTTON_B && HIWORD(wParam) == BN_CLICKED) + { + DWORD rotationAngle = DMDO_90; + RotateScreen(hDlg, rotationAngle); + } + if (LOWORD(wParam) == IDC_BUTTON_C && HIWORD(wParam) == BN_CLICKED) + { + DWORD rotationAngle = DMDO_180; + RotateScreen(hDlg, rotationAngle); + } + if (LOWORD(wParam) == IDC_BUTTON_D && HIWORD(wParam) == BN_CLICKED) + { + DWORD rotationAngle = DMDO_270; + RotateScreen(hDlg, rotationAngle); + } + break; + + case WM_CLOSE: + EndDialog(hDlg, message); + exit(0); + return TRUE; + } + return (INT_PTR)FALSE; +} \ No newline at end of file diff --git a/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.h b/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.h new file mode 100644 index 0000000..aaa5d84 --- /dev/null +++ b/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.h @@ -0,0 +1,22 @@ +// Hanvon EBook Hacker +// Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +// https://github.com/fankes/HanvonEBookHacker +// +// This software is non-free but opensource software: you can redistribute it +// and/or modify it under the terms of the GNU Affero General Public License +// as published by the Free Software Foundation; either +// version 3 of the License, or any later version. +// +// This software is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// and eula along with this software. If not, see +// +// +// This file is created by fankes on 2023/9/12. + +#pragma once +#include "resource.h" \ No newline at end of file diff --git a/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.ico b/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.ico new file mode 100644 index 0000000..c8128c1 Binary files /dev/null and b/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.ico differ diff --git a/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.rc b/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.rc new file mode 100644 index 0000000..f3401f1 --- /dev/null +++ b/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.rc @@ -0,0 +1,194 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#include "resdefce.h" +#undef APSTUDIO_HIDDEN_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// 中文(中华人民共和国) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) +#ifdef _WIN32 +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED +#pragma code_page(936) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_SCREENROTATING ICON "ScreenRotating.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDC_SCREENROTATING ACCELERATORS +BEGIN + "A", IDM_HELP_ABOUT, VIRTKEY, CONTROL, NOINVERT + "Q", IDOK, VIRTKEY, CONTROL, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_MAINBOX DIALOG 0, 0, 242, 128 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE 0x80000000L +CAPTION "屏幕旋转" +FONT 9, "MS Sans Serif" +BEGIN + LTEXT "点击下方按钮旋转屏幕为指定角度。",IDC_STATIC,59,15,131,8,SS_NOPREFIX + PUSHBUTTON "90 度",IDC_BUTTON_B,124,36,83,32 + DEFPUSHBUTTON "正常",IDC_BUTTON_A,35,36,83,32 + PUSHBUTTON "270 度",IDC_BUTTON_D,124,73,83,32 + PUSHBUTTON "180 度",IDC_BUTTON_C,35,73,83,32 + LTEXT "版权所有 (C) Fankes Studio",IDC_STATIC,72,113,110,8,SS_NOPREFIX +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_MAINBOX, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 235 + TOPMARGIN, 7 + BOTTOMMARGIN, 121 + END +END +#endif // APSTUDIO_INVOKED + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#include ""resdefce.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n" + "LANGUAGE 4, 2\r\n" + "#pragma code_page(936)\r\n" + "#include ""ScreenRotating.rc2"" // 非 Microsoft Visual C++ 编辑的资源\r\n" + "#endif\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x80000L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080404b0" + BEGIN + VALUE "FileDescription", "Windows CE 下的简易屏幕旋转控制器。" + VALUE "FileVersion", "1, 0, 0, 1" + VALUE "InternalName", "屏幕旋转" + VALUE "LegalCopyright", "Copyright (C) 2017-2023 Fankes Studio" + VALUE "OriginalFilename", "ScreenRotating.exe" + VALUE "ProductName", "屏幕旋转" + VALUE "ProductVersion", "1, 0, 0, 1" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x804, 1200 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDS_APP_TITLE "ScreenRotating" + IDC_SCREENROTATING "SCREENROTATING" +END + +STRINGTABLE +BEGIN + IDS_TOOLS "工具" +END + +#endif // 中文(中华人民共和国) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) +LANGUAGE 4, 2 +#pragma code_page(936) +#include "ScreenRotating.rc2" // 非 Microsoft Visual C++ 编辑的资源 +#endif + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.rc2 b/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.rc2 new file mode 100644 index 0000000..48625d6 --- /dev/null +++ b/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.rc2 @@ -0,0 +1,11 @@ +// +// ScreenRotating.RC2 - Microsoft Visual C++ 不会直接编辑的资源 +// + +#ifdef APSTUDIO_INVOKED +#error 此文件不能用 Microsoft Visual C++ 编辑 +#endif //APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// 在此处添加手动编辑的资源... diff --git a/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.vcproj b/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.vcproj new file mode 100644 index 0000000..95cb3f6 --- /dev/null +++ b/Tools/ScreenRotating/sources/ScreenRotating/ScreenRotating.vcproj @@ -0,0 +1,467 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tools/ScreenRotating/sources/ScreenRotating/resource.h b/Tools/ScreenRotating/sources/ScreenRotating/resource.h new file mode 100644 index 0000000..727e8ab --- /dev/null +++ b/Tools/ScreenRotating/sources/ScreenRotating/resource.h @@ -0,0 +1,48 @@ +// Hanvon EBook Hacker +// Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +// https://github.com/fankes/HanvonEBookHacker +// +// This software is non-free but opensource software: you can redistribute it +// and/or modify it under the terms of the GNU Affero General Public License +// as published by the Free Software Foundation; either +// version 3 of the License, or any later version. +// +// This software is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// and eula along with this software. If not, see +// +// +// This file is created by fankes on 2023/9/12. +// +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by ScreenRotating.rc +// +#define IDS_APP_TITLE 1 +#define IDC_SCREENROTATING 2 +#define IDI_SCREENROTATING 101 +#define IDD_ABOUTBOX 103 +#define IDD_MAINBOX 103 +#define IDS_TOOLS 104 +#define IDC_BUTTON_B 1001 +#define IDC_BUTTON_A 1002 +#define IDC_BUTTON_D 1003 +#define IDC_BUTTON_C 1004 +#define IDM_HELP_ABOUT 40002 +#define IDC_STATIC -1 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 135 +#define _APS_NEXT_COMMAND_VALUE 32771 +#define _APS_NEXT_CONTROL_VALUE 1002 +#define _APS_NEXT_SYMED_VALUE 110 +#endif +#endif \ No newline at end of file diff --git a/Tools/ScreenRotating/sources/ScreenRotating/stdafx.cpp b/Tools/ScreenRotating/sources/ScreenRotating/stdafx.cpp new file mode 100644 index 0000000..e9fbf7c --- /dev/null +++ b/Tools/ScreenRotating/sources/ScreenRotating/stdafx.cpp @@ -0,0 +1,28 @@ +// Hanvon EBook Hacker +// Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +// https://github.com/fankes/HanvonEBookHacker +// +// This software is non-free but opensource software: you can redistribute it +// and/or modify it under the terms of the GNU Affero General Public License +// as published by the Free Software Foundation; either +// version 3 of the License, or any later version. +// +// This software is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// and eula along with this software. If not, see +// +// +// This file is created by fankes on 2023/9/12. +// +// stdafx.cpp : 只包括标准包含文件的源文件 +// ScreenRotating.pch 将作为预编译头 +// stdafx.obj 将包含预编译类型信息 + +#include "stdafx.h" + +// TODO: 在 STDAFX.H 中 +// 引用任何所需的附加头文件,而不是在此文件中引用 \ No newline at end of file diff --git a/Tools/ScreenRotating/sources/ScreenRotating/stdafx.h b/Tools/ScreenRotating/sources/ScreenRotating/stdafx.h new file mode 100644 index 0000000..9186177 --- /dev/null +++ b/Tools/ScreenRotating/sources/ScreenRotating/stdafx.h @@ -0,0 +1,79 @@ +// Hanvon EBook Hacker +// Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) +// https://github.com/fankes/HanvonEBookHacker +// +// This software is non-free but opensource software: you can redistribute it +// and/or modify it under the terms of the GNU Affero General Public License +// as published by the Free Software Foundation; either +// version 3 of the License, or any later version. +// +// This software is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// and eula along with this software. If not, see +// +// +// This file is created by fankes on 2023/9/12. +// +// stdafx.h : 标准系统包含文件的包含文件, +// 或是经常使用但不常更改的 +// 特定于项目的包含文件 + +#pragma once + +#pragma comment(linker, "/nodefaultlib:libc.lib") +#pragma comment(linker, "/nodefaultlib:libcd.lib") + +// 注意 - 这个值与作为目标的 Windows CE OS 版本的关联性并不强 +#define WINVER _WIN32_WCE + +#include +#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP) +#define SHELL_AYGSHELL +#endif + +#ifdef _CE_DCOM +#define _ATL_APARTMENT_THREADED +#endif + +#include +#include + + + +// Windows 头文件: +#include + +// C 运行时头文件 +#include +#include +#include +#include + +#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP) +#ifndef _DEVICE_RESOLUTION_AWARE +#define _DEVICE_RESOLUTION_AWARE +#endif +#endif + +#ifdef _DEVICE_RESOLUTION_AWARE +#include "DeviceResolutionAware.h" +#endif + +#if _WIN32_WCE < 0x500 && ( defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP) ) + #pragma comment(lib, "ccrtrtti.lib") + #ifdef _X86_ + #if defined(_DEBUG) + #pragma comment(lib, "libcmtx86d.lib") + #else + #pragma comment(lib, "libcmtx86.lib") + #endif + #endif +#endif + +#include + +// TODO: 在此处引用程序需要的其他头文件 \ No newline at end of file