-
Notifications
You must be signed in to change notification settings - Fork 1
/
カーソル替え 1.15.b1.bat
6553 lines (5882 loc) · 307 KB
/
カーソル替え 1.15.b1.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
@echo off
setlocal
mode con: | find "75" >nul && mode con: | find "25" >nul
if "%errorlevel%"=="1" (mode con: cols=75 lines=25& set boottime1=%time%)
if "%batbootargumentbad%"=="false" (title カーソル替え ^| 準備中...) else if not "%1"=="BatBootErrorHandlerArgument1908" (title カーソル替え)
if not defined dummy (set /p nothing=[?25h<nul)
rem カーソル替え by tamago_1908
rem English version.
rem https://github.com/tamago1908/cursor-changer.bat
rem OS並みの機能を持ったバッチファイル、"カーソル替え"
rem 詳細はgithubを参照。
rem O==============================================================O
rem I I
rem I ! DISCLAIMER ! I
rem I I
rem I If you don't understand what you are doing, I
rem I I suggest you close immediately and do nothing. I
rem I If you have attempted to view the contents of this I
rem I BATCH for any reason, I do not recommend that you I
rem I change the contents of this BATCH at the least. I
rem I This batch is very long and complex. If you change I
rem I anything at all, that alone can cause an error. I
rem I Please note that tamago_1908 does not provide support I
rem I for errors or problems caused by your changes I
rem I to this batch. I
rem I I
rem O==============================================================O
rem This batch is created by tamago_1908
rem カーソル替え.bat
rem 上記のメッセージの表示が崩れている?ならVirtual Studio Codeで開くのを推奨します...
rem Copyright 2021 tamago_1908
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with the License.
rem You may obtain a copy of the License at
rem
rem http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.
rem アンインストールメニューを改良する
rem 計画 : rem customテーマ機能 (一カラー) を実装する (1.15?)
rem 上 具体的にはColor_Applyerを実装して、先にfor分で空白を利用して文字色などを指定、後に描写されるGUIやハイライトは従来の方法で最適化する。
rem もう少し賢い方法で設定ファイルなどの改変を検知する (1.15?)
rem "Uninstall"を引数で利用してアンインストーラーで起動できるようにする。これの実装はアンインストーラーのオーバーホール時に実装する。
rem 現在実装されているyoutube関連の処理をすべて既定のブラウザで開くように変更する。現在はchromeで固定されているため (1.15?)
rem 設定の部分のUIコードを改良する。現在のは冗長すぎる (1.15?)
rem settingを適用する部分を改良する (1.15?)
rem version checkのバイパスの仕方を変える。それに伴いそれら周辺の処理も変える (1.15?)
rem 上ができれば、powershell前にwinver checkを配置できる可能性がある
rem Make sure to fill in the build number and version! Also, don't forget to put it in the archive!
rem environment setting, It is not recommended to change.
rem VER v1.15.b1
set batver=1.15.b1
set batbuild=Build 100
set batverdev=beta
set hazimeeaster=false
set firststartbat=no
set bootbatnow=yes
rem Here you can change the path to the location where configuration files and other files are placed and loaded, and names.
rem Example :
rem %HOMEDRIVE%%HOMEPATH% (default)
rem %HOMEDRIVE%%HOMEPATH%\desktop (desktop)
rem O===================================O
set "batchmainpath=%HOMEDRIVE%%HOMEPATH%"
rem O===================================O
rem settings file
set "Settingsfile=カーソル替え設定.txt"
rem O===================================O
rem First Stuffs file
set "FirstSTFsfile=初回カーソル.txt"
rem O===================================O
cd /d %batchmainpath%
rem detect user argument
if "%1"=="BatBootErrorHandlerArgument1908" (goto :batbootVerifyerrorhandler)
:batbootVerifyerrorhandler
echo %0 | find "%~dp0%~n0%~x0" >nul
if "%errorlevel%"=="0" if "%1"=="BatBootErrorHandlerArgument1908" (set batbootargumentbad=true) else (set batbootargumentbad=)
if "%errorlevel%"=="1" (set batbootargumentbad=false)
if "%batbootargumentbad%"=="true" (call :BSOD_Errors 5)
rem check powershell is available
if "%batbootargumentbad%"=="false" (goto :batbootcheckpowershellsafe)
:batbootcheckpowershell
>nul 2>&1 powershell exit && goto :batbootcheckpowershellsafe
cls
echo powershellの確認に失敗しました!
pause
cls
echo これが表示されたということは、お使いのPCにpowershellがインストールされていない可能性が高いということです。
pause
cls
echo カーソル替えを動作させるにはpowershellが必須です。
echo windows 10 1803以降ではpowershell 5.1が標準でインストールされているため、恐らく意図的にアンインストールされているか、利用できなくなっている可能性が高いでしょう。
pause
cls
echo Powershell 5.1か、それ以降を別途インストールしたのち、再度試してください。
pause
cls
echo それを行っても(もしくはpowershellがインストールされているのに)問題が続く場合には、githubのissueにて報告してください。
pause
cls
exit
:batbootcheckpowershellsafe
:batboot_animationcheck
setlocal enabledelayedexpansion
rem bootloader animation loader. first of all, load theme setting.
if exist %Settingsfile% (
find "wmode=true" %Settingsfile% > nul
if "!errorlevel!"=="0" (color f0 & set wmodetoggle=true) else (set wmodetoggle=false)
) else (set wmodetoggle=false)
rem check linuxboot
>nul 2>&1 find "s5_rawboot=true" %Settingsfile%
if not "!errorlevel!"=="0" (
>nul 2>&1 find "s5_linuxboot=true" %Settingsfile%
if "!errorlevel!"=="0" (
set linuxboot=true
if "%batbootargumentbad%"=="false" (echo [%time: =%] カーソル替え %batver% ブートローダー - by tamago_1908& echo.) else (echo [%time: =%] ブートローダーを開始中...)
>nul 2>&1 find "wmode=false" %Settingsfile%
if "!errorlevel!"=="0" (set linuxishclr2=[0m)
>nul 2>&1 find "wmode=true" %Settingsfile%
if "!errorlevel!"=="0" (set linuxishclr2=[107m[30m) else (set linuxishclr2=[0m)
set linuxishclred=[91m& set linuxishclr=[92m
) else (set linuxboot=false)
)
rem check simpleboot
if "%linuxboot%"=="true" if "%batbootargumentbad%"=="false" (echo [%linuxishclr%info%linuxishclr2%] Linux風のブートローダーが開始しました)
>nul 2>&1 find "rawboot=false" %Settingsfile%
if "!errorlevel!"=="0" (
>nul 2>&1 find "s5_simpleboot=true" %Settingsfile%
if "!errorlevel!"=="0" (
if not "%linuxboot%"=="true" (
set simpleboot=true
)
)
)
rem check rawboot
>nul 2>&1 find "bootanimation=true" %Settingsfile%
if "!errorlevel!"=="0" (
>nul 2>&1 find "s5_rawboot=true" %Settingsfile%
if "!errorlevel!"=="0" (
if not "%linuxboot%"=="true" (
if not "%simpleboot%"=="true" (
@echo on
set rawboot=true
)
)
)
)
setlocal disabledelayedexpansion
if "%linuxboot%"=="true" if "%batbootargumentbad%"=="false" ((echo [%linuxishclr%info%linuxishclr2%] Boot animationの確認が完了しました))
rem boot message
if not exist %Settingsfile% (
if not exist %FirstSTFsfile% (
if not "%batbootargumentbad%"=="false" (echo セットアップの準備中... 1/2)
) else (title カーソル替え ^| しばらくお待ちください...& echo カーソル替え ^| 準備中... 1/2)
)
if exist %Settingsfile% if not "%linuxboot%"=="true" (if not "%batbootargumentbad%"=="false" (title カーソル替え ^| 準備中...& echo しばらくお待ちください... 1/2)) else (if not "%batbootargumentbad%"=="false" (title カーソル替え ^| 準備中...))
rem chenge the boot message if it is the first time, or if a value is defined in batbotpowershell, or at boot up
if not exist %Settingsfile% set firststartbat=yes
if "%batbootargumentbad%"=="false" (
if not "%linuxboot%"=="true" (
if not "%firststartbat%"=="yes" (
if "%bootbatnow%"=="yes" (cls & echo しばらくお待ちください... 2/2)
) else (
if not defined Powersheller (
if not exist %FirstSTFsfile% (
cls & echo セットアップの準備中... 2/2
) else (cls & echo しばらくお待ちください... 2/2)
)
)
)
)
if "%linuxboot%"=="true" if "%batbootargumentbad%"=="false" ((echo [%linuxishclr%info%linuxishclr2%] Boot massageは死んだ。))
:batbootVerifyerrorhandlersafe
rem Start Error Handler
if not "%1"=="BatBootErrorHandlerArgument1908" (cd "%~dp0" & start /b /wait /realtime cmd.exe /c "%~n0%~x0" BatBootErrorHandlerArgument1908 %* || call :BSOD_Errors 6)
if not "%1"=="BatBootErrorHandlerArgument1908" (call :BSOD_Errors 0 %errorlevel%
pause >nul
echo 嘘みたいだろ。死んでるんだぜ、これで。
exit
)
set batbootargumentbad=
if "%linuxboot%"=="true" (echo [%linuxishclr%info%linuxishclr2%] Error_Handlerが動いた :D)
:Arguments_Loader
if "%linuxboot%"=="true" (echo [%linuxishclr%info%linuxishclr2%] Arguments_Loaderが開始しました)
if "%~1"=="" goto :Arguments_Loaderend
if not "%~1"=="BatBootErrorHandlerArgument1908" (title カーソル替え ^| 引数を確認中...)
setlocal enabledelayedexpansion
set i=0
for %%a in (%*) do (
set /a i+=1
set arg[!i!]=%%a
)
rem 配列の要素数を取得
set n=%i%
rem 配列の要素を順番に処理
:Arguments_Loaderbreak
for /l %%i in (1,1,%n%) do (
rem 例外処理用の変数の初期化。あとで使用します。
set argmentserror=
rem 現在の要素を取得
set current=!arg[%%i]!
rem 現在の要素が空でなければ処理
if not "!current!"=="" (
rem 現在の要素と一致する要素を空にする(重複排除)
for /l %%j in (%%i,1,%n%) do (
if "!arg[%%j]!"=="!current!" set arg[%%j]=
)
rem 現在の要素に応じた処理を行う
if "!current!"=="BatBootErrorHandlerArgument1908" (set Arguments_Loaderbreaked=true& goto :Arguments_Loaderbreak)
set Arguments_Loaderbreaked=false
if "!current!"=="bypsbootpwsh" (echo byps batbootpowershellを有効にしました。& set disableexit=false& set argmentserror=false)
if "!current!"=="enablesimpleboot" (echo simplebootを有効にしました。& set simpleboot=true& set argmentserror=false)
if "!current!"=="devmode" (call :developermenu& set argmentserror=false)
if "!current!"=="recovery" (echo recovery menuを有効にしました。& set argmentserror=false& goto :Cursor_Changer_REmenu)
if "!current!"=="uninstall" (setlocal disabledelayedexpansion & set Uninstall_Shutdown=true& goto :Uninstall)
if "!current!"=="help" (title カーソル替え ^| 引数のヘルプ& call :batstarthelp& set argmentserror=false)
if "!current!"=="bypsvck" (echo bypsvckを有効にしました。& set bypasswinvercheck=true& set argmentserror=false)
if "!current!"=="bypsadm" (echo bypsadmを有効にしました。& set adminbypass=true& set adminbypass=false& set argmentserror=false)
if "!current!"=="bypsloadsg" (echo bypsloadsgを有効にしました。& set settingbypass=true& set argmentserror=false)
rem 例外処理
if "!argmentserror!"=="" (title カーソル替え ^| カーソル引数 エラー&echo 不明な引数が指定されました!^(!current!^) 有効な引数を指定してください。 ^(それか、^"help^"を利用してください。^)
)
)
)
if %n% geq 0 (
if not "!Arguments_Loaderbreaked!"=="true" (
timeout /t 3 /nobreak >nul
)
)
:Arguments_Loaderend
set argmentserror=& set Arguments_Loaderbreaked=& set arguments=& set n=& set i=
setlocal disabledelayedexpansion
if "%linuxboot%"=="true" (echo [%linuxishclr%info%linuxishclr2%] Arguments_Loader が完了しました)
call :batbootErrorHandlerCall
call :BSOD_Errors 1 %errorlevel%
:batbootErrorHandlerCall
if "%linuxboot%"=="true" (echo [%linuxishclr%info%linuxishclr2%] Error_Handler_Call が開始しました)
:batbootcheckwinver
rem checking windows version
setlocal enabledelayedexpansion
if "%1"=="BatBootErrorHandlerArgument1908" if not "%1"=="dynamic" (
if "%linuxboot%"=="true" (echo [%linuxishclr%info%linuxishclr2%] Windowsのバージョンを確認しています...)
)
rem check windows 10 1803 or higher
for /f "tokens=6 delims=. " %%i in ('ver') do set version=%%i
if %version% gtr 17134 (set batbootcheckwinversafe=true) else (set batbootcheckwinversafe=false)
if "%batbootcheckwinversafe%"=="true" (goto :batbootcheckwinversafe) else (goto :batbootcheckwinverbad)
:batbootcheckwinverbad
if "%batbootargumentbad%"=="false" (title カーソル替え ^| 準備中...) else if not "%1"=="BatBootErrorHandlerArgument1908" if "%1"=="dynamic" (exit /b 1)
if "%bypasswinvercheck%"=="true" (goto :batbootcheckwinverbadwarning)
rem check windows 8.1 or lower
for /f "usebackq delims=" %%a in (`ver`) do set version2=%%a
echo %version2% | find /i "Version 10.0" > nul
if "%errorlevel%"=="0" (set windowsverfilter=windows 10, 古いビルド) else (set "windowsverfilter=古すぎます!Windows XP?")
echo %version2% | find /i "Version 6.3." > nul
if "%errorlevel%"=="0" (set windowsverfilter=windows 8.1)
echo %version2% | find /i "Version 6.2." > nul
if "%errorlevel%"=="0" (set windowsverfilter=windows 8)
echo %version2% | find /i "Version 6.1." > nul
if "%errorlevel%"=="0" (set windowsverfilter=windows7)
echo %version2% | find /i "Version 6.0." > nul
if "%errorlevel%"=="0" (set windowsverfilter=windows vista)
rem winver check failed message
title カーソル替え ^| Windows バージョンエラー!
cls
echo カーソル替えはお使いのWindowsのバージョンをサポートしていません!
echo (%windowsverfilter%)
pause
cls
echo カーソル替えはWindows 10 1803以降のWindowsをサポートしています!
echo (ビルド 17134 以降。あなたがお使いのWindowsはビルド %version% です^^!)
pause
cls
echo それよりも古いバージョン (例えば windows 7, windows 8, 8.1, 等です) はサポートされていません。
pause
cls
echo お使いのWindowsをアップデートしてください。
echo もしこのメッセージがWindows 10 1803以降を利用しているのに表示されている場合は、Githubのissueにて報告してください。
pause
call :exit 1
:batbootcheckwinverbadwarning
cls
rem 警告メッセージ (winvercheckに違反している状態でbypsしようとした際の)
set selected=
cls
echo.
echo 警告
echo.
echo あなたがお使いのWindowsのバージョン (%windowsverfilter%)はカーソル替えに対応していないようです!
echo 引数でbypsvckを利用しているようですが、このまま続行すると致命的な問題に遭遇する可能性が非常に高いです。
echo 仮に続行した場合、その後に引き起こされる問題に対する責任はカーソル替えの開発者であるtamago_1908は負いません。
echo.
echo それでも続行しますか?
set /p selected=Y or N :
if %selected%==n exit 1
if %selected%==y goto :batbootcheckwinversafe
if %selected%== echo what? "Y" or "N".& pause & goto :batbootcheckwinverbadwarning
:batbootcheckwinversafe
setlocal disabledelayedexpansion
if "%batbootargumentbad%"=="false" (title カーソル替え ^| カーソル替え 準備中...) else if not "%1"=="BatBootErrorHandlerArgument1908" if "%1"=="dynamic" (exit /b 0)
set batbootcheckwinversafe=& set version=& set version2=
if "%1"=="dynamic" (exit /b)
if "%linuxboot%"=="true" (echo [%linuxishclr%info%linuxishclr2%] Windowsのバージョンの確認が完了しました)
rem カーソル替え処理を実行
rem 本処理 (変数のセットとか、前段階)
set version=
set bootbatnow=yes
set Powersheller_passed=false
if not exist %Settingsfile% set checkupdatetoggle=false& goto :Powersheller
if exist %Settingsfile% find "CheckUpdate=true" %Settingsfile% > nul
if "%errorlevel%"=="0" (set checkupdatetoggle=true) else (set checkupdatetoggle=false)
if "%disableexit%"=="false" (goto :Powersheller_end)
:Powersheller
cd %~dp0 & set Powersheller=
if "%linuxboot%"=="true" if "%bootbatnow%"=="yes" (echo [%linuxishclr%info%linuxishclr2%] Powersheller が開始しました...)
set Powersheller_passed=false
if not "%Powersheller%"=="OOBEMusic" (
set "batverforpowersheller=%batver:β=.b%"
)
if not "%1"=="BatBootErrorHandlerArgument1908" (set Powersheller=%1)
rem startid~powershell までのコードはずらしてはいけない それ以前かそれ以後ならok
:: StartID1908
call :getLineNumber startLine StartID1908 0
goto :Powershellerendcode
:Powershellercodestart
set /a startline=startline+5& set /a endline=endline-3
if "%Powersheller%"=="OOBEMusic" (start /min powershell.exe -noexit -NoProfile -ExecutionPolicy Unrestricted "$s=[System.Management.Automation.ScriptBlock]::create((Get-Content \"%~f0\" -TotalCount $env:endline|Where-Object{$_.readcount -gt $env:startline }) -join \"`n\");&$s" %*&goto :Powersheller_end)
if "%checkupdatetoggle%"=="true" (for /f "delims=" %%a in ('powershell -NoProfile "$s=[System.Management.Automation.ScriptBlock]::create((Get-Content \"%~f0\" -TotalCount $env:endline|Where-Object{$_.readcount -gt $env:startline }) -join \"`n\");&$s" %*') do set Updateinfo=%%a&goto :Powersheller_end) else (powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[System.Management.Automation.ScriptBlock]::create((Get-Content \"%~f0\" -TotalCount $env:endline|Where-Object{$_.readcount -gt $env:startline }) -join \"`n\");&$s" %*&goto :Powersheller_end)
function Disablemax {
# 最大化ボタンを無効化する処理
$code = @'
using System;
using System.Runtime.InteropServices;
namespace MaximizeButtonToggle {
// ウィンドウスタイルを操作するためにWindows APIを利用
internal static class WinAPI {
[DllImport("kernel32.dll")]
internal static extern IntPtr GetConsoleWindow(); // コンソールウィンドウのハンドルを取得
[DllImport("user32.dll")]
internal static extern bool DrawMenuBar(IntPtr hWnd); // ウィンドウの更新
[DllImport("user32.dll")]
internal static extern int GetWindowLong(IntPtr hWnd, int nIndex); // ウィンドウの属性を取得
[DllImport("user32.dll")]
internal static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); // ウィンドウの属性を設定
// ウィンドウスタイル属性の定数
const int GWL_STYLE = -16, WS_MAXIMIZEBOX = 0x00010000;
// 'state' パラメータに基づいて最大化ボタンを有効または無効にする
internal static void ChangeMaximizeState(bool state) {
IntPtr hWnd = GetConsoleWindow(); // 現在のコンソールウィンドウ ハンドルを取得
// ウィンドウスタイルを更新して最大化ボタンを有効または無効にする。
SetWindowLong(hWnd, GWL_STYLE, state ? GetWindowLong(hWnd, GWL_STYLE) | WS_MAXIMIZEBOX : GetWindowLong(hWnd, GWL_STYLE) & ~WS_MAXIMIZEBOX);
DrawMenuBar(hWnd); // 変更を反映するためにウィンドウを再描画
}
}
// Public method to disable the maximize button
public static class ButtonStatus {
public static void DisableMaximize() {
WinAPI.ChangeMaximizeState(false); // 最大化ボタンを無効にする。有効にしたい場合はtrueに変更
}
}
}
'@
# C#コードをコンパイルして最大化ボタンを無効にする。
Add-Type $code
[MaximizeButtonToggle.ButtonStatus]::DisableMaximize()
}
function RefreshCursor {
# カーソルの設定を更新
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class User32 {
[DllImport("user32.dll", SetLastError = true)]
public static extern bool SystemParametersInfo(int uAction, int uParam, IntPtr lpvParam, int fuWinIni);
}
"@
# 0x0057 = Win APIを使ってカーソルを更新。0x02 = 変更を送信(適用)
# カーソルの再適用
[User32]::SystemParametersInfo(0x0057, 0, [IntPtr]::Zero, 0x02) | Out-Null
}
function Updater {
# GitHub APIでカーソル替えの更新を確認。確認するだけ。
$repo = "https://api.github.com/repos/tamago1908/Cursor-Changer.bat/releases/latest"
try{$file = (Invoke-RestMethod -Uri $repo -Method Get -Headers @{'Accept'='application/vnd.github.v3+json'}).assets | Where-Object { $_.name -like "Cursor.Changer.*" }
}catch{if($_.Exception.Response.StatusCode.Value__ -eq 403){Write-Host "[ERROR] GithubのAPIレート制限に到達したようです。アップデートを頻繁に確認し過ぎたせいかもしれません。一時間ほど待ってから再度お試しください。" -foregroundcolor red}else{Write-Host "[ERROR] 何らかのエラーが発生しました。再度試すか、インターネット接続を確認してください。 `nエラー内容 : $_" -foregroundcolor red};break}
$fileVersion = $file.name -replace "Cursor\.Changer\.|\.bat", ""
$batVersion = "$env:batverforpowersheller"
if ("$fileVersion" -eq "$batVersion") { return "null" }
if ($file.name -match "^Cursor\.Changer\..*\.bat$") {
$fileverArray = $fileVersion -split "\."
$batverArray = $batVersion -split "\."
# Compare version elements
function Compare-VersionElement($a, $b) {
if (($a -as [int]) -and ($b -as [int])) {
return [math]::Sign($a - $b)
} elseif ($a -match "^[a-z]+[0-9]*$" -and $b -match "^[a-z]+[0-9]*$") {
return [string]::Compare($a, $b)
} elseif ($a -match "^[a-z]+$") { return 1 }
elseif ($b -match "^[a-z]+$") { return -1 }
return [string]::Compare($a, $b)
}
# Check if version is beta
function Is-Beta($versionArray) { return $versionArray[-1] -match "^[a-z][0-9]*$" }
$isFileBeta = Is-Beta $fileverArray
$isBatBeta = Is-Beta $batverArray
# Compare version arrays
for ($i = 0; $i -lt [Math]::Max($fileverArray.Length, $batverArray.Length); $i++) {
$fileElement = if ($i -lt $fileverArray.Length) { $fileverArray[$i] } else { "0" }
$batElement = if ($i -lt $batverArray.Length) { $batverArray[$i] } else { "0" }
$comparisonResult = Compare-VersionElement $fileElement $batElement
if ($comparisonResult -gt 0) {
return "batbeta=$isFileBeta,updateavailable=true,updatemyversion=$batVersion,updateversion=$fileVersion"
} elseif ($comparisonResult -lt 0) { return "die" }
if ($i -eq [Math]::Max($fileverArray.Length, $batverArray.Length)) { return "null" }
}
}
}
function Fullupdater {
Write-Host "アップデートを確認中...`n"
# GitHub APIでカーソル替えの更新を確認する。
$repo = "https://api.github.com/repos/tamago1908/Cursor-Changer.bat/releases/latest"
try{$file = (Invoke-RestMethod -Uri $repo -Method Get -Headers @{'Accept'='application/vnd.github.v3+json'}).assets | Where-Object { $_.name -like "Cursor.Changer.*" }
}catch{if($_.Exception.Response.StatusCode.Value__ -eq 403){Write-Host "[ERROR] GithubのAPIレート制限に到達したようです。アップデートを頻繁に確認し過ぎたせいかもしれません。一時間ほど待ってから再度お試しください。" -foregroundcolor red}else{Write-Host "[ERROR] 何らかのエラーが発生しました。再度試すか、インターネット接続を確認してください。 `nエラー内容 : $_" -foregroundcolor red};break}
$fileVersion = $file.name -replace "Cursor\.Changer\.|\.bat", ""
$batVersion = "$env:batverforpowersheller"
if ($file.name -match "^Cursor\.Changer\..*\.bat$") {
$fileverArray = $fileVersion -split "\."
$batverArray = $batVersion -split "\."
# Compare version elements
function Compare-VersionElement($a, $b) {
$isANumber = $a -as [int]
$isBNumber = $b -as [int]
if ($isANumber -and $isBNumber) {
return [math]::Sign($isANumber - $isBNumber)
} elseif ($a -match "^[a-z]+[0-9]*$" -and $b -match "^[a-z]+[0-9]*$") {
return [string]::Compare($a, $b)
} elseif ($a -match "^[a-z]+$") { return 1 }
elseif ($b -match "^[a-z]+$") { return -1 }
return [string]::Compare($a, $b)
}
# Check if version is beta
function Is-Beta($versionArray) { return $versionArray[-1] -match "^[a-z][0-9]*$" }
$isFileBeta = Is-Beta $fileverArray
$isBatBeta = Is-Beta $batverArray
# Compare version arrays
for ($i = 0; $i -lt [Math]::Max($fileverArray.Length, $batverArray.Length); $i++) {
$fileElement = if ($i -lt $fileverArray.Length) { $fileverArray[$i] } else { "0" }
$batElement = if ($i -lt $batverArray.Length) { $batverArray[$i] } else { "0" }
$comparisonResult = Compare-VersionElement $fileElement $batElement
if ($comparisonResult -gt 0) {
# Update available
Write-Host "アップデートが利用可能です。現在のバージョンは `"$($batVersion)`"で、アップデート後のバージョンは `"$($fileVersion)`"です。`n"
Start-Sleep 1; Changelog; Start-Sleep 2
if ($isFileBeta) { Write-Host "[TIP] このアップデートはベータ版なので、何らかの問題が発生する可能性があります。`n" -ForegroundColor DarkGray }
$answer = Read-Host "アップデートしますか? 尚、アップデートした場合は英語版へと強制的に変更されます。(y または n)"
if ($answer -eq "y") {
$downloadFile = Join-Path (Join-Path $env:USERPROFILE "Downloads") $file.name
Invoke-WebRequest -Uri $file.url -OutFile $downloadFile -Headers @{'Accept'='application/octet-stream'}
Move-Item $downloadFile (Join-Path (Split-Path (Get-Item "カーソル替え *.bat")) "Cursor.Changer.$fileVersion.bat") -Force
Remove-Item "カーソル替え $batVersion.bat" -Force
Write-Host "アップデートが完了しました。`n"
Start-Sleep 2; Write-Host "再起動中..."
PowerShell -WindowStyle Hidden -Command Exit
Start-Process "Cursor.Changer.$fileVersion.bat"
Killwhole
} else {
Write-Host "アップデートはキャンセルされました。`n"
Start-Sleep 2
return
}
} elseif ($comparisonResult -lt 0) {
Write-Host "[ERROR] 現在のカーソル替え ($($batVersion)) は最新のカーソル替え ($($fileVersion)) よりも新しいようです!`nもしや、バージョンを意図的に変更しましたか? >:(`n" -ForegroundColor Red
Start-Sleep 2
return
}
}
if ($i -eq [Math]::Max($fileverArray.Length, $batverArray.Length)) {
Write-Host "すでに最新バージョンのようです! ($($batVersion)) アップデートの必要はありません。`n"
Start-Sleep 2
}
}
}
function Doupdate {
# github から最新のコードを取得し、直接置き換える。
$repo = "https://api.github.com/repos/tamago1908/Cursor-Changer.bat/releases/latest"
try{$file = (Invoke-RestMethod -Uri $repo -Method Get -Headers @{'Accept'='application/vnd.github.v3+json'}).assets | Where-Object { $_.name -like "Cursor.Changer.*" }
}catch{if($_.Exception.Response.StatusCode.Value__ -eq 403){Write-Host "[ERROR] GithubのAPIレート制限に到達したようです。アップデートを頻繁に確認し過ぎたせいかもしれません。一時間ほど待ってから再度お試しください。" -foregroundcolor red}else{Write-Host "[ERROR] 何らかのエラーが発生しました。再度試すか、インターネット接続を確認してください。 `nエラー内容 : $_" -foregroundcolor red};break}
$fileVersion = $file.name -replace "Cursor\.Changer\.|\.bat", ""
$batVersion = "$env:batverforpowersheller"
$batName = Get-Item "カーソル替え *.bat"
$downloadFolder = Join-Path $env:USERPROFILE "Downloads"
$downloadFile = Join-Path $downloadFolder $file.name
Invoke-WebRequest -Uri $file.url -OutFile $downloadFile -Headers @{'Accept'='application/octet-stream'}
$newBatName = "Cursor.Changer.$fileVersion.bat"
Move-Item $downloadFile (Join-Path (Split-Path $batName) ("$newBatName")) -Force
Remove-Item "カーソル替え $batVersion.bat" -Force
Write-Host "アップデートは完了しました。`n"
Start-Sleep 2
Write-Host "再起動中..."
PowerShell -WindowStyle Hidden -Command Exit
Start-process "Cursor.Changer.$fileVersion.bat"
Killwhole
}
function OOBEMusic {
$webClient = New-Object System.Net.WebClient
$memoryStream = New-Object System.IO.MemoryStream
# Helper function to download data with progress reporting
function DownloadDataWithProgress($url, $memoryStream) {
try {
$response = $webClient.OpenRead($url)
$totalBytes = [int]$webClient.ResponseHeaders["Content-Length"]
$buffer = New-Object byte[] 8192
$totalRead = 0
while (($bytesRead = $response.Read($buffer, 0, $buffer.Length)) -gt 0) {
$memoryStream.Write($buffer, 0, $bytesRead)
$totalRead += $bytesRead
[Console]::SetCursorPosition(0, [Console]::CursorTop)
Write-Host "音楽をダウンロードしています... $([math]::Round(($totalRead / $totalBytes) * 100))% " -NoNewline
}
$memoryStream.Position = 0; $response.Close(); Write-Host "`nダウンロードが完了しました!"
} catch {
# Error handling for download failures
$errorMsg = if ($_.Exception.Response.StatusCode.Value__ -eq 403) {
"[ERROR] GithubのAPIレート制限に到達しました。一時間程待ってから再度お試しください。"
} else { "[ERROR] 何らかのエラーが発生しました。再度試すか、インターネット接続を確認してください。 `nエラー内容 : $_" }
Write-Host $errorMsg -ForegroundColor Red
Write-Host "何かキーを押して終了..."; $host.UI.RawUI.ReadKey() | Out-Null; exit
}
}
# Download the audio file
DownloadDataWithProgress "https://raw.githubusercontent.com/tamago1908/Cursor-Changer.bat/main/resource/Windows_XP_OOBE_for_Cursor_Changer.wav" $memoryStream
# Define the type for playing audio
Add-Type -TypeDefinition @"
using System;
using System.IO;
using System.Media;
public class AudioPlayer {
public static SoundPlayer player;
public static void PlayAudioFromBytes(byte[] data) {
if (data == null || data.Length == 0) throw new ArgumentException("バッファ (ダウンロードデータ) はNULLまたは空であってはなりません。", "data");
using (MemoryStream stream = new MemoryStream(data)) {
player = new SoundPlayer(stream); player.PlayLooping();
}
}
public static void StopAudio() { if (player != null) player.Stop(); }
}
"@
# Play the downloaded audio
try {
[AudioPlayer]::PlayAudioFromBytes($memoryStream.ToArray())
cls; Write-Host "音楽を再生中... このウィンドウは無視してください。音楽を止めたい場合はこのPowershellウィンドウを終了して下さい。"
} catch {
Write-Host "[ERROR] 音声の再生に失敗しました。 ファイルが正しい形式であることを確認してください。" -ForegroundColor Red
Write-Host "何かキーを押して終了..."; $host.UI.RawUI.ReadKey() | Out-Null; exit
}
$pid1 = (Get-WmiObject win32_process -filter "processid=$pid").parentprocessid; $pid2 = (Get-WmiObject win32_process -filter "processid=$pid1").parentprocessid
while ($true) {
Start-Sleep -Seconds 1
if (-not (Get-Process -pid $pid2 -ErrorAction SilentlyContinue)) {
[AudioPlayer]::StopAudio()
exit
}
}
}
Function Killwhole {
# CmdのPIDを取得して殺す。
Write-Host "`nシャットダウン中..."
Start-Sleep 1
$pid1 = (Get-WmiObject win32_process -filter "processid=$pid").parentprocessid
$pid2 = (Get-WmiObject win32_process -filter "processid=$pid1").parentprocessid
taskkill /pid $pid1 /pid $pid2 /pid $pid > $null 2>&1
}
Function Changelog {
# Githubから最新のChangelogを取得し、それを整えて表示する。
$h=Get-Host;$w=$h.UI.RawUI;$s=$w.BufferSize;$s.height=(irm -Uri "https://api.github.com/repos/tamago1908/Cursor-Changer.bat/releases/latest").body -split '\r\n' | Measure-Object | %{$_.Count + 22};$w.BufferSize=$s;
try{if($env:wmodetoggle -eq "false"){Write-Host "変更履歴 :" -foregroundcolor white}elseif($env:wmodetoggle -eq "true"){Write-Host "変更履歴 :" -foregroundcolor black }else{Write-Host "変更履歴 :" -foregroundcolor white};$e=[char]27;$clr="$e[7m";$clred="$e[91m";$clrgrn="$e[92m";$clryel="$e[93m";$clrmag="$e[95m";$clrgra="$e[90m";$clrcyan="$e[96m";$c="$e[0m";if($env:wmodetoggle -eq "true"){$clr="$e[100m$e[97m";$c="$e[0m$e[107m$e[30m"};foreach($s in (irm -Uri "https://api.github.com/repos/tamago1908/Cursor-Changer.bat/releases/latest").body -split '\r\n'){if($s -match "####"){write-host "$clrcyan$e[1m$($s -replace '(^\#+)|(\#+$)', '')$c" `n -NoNewline}elseif($s -match ">"){write-host "$clred$($s -replace '\>', '')$c" `n -NoNewline}elseif($s -match "###"){write-host "$clryel$e[1m$($s -replace '(^\#+)|(\#+$)', '')$c" `n -NoNewline}elseif($s -match "___"){write-host "$clrgra--------------------------------------------------$c" `n -NoNewline}else{$s=$s -replace "\*{3}(.+?)\*{3}", "$e[3m`$1$c";$s=$s -replace "\*{2}(.+?)\*{2}", "$e[1m`$1$c";$s=$s -replace "^\s*-(\s+)(.*)", "$clred-$c`$1`$2";$s=$s -replace "\*+", "";write-host "$s" `n -NoNewline}};rv e,clr,clred,clrgrn,clryel,clrmag,clrgra,clrcyan,c,s}catch{if($_.Exception.Response.StatusCode.Value__ -eq 403){Write-Host "[ERROR] You have exceeded the GitHub API rate limit. This may be because you have checked for updates too frequently. Please wait for an hour and try again." -foregroundcolor red}else{Write-Host "[ERROR] Oops, something went worng. You can try again later. or check the internet connection. `nError log : $_" -foregroundcolor red};break}
}
if ($env:checkupdatetoggle -eq "true") {Disablemax; Updater} else {Disablemax}
if ($env:Powersheller -eq "RefreshCursor") {RefreshCursor}
if ($env:Powersheller -eq "Fullupdater") {Fullupdater}
if ($env:Powersheller -eq "OOBEMusic") {OOBEMusic}
if ($env:Powersheller -eq "Updater") {Updater}
if ($env:Powersheller -eq "Doupdate") {Doupdate}
if ($env:Powersheller -eq "Changelog") {Changelog}
:Powershellerendcode
:: EndID1908
call :getLineNumber endLine EndID1908 0
if "%Powersheller_passed%"=="false" (set Powersheller_passed=true& goto :Powershellercodestart) else (goto :Powersheller_end)
:GetLineNumber <resultVar> <uniqueID> [LineOffset]
SETLOCAL
for /F "usebackq tokens=1 delims=:" %%L IN (`findstr /N "%~2" "%~f0"`) DO set /a lineNr=%~3 + %%L
(
ENDLOCAL
set "%~1=%LineNr%"
exit /b
)
rem 本処理
:Powersheller_end
set startline=& set endline=& set Powersheller_passed=& set batverforpowersheller=
cd %batchmainpath%
if "%Powersheller%"=="OOBEMusic" (set Powersheller=& exit /b)
if "%bootbatnow%"=="no" if not "%Powersheller%"=="Updater" (set Powersheller=& exit /b)
rem 変数の値を取得
if not "%checkupdatetoggle%"=="true" (goto :Powersheller_get_updater_variable_end)
rem Powershellの戻り値をBatchの変数に変換
if "%updateinfo%"=="null" (goto :Powersheller_get_updater_variable_end)
if "%updateinfo%"=="die" (set Punish=true& goto :Powersheller_get_updater_variable_end)
setlocal enabledelayedexpansion
for /f "tokens=1-4 delims=," %%a in ("%updateinfo%") do (
for /f "tokens=1-2 delims==" %%x in ("%%a") do set "%%x=%%y"& for /f "tokens=1-2 delims==" %%x in ("%%b") do set "%%x=%%y"& for /f "tokens=1-2 delims==" %%x in ("%%c") do set "%%x=%%y"& for /f "tokens=1-2 delims==" %%x in ("%%d") do set "%%x=%%y"
)
setlocal disabledelayedexpansion
set updatemyversion=%batver:β=.b%
:Powersheller_get_updater_variable_end
if "%linuxboot%"=="true" (echo [%linuxishclr%info%linuxishclr2%] Powersheller は完了しました...)
set updateinfo=& set checkupdatetoggle=
rem いらない情報の羅列
rem ###################
rem # HELLO WORLD #
rem ###################
rem 表示100%、フルスクリーン推奨 それ以外は表示の保証なし
rem ちなみに情報
rem このバッチファイルの開発が始まったのは2021年の10月8日(恐らく)
rem 開発の動機は、カーソルを初期化されたときにいちいち変えるのがめんどくさいからバッチファイルで自動化しようとしたから。だがそのあといろいろ機能が増えていって今の状態になったのである。
rem バージョン2.0.0まではカーソルブラックという名前だった
rem 開発中期になってカーソル替え(黒)に変更された
rem 開発後期になってカーソル替えのみに変更された
rem 最初のバージョンが1.0.1だった
rem 名前の変更がされたバージョンは2.0.0と2.5.0beta5
rem バージョン2.0.0ではデフォルトに戻せる機能が追加
rem デフォルトに戻す機能はバージョン1.5.0あたりからほのめかしていた
rem バージョン2.1.xからNoFB NonFIxBugというバージョンが追加されたがすぐに削除された
rem カーソル替えにはバージョン Dev.1というものがあった
rem バージョンDev.1はバージョン2.4.xに相当
rem バージョン2.4.xまではものすごくバージョンの上り方が早かった
rem 一番開発に時間がかかったのはバージョン1.12である。 (半年間の開発期間)
rem 内容がぐちゃぐちゃなのはもともと人に見せるつもりがなかったからである。
rem カーソル替えには2022年2月22日22時22分22秒に完成したバージョンがある。それがカーソル替え1.7aだ。
rem バージョンアップ情報
rem バージョン2.5.0以前のハージョン履歴は消失しています
rem バージョン2.5.0 beta1ですべての変更をデフォルトに戻す機能が追加
rem バージョン2.5.0 beta5から名前がカーソル替え 1.0betaに変更
rem バージョン2.5.0 beta7 (1.0beta2)からDogcheckというネタ機能が追加された
rem バージョン2.5.0 beta9 (1.0beta4)からDogcheckにアップデートが入り、同じ名前のテキストファイルを作るだけでは回避ができないようになった
rem バージョン1.0(2.5.0 beta10)から正式にカーソル変えの根幹的な部分が完成、これに伴いカーソル替えのバージョンは1.0となった
rem バージョン1.1 (2.5.0beta11)からalldef周りのコマンドのミスにより分岐ができていなかったバグが解消され、何より分岐ごとのクリアがなくなり、よりシームレスに分岐するようになった。
rem バージョン1.2 (2.5.0beta13)からデフォルトに戻す、もしくは黒色に変更する際の文字が変更された。
rem バージョン1.3(2.5.0beta14)から、初回の変更でいいえをを押したときに、初回カーソル変更というものが削除される機能がじっそうされ、それに加えて、イースターエッグにちょっとした新機能が追加。
rem バージョン1.4(旧2.5.0beta15)から、ついに開発当初から同じだった機能を選択する部分が変更され、それに伴い旧バージョン表記がなくなり、本当の意味でのver2.5.0になった。
REM バージョン1.5から、超大型だと言ってもいいほどのアップデートが来た。
rem 詳しく言うと、まず設定メニューの追加、それに伴いカーソルを変更した際の再起動の確認を完全にOFFにする設定、デバッグモードのON/OFFが追加された。
rem そして次に、ホワイトモードの追加。cmd上のテーマをホワイト基調のデザインに変更でき、しかも設定したことを記録する機能もあり、起動時に自動的にホワイトモードにすることができるという機能も搭載している。
rem そして多少のバグ修正、誤字脱字を修正した。
rem バージョン1.5a 再起動の判別に伴う文字変更とダークテーマに戻す際の機能を廃止予定の文を挿入した。
rem バージョン1.6 今回のアップデートは超大型だ。
rem 詳しく言うと、まず初回起動時にカーソル替えの文字が虹色に変化するような機能が追加され、
rem 次に、最初の画面でエンターキーを長押ししているとそれを検知してメッセージが流れるような機能が追加され、
rem そのまた次に、ホワイトモードの画面が革新され、設定メニューと同じようになった。それに伴ってダークテーマに戻す際の個別の画面が消失した。
rem そしてエンターキー長押しを検知する機能の追加に伴って、設定メニューでその機能の無効化ができるようにもなった。
rem バージョン 1.6a ホワイトモードに変更が加えられ、ダークモードかホワイトモードかを検出し、それに伴い文字を変化させる機能が追加され、多少のバグ修正が行われた。
rem バージョン 1.6b 設定メニューの三番目、デバッグモードの有効無効化のメニューにちょっとした改良が加えられた。
rem バージョン 1.7 今回のアップデートでは、電卓機能が追加され、ちょっとしたイースターエッグが追加された。そして、HNYという文字は今さらだが削除された。
rem バージョン 1.7a 今回のアップデートは、機能選択の画面の順番を機能が増えてきたことに伴い、変更した。alldefは設定メニューに移行した。
rem そして、バージョン情報に多少の変更、何もしないにちょっとした変更が加えられた。
rem バージョン 1.8 今回のアップデートでは設定メニューにちょっとした変更が加えられ、設定の説明と現在の設定が有効か無効かをシームレスに見れるようになった。
rem そして今回のアップデートでは2048というゲームが搭載予定だったのだが、開発中期にセーブ機能関連に技術的な制約とバグがあることが発覚し、開発が難航したため、
rem その機能追加は無期限に延期になった。
rem バージョン1.9 今回のアップデートは、カーソル替え設定の構文を変更し、falseかtrueかを変更するだけにした。これにより何がオンで何がオフかがわかりやすくなった。
rem また、今回のアップデートによって、%FirstSTFsfile%にもdogcheckが追加されたので、まぁ設定ファイルを途中で削除したりなんてことがしにくくなった。
rem バージョン1.10 今回のアップデートはカーソル替え史上最もBIGなアップデートだ。まず、設定メニューと最初のメニューにUIが追加され、メニューの整理が行われ、ホワイトモードとalldefが移動した。alldefには自己消去機能が追加され、アンインストールメニューが試験的機能として新たに実装された。そして初回起動メッセージが変更され、軽くアニメーションするようになり、メッセージも変更された。そして、カーソル替えの初期のバージョンからあったカーソルを変えるメニューがなんと統合され、白色と黒色を自動的に認識して、選択しなくても自動的に変更されるようになった。そしてちょっとした隠し要素も追加された。また、設定も自動的に記入されるようになり、バグや誤字脱字も直された。それ以外にもたくさんの部分が変更され、もはや別物になった。
rem バージョン1.10a ちょっとした修正と、起動時に処理中と起動中というメッセージが表示されるようになり、わかりやすくなった。
rem バージョン1.11 今回のアップデートは、主に設定と起動関係の内部構造が大幅に変わり、簡単に言うと今までは、"とりあえず全部取る"構造から、"ほしいときに取る"構造になったおかげで、全体的なレスポンスが向上した。それと、ちょっとした変更が加えられた。(ちなみに、この機能の実装にはとても苦労した。)
rem バージョン1.11a dogcheckのAA崩れと、設定で設定を変更した後にreloadをすると永遠にロードし続けてしまう不具合を修正。
rem バージョン1.12
rem 今回のアップデートは、カーソル替え史上最も巨大且つ大型のアップデートといっていい。まず、設定のUI、起動中のUIが大幅に変更された。そして、メニュー画面の電卓と終了が反転し、dogcheckも大幅に変わり、様々な新機能が追加され、ほぼすべてのバグが修正され、英語も追加され、....もうとにかく、言い合わらせないほど、大量の機能が追加された。debugの設定が変更され、1.11とは互換性が半分失われた。とにかくとても大量の機能が追加された。そして開発には半年がかかった。
rem ベータ版の進捗
rem ver1.6
rem バージョン1.6α 1.6のαバージョン。設定の3番目、デバッグモードの欄の機能が増えた。
rem バージョン1.6β1 1.6のベータ版。今まで欠けていた設定の2番目が完成した。
rem バージョン1.6β2 1.6のベータ版2。設定の二番目にあった重大なバグを修正した。(setting3とタイプミスで干渉,adminonoffと関数を入力ミス)
rem バージョン1.6β2 バージョン規則がベータ版限り変更され更新した日を追加することとなった。
rem バージョン1.6β3 1.6のベータ版3。初回起動時にロゴが虹色で光る演出が追加された。ちなみにもうすぐ1.6が正式に完成する。
rem バージョン1.6β3 1.6のベータ版の最終バージョン。三つほど機能が追加された。
rem ver1.10
rem バージョン 1.10β1 1.10の最初のベータ版.。最初の画面と設定メニューのUIが追加された。
rem バージョン 1.10β2 1.10のベータ版2。 設定メニューにアニメーションが追加された。
rem バージョン 1.10β3 1.10のベータ版3。 変更が統合され、一つのメニューで白色、黒色に変更できるようになった。しかしこれによって複縦がなくなった。
rem バージョン 1.10β4 1.10のベータ版4。 テーマの変更が設定に移行され、それに伴い少しメニューが変化した。
rem バージョン 1.10β5 1.10のベータ版5。 alldefに試験的だがアンインストール機能が実装され、このバッチファイルも削除されるようになった。そして初回起動時のメッセージも少し変更され全体的な質が向上した。
rem バージョン 1.10β6 1.10のベータ版6。 まだ未完成だが初回起動メッセージが進化した。また、このバージョンではtestと入力すると初回起動メッセージが流れる。(正式版では削除予定)そして、windowのサイズが変更された。
rem バージョン 1.10β7 1.10のベータ版7。 初回起動時のメッセージがすべて変更され、またアニメーションも追加された。そしてeastereggという物が追加された.....
rem ver1.12
rem バージョン 1.12β1 最初の1.12のベータ版。何もしない ボタンが、終了ボタンへと変わり、配置が電卓と入れ替わった。そして設定の欠損を検知して修復できる機能が追加された。
rem バージョン 1.12β2 1.12のベータ版2。ベータ1で実装された設定の整合性テストのバグが完璧に修正。それにより完璧に動作するようになった。また、設定を読み込む部分が最適化された。そして一部のバグや不要な機能が削除された。
rem バージョン 1.12β3 1.12のベータ版3。このバージョンでは細かい部分の修正がメインで、主にsetting dogcheckの機能拡張とバグ修正、dogcheck関連の機能増強とバグ修正がメイン。初回起動時の機能制限の追加もされた。
rem バージョン 1.12β setting ui deb 設定の新しいUIの開発のためだけに作成された特別なバージョン。
rem バージョン 1.12β4 1.12のベータ版4。このバージョンは大量の機能追加がなされた。主に設定メニューのUIが大幅に変更され、設定が二つのカテゴリーで分けられ、より直感的に操作できるようになった。そしてアンインストールメニューも進化し、機能が追加された。設定のhelpも変更され、dogcheckも進化し、設定のdebugが高速起動(fastboot)に変更され、起動アニメーションに一つ種類が増え、それに伴い起動アニメーションを無効にできるようになり、それ以外にも様々な部分が変更された。
rem バージョン 1.12β5 1.12β5。このバージョンでは、設定メニューの設定を適用するメニューが改良され、よりわかりやすくなり、alldefの分岐部分の不備が一部修正された。そして、windowsのOSバージョンを検知し、windows 10 1551以前では動作不能になった。また新しいmsgboxの表示方法のテストがeastereggに導入され、それにはpowershellが使用されており、より安全な構造になった。それ以外にも、fulldebugの機能増強、debug用のリダイレクトコマンドが追加された。
rem バージョン 1.12β6 1.12β6。このバージョンのアップデートは微々たるもので、そこまで大きな変化はない。主にデバッグモード関連が進化した。fulldebugの機能がより増え、自由に変数を変更できるようになった。そして、cmdでないと起動できなくなった。(その際には開き直す機能もある。)そして、細かい修正がされている。
rem バージョン 1.12β7 1.12β7。このバージョンは、主に起動画面が変更され、よりグラフィカルな表現になった。そして汎用性が増えて使いやすくなった。しかし、その半面、起動時間が倍増し、現状では少し不安定なアニメーションだ。しかしそれ以外にも、細かい部分のバグ修正や、機能増強が行われた。(alldefの自己削除機能のバグ修正など)
rem バージョン 1.12β7a 1.12β7のマイナーアップデート。このバージョンでは、細かい部分の修正が行われた。管理者権限の設定が有効の際に誤ってエラーが出てしまう問題と、fulldebugの機能増強、新しい起動アニメーションのエラー処理が改善された。それ以外にも誤字が修正された。build番号は35に。
rem バージョン 1.12β7b 1.12β7aのマイナーアップデート。このバージョンでは、主に起動アニメーションの不具合が修正され、よりエラーが起きにくくなった。変数の初期化も行われるようになり、より安定した。そして、起動完了時にバーが最後まで行くようになった。build番号は35.5に変更。
rem バージョン 1.12β7c 1.12β7bのマイナーアップデート。このバージョンでは、1.12β7bに含まれていた変数の初期化にあったバグが修正され、より安定するようになった。そしてそれ以外にも含まれていたバグも修正されたので、主にこのバージョンはバグ修正バージョンである。build番号は35.7に変更。
rem バージョン 1.12β7d 1.12β7cのマイナーアップデート。このバージョンでは、fulldebugの機能が増強され、新しく変数を作りやすくなり、削除や変更などもしやすくなった。そしてeastereggが凶悪になった....build番号は35.8に変更。
rem バージョン 1.12β8 1.12β8。このバージョンでは、試験的に、ウィンドウ右上の、閉じるボタンからのカーソル替えの終了ができなくなった。これにより、不正な終了ができなくなった。そしてその機能実装には特殊な方法を使用しており、より実験的な意味合いがある。そして細かな部分の調整が行われた。build番号は36に変更。
rem バージョン 1.12β8a 1.12β8のマイナーアップデート。このバージョンでは、現在開かれているconsoleの検出機能が排除された。どうやらconsoleの検出は不安定で、その時の状況によって左右されるから。build番号は36.1に変更。
rem バージョン 1.12β8b 1.12β8aのマイナーアップデート。このバージョンでは、inspect entire command listというコマンドが追加され、このコマンドを使用するとメインメニューで使用可能なほぼすべてのコマンドを閲覧することができる。使用にはパスワードが必要。それには試験的な機能として、6色の色で表現されている。それ以外にも細かい部分が修正された。 build番号は37に変更。
rem build 38 マイナーアップデート。powershell経由でのC#複数行実行で発生していた分岐のバグが修正。それ以外にも細かなバグ修正が行われた。
rem build 39 マイナーアップデート。新しく引数にenablesimplebootが追加された。将来的に、設定に含める予定。それに伴ってieclと引数helpも変更された。
rem バージョン 1.12β9 1.12のベータ版9。このバージョンでは、細かな不具合が修正された。そして、settingの読み込み部分が変更され、gotoを使用した方法からcallを使用した方法に変更され、より安定するようになった。それ以外にも細かい部分の不具合が修正された。ちなみにもうすぐ1.12が完成する。
rem build 41 マイナーアップデート。終了ボタンを無効化していたのが、最大化ボタンの無効化に変更された。
rem バージョン 1.12β10 1.12のベータ版10 このバージョンでは、英語翻訳が追加され、細かいバグが修正された。あまり大きな変化はない。そしてこれが1.12βの最終バージョンになる予定だ。
rem ver1.13
rem バージョン 1.13β1 最初の1.13のベータ版。このバージョンでは、英語版での英訳の修正と、ウィンドウズのバージョンを確認する機構が少し変更され、また英語版ではeastereggが解放された。また、バグも修正された。とりあえず、主に英語版でのアップデートになる。
rem バージョン 1.13β2
rem 1.13のベータ版1。このバージョンでは主に二つの新機能がある。それは、終了メニューと新しいバージョン表示UIだ。これに伴い、今まではreloadをしないと再起動できなかったのが、そのままメニューから再起動できるようになった。また、自己アップデート機能も新しくなったバージョン表示部分からアクセスできるようになる予定。また、他にもバグ修正などが行われた。
rem 今後の予定 (roadmap)
rem コードの順番を変更し、読みやすくする
rem 何もしないを終了または何かしらに変更
rem 設定のUIを大幅に変えて、カテゴリーに分ける。そのカテゴリーの中に設定を入れる
rem セーブ関係のファイルを保存するディレクトリを設定で変更できるようにする。
rem %Settingsfile%に含まれている設定が全部欠損している場合は、%Settingsfile%を作成しなおす機能。
rem 設定の初期化(アンインストールメニューを初期化とかの項目にする)
rem 1.12実装
rem ver 1.13 23年?未定
rem 初回起動時の初期設定の追加 (設定をユーザー任意でセット、テーマなども)
rem 未使用コードまたは無駄なものを削除して、より可読性を上げる。
rem 2048の実装
rem 単体アップデート機能
rem 終了メニュー (Windows XP風)
rem アンインストールメニューを完成させる
rem ver 1.14
rem より派手なアニメーションとsetxを用いた起動回数のカウントと、より良い電卓
rem ver 1.15
rem 色でわかりやすい!チュートリアルとより進化したdogcheck (samチェックのような機能を実装)
rem ver 1.16
rem より良い初回起動時のメッセージと派手なUI
rem ver 1.17
rem より多くの設定とより良い安定したプログラム
rem ver 1.18
rem カスタムカーソル機能
rem ver 1.19
rem ゲームの追加とカーソル替えプログラム全体のリファクタリング
rem ver 1.20 (2.0)
rem .....???
rem 未定
rem チュートリアル機能 うまいことやって、初回起動時にのみ起動させる(あばよくはreadmeの代替にしたい)#うーん。一人でやるには大規模すぎる
rem UIの部分をwasdまたは12345で選択して、eとかで選択するように(設定メニューとかも。#ほぼほぼ確定で実装するけど、ただかなり難しくなりそうだから現時点では未定
rem すべてのUI部分を変更(alldefやwmodeとかもすべてにおいて)#ほぼ確定、ただオーバーホールするというよりは現在のメインメニューに近しいUIにするという意味だと思う。
rem fulldebug 変数情報をすべて表示#仮だけど実装済み。
rem 右上らへんにリアルタイムで表示される時計#無理。不可能だね。仮に実装しても操作性が改悪されるから別途それ専用のbatファイルが必要。
rem 常に起動アニメーションを再生させる#実装済み。
rem 設定メニューの壮大化、オプションのbatファイルの使用#2.00で予定されてるけど上記の通りきつい
rem 英語対応 しかし現実的ではない
rem 上のを実装するにあたって、一番実装しやすいのは変数を用いて、もし変数langがjpであるならば、関数jp1,2,3,4,5,6,7,8...に適当な文字を挿入させるとかだろうか。
rem しかしそれを行おうとすると今このバッチ処理に含まれている全文字を変数の名前にしなければいけず、実装するとしてもv1.10以降の実装になりそうだ。#....まぁ頑張る
rem ############################################################################################################################
:CursorChangerOOBE
if not "%bootbatnow%"=="true" (
if "%linuxboot%"=="true" (
echo.&echo [%linuxishclr%info%linuxishclr2%] 初期処理が完了しました!&echo.
if "%linuxboot%"=="true" (echo [%linuxishclr%info%linuxishclr2%] SAB_Manager 呼び出し中&echo.)
)
)
rem Detects whether this is the first start
if exist %Settingsfile% set firststartbat=no& set bootbatnow=yes& goto :batstart
if not exist %Settingsfile% (
if exist %FirstSTFsfile% goto :settingloads
)
if not defined dummy (echo [38;2;5;5;5myou know what i HATE? that's [3mbepis[0m[38;2;5;5;5m.)
if not defined dummy (echo [38;2;5;5;5mTHE TASTE, the smell, the texture... hey.... your [3mdrooling[0m[38;2;5;5;5m......)
ping -n 1 -w 500 localhost >nul
setlocal enabledelayedexpansion
title カーソル替えへようこそ
cls
:CursorChangerOOBE_Animation
setlocal enabledelayedexpansion
rem Play CursorChangerOOBE_Animations that appear slowly
if not defined dummy (set /p nothing=[?25l<nul)
set /a count+=10
set clresc=%count%;%count%;%count%
set "show=[2;24H[38;2;%clresc%mカーソル替え %batver% へようこそ [0m"
echo.
echo %show%
rem call background_menu to drew bg
call :Background_menu 1
if "%count%" == "200" (ping -n 2 -w 500 localhost >nul& set count=& goto :CursorChangerOOBE_Animation2) else (
for /l %%. in (0,1,5000) do rem
)
goto :CursorChangerOOBE_Animation
:CursorChangerOOBE_Animation2
rem Play CursorChangerOOBE_Animations that appear slowly but more darker
set /a count+=10
set clresc=%count%;%count%;%count%
set "show2=[5;26H[38;2;%clresc%m[何かキーを押して始める] [0m"
echo.
echo %show%
echo.& echo.
echo %show2%
if "%count%" == "120" (
set clresc=& pause >nul& echo.& echo %show%& ping -n 1 -w 500 localhost >nul
set count=200& set count2=120& set clresc=204;204;204
goto :CursorChangerOOBE_Animation3
) else (
for /l %%. in (0,1,5000) do rem
goto :CursorChangerOOBE_Animation2
)
:CursorChangerOOBE_Animation3
rem live together, die together.
set /a count-=10& set /a count2-=6
set clresc=%count2%;%count2%;%count2%
set "show2=[5;26H[38;2;%clresc%m[何かキーを押して始める] [0m"
echo.
echo %show%
echo.& echo.
echo %show2%
rem call background_menu to drew bg
call :Background_menu 1
if !count2! leq 12 (
if !count! leq 20 (ping -n 1 -w 500 localhost >nul& set count=& set count2=0& set clresc=200;200;200& set clrmove=22& goto :CursorChangerOOBE_Animation4)
) else (
for /l %%. in (0,1,5000) do rem
goto :CursorChangerOOBE_Animation3
)
:CursorChangerOOBE_Animation4
echo %show%
rem Play CursorChangerOOBE_Animations that move left
set "show=[2;%clrmove%H[38;2;%clresc%mカーソル替え %batver% へようこそ [0m"
set /a clrmove-=1
if %clrmove% equ 1 (
goto :CursorChangerOOBE_Animation5
) else (
for /l %%. in (0,1,2500) do rem
goto :CursorChangerOOBE_Animation4
)
:CursorChangerOOBE_Animation5
rem WOW IT CHANGED INTO SETUP!!!!!!!!!
ping -n 2 -w 500 localhost >nul & cls
set "show=[38;2;%clresc%m カーソル替え %batver% セットアップ [0m"
echo.
echo %show%
ping -n 2 -w 500 localhost >nul
set show=& set show2=& set clresc=& set clrmove=& set count2=& set count=
setlocal disabledelayedexpansion
goto :CursorChangerOOBEdev
:Header_Drawer
rem Drawing Header of OOBE
rem Set the color of Header
if "%2"=="true" (set /p nothing=[107m[30m<nul& for /l %%i in (0,1,5) do (set /p nothing=[%%i;0H[0K<nul)) else if "%2"=="false" (set /p nothing=%clr2%<nul& for /l %%i in (0,1,5) do (set /p nothing=[%%i;0H[0K<nul)) else if "%oobetheme%"=="white" (set /p nothing=[107m[30m<nul) else (set /p nothing=%clr2%<nul)
rem Clear Texts
if not defined dummy (for /l %%i in (5,1,21) do (set /p nothing=[%%i;0H[0K<nul))