C#窗口全屏并隐藏任务栏

话不多说,上代码。支持指定显示屏,纯C#无Windows API,在Windows 1809 + .NET Framework 4.7.2 + Visual Studio 2019 RC上通过。

Form f; // 要设的窗口
Screen s; // 想用的屏幕
f.WindowState = FormWindowState.Normal;
var b = s.Bounds;
f.Left = b.Left;
f.Top = b.Top;
f.TopMost = true; // 强制置顶,按需设定
f.FormBorderStyle = FormBorderStyle.None;
f.WindowState = FormWindowState.Maximized;

TopMost 需按需设定,设为true可以导致无法切换到包括任务管理器和开发环境在内的其他窗口。如果正在调试,建议设为false或者接第二屏幕并预先把任务管理器放在第二屏幕上,以免程序卡死无法退出。如果已经无法退出,需要通过Ctrl-Alt-Delete注销。(注销过程可以中途取消,只是为了以这种方法替代任务管理器发送结束信号)

网上流传的WindowState FormBorderStyle TopMost三连有的顺序有问题,必须要严格按照先关边框,然后最大化的顺序执行才能全屏。网上流传的Windows API版本无法选择屏幕,我又不想改披着.NET皮的C代码,就有了这个。

至于如何在指定屏幕上全屏:为了选择屏幕,我们需要先把窗口丢到对应屏幕左上角。为了将窗口丢到左上角,我们需要将窗口还原。这就是有第三到第六行的原因。把窗口丢过去之后重新最大化窗口,这样窗口就会自然填满屏幕。

游戏拆包见闻

拆游戏有那么多了,留一些资料在这,好让可能的后人少走点弯路。以一些有趣的(?)小知识为主,不见得有系统性的东西——系统性的都在汉化组那边,我仅仅是一个敲键盘的。

在这里,兄弟般的俄罗斯人民给了我们别致的礼物

拆包这东西怎么说呢,个人觉得还是静态方法好。反射什么的,缺乏跨平台性能:你不能指望在ARM架构Linux系统上运行XP3Viewer来从《千恋万花》中提取资源——你甚至不能指望在它上面跑《千恋万花》。

不得不说,俄罗斯人在计算机科学上的确有一套。无论是nginx,还是telegram,还是drakon editor,俄罗斯程序员写的东西总是处于世界顶尖水平。你没猜错,兄弟般的俄罗斯人民写了个拆包工具,支持大量近现代游戏,还按照MIT协议开源。话不多说,直接上链接:https://github.com/morkt/GARbro。值得一提的是,这款工具不仅仅使用纯静态方法解包,而且对某些格式有打包能力

继续阅读“游戏拆包见闻”

tenshin.js开发杂记 TJS与KS的未来篇

Kirikiri引擎使用了一种叫做TJS (Kirikiri TPV Javascript)的类JS语言用于引擎的逻辑,功能比早期JS稍微多上一截。TJS出来的时候还是互联网的黎明时期,也就是那个AJAX都没有的时代,自然谈不上什么JSON了。在漫长的时间中,TJS和标准JS走向了不同的方向,TJS的功能几乎停滞,而JS,或者说ECMAScript则有了自己的完整生态体系和现代化的语言标准。时至今日两者可以说除了最基本的语法甚至没什么一样的了。不过类JS语言的一大特征是可以玩JSON这点倒是保留了下来。

而KS(KAG Script)呢,则是Kirikiri的剧情脚本语言,大致相当于……Markdown?Shell脚本?所谓的DSL(领域特定语言)?那东西倒是好,写法简单,解析起来也方便,就是跑起来有点那啥。

继续阅读“tenshin.js开发杂记 TJS与KS的未来篇”

tenshin.js开发杂记 技术选型篇

天神乱漫 => lucky || !unlucky

《README.md》

最近程序写多了,突然想说点什么,干脆借着开发杂记的名号夹杂点私货算了,反正PROVIDED “AS IS”

为什么是B/S

本项目的技术栈继承自完全娱乐性质的kagura.js。为什么选择B/S架构也要追溯到那时。写那东西的时候,我本来只是想自动播放某《神乐黎明记 雷道之章》的HCG和音频什么的。我曾经考虑用Python,后来想了想,我还要大战图形界面,算了(拿C#写倒是不用怎么战图形界面,不过我当时没想到)。想了想,上JavaScript,写HTML,排版方便,UI和业务逻辑分离,于是那个项目便用了JS。然后呢,我发现JS(至少是浏览器里面的JS)的文件系统API简直要人命,在忍耐了一整个空气中弥漫着躁动气息的夜晚之后,我终于忍不住了。可是代码已经水了三百行出来了,现在换语言怕是来不及,我灵机一动,nginx目录浏览带json模式,拿来假装自己是RESTAPI挺合适,于是那项目就成了B/S架构。

继续阅读“tenshin.js开发杂记 技术选型篇”

女装对网管的加成

转载,原文在此

元旦假期终于回家了……当然还要去抢救服务器。

服务器RAID阵列爆炸,老毛病了,这次挂了几个月。插拔硬盘N次无果。

遂女装。

女装后果然迅速识别到了硬盘,虽然还是被坑了多次,但总算把数据抢救出来了。

女装好啊。你现在能看到隔壁那个站,全靠了我和 @Moycat 的女装。

一例ACPI兼容性问题引发的无法使用超线程故障

我们机房装备有一台Dell FS12-TY (Dell C2100的定制版本),使用双E5640 CPU,计12物理核心24逻辑核心,BIOS已经升级至最新。

欲安装Proxmox VE 5.0,可成功使用U盘引导至启动项选择界面,随后选择Install,报错ERST: Failed to get Error Log Address Range. 随后卡死。经查资料,系内核依赖ACPI 4而BIOS仅提供ACPI 3。解决方案是在内核启动参数中加入noacpi

后发现系统仅识别到12个CPU核心,排除CPU损坏和BIOS配置错误后,想起系统内核禁用了ACPI。经查说明书,使用超线程需要通过ACPI枚举CPU核心。因内核无ACPI,所以无法枚举核心进而使用超线程。尝试使用acpi=ht参数启动,此内核参数仅启用超线程依赖的ACPI功能,因ACPI兼容性问题再次失败。后因系统内核是定制版且服务器性能过剩,放弃进一步治疗,在12核心无超线程下运行。

附:Proxmox VE更新的版本再次添加了对该服务器ACPI的支持,超线程回来了。

随着python解释器的一阵运行,整个Photoshop都变得索然无味起来

本文是某浏览器索然无味的前篇,讲述了如何用PIL自动拼图。

前段时间搞到一把Galgame,在例行拆包之后(关于拆包,还有一点背时故事,看看好久讲嘛),我看着面前的图片碎片和Photoshop,突然有了一个大胆的想法:既然游戏引擎本身可以组装图片,那我能不能模仿游戏引擎来自动组装呢?

可以!当然可以!俗话说,Python是万能的。在一个整个空气中都弥漫着躁动气息的夜晚,我在机房对着电脑桌面无所事事,算了,发NMD呆,Steam关闭,Notepad++启动!

继续阅读“随着python解释器的一阵运行,整个Photoshop都变得索然无味起来”

随着Javascript引擎的一阵运转,整个浏览器都变得索然无味起来

论如何用浏览器跑Galgame

前段时间搞到一把Galgame,在例行拆包,自动化拼图之后(关于自动化拼图,还有一点背时故事,看看好久讲嘛),我看着面前的桌面,突然有了一个大胆的想法:既然我能够自动化读取一部分游戏逻辑来组装图片,那我能不能同时把文本和声音组装上去呢?

可以!当然可以!俗话说,凡是能用Javascript重写的程序,就必将用Javascript重写。在一个整个空气中都弥漫着躁动气息的夜晚,我在床上辗转反侧难以入眠,算了,睡NMB,起来编!

继续阅读“随着Javascript引擎的一阵运转,整个浏览器都变得索然无味起来”

[转载]此时我躺在成都某宾馆的床上

©Moycat   2015

因奇故备份之


Day -8

此时我躺在成都某宾馆的床上,等待着随时的入睡。

所谓竞赛学习,实已名存实亡,与在南充的自习并无两样。虽然,在这边,感觉似乎要好些。

这次在成都,没有半年多前的那般匆忙,倒竟比在南充还要舒爽些。只是成都没有南充的夜雨,很是干燥。

只是敌不过,还剩八天的这个事实。

不想谈自己与OI,然而忍不住。

上个学期的半年来,似乎我没有放超过一丝一毫的精力在OI中。2月培训的囫囵吞枣后,似乎彻底把我噎住了,噎了半年。我怀疑半年来我做过几道OI的题,看过几页OI的书。这并不光彩,然而为何我的雄心竟会萎缩至此?

或许是我早就隐隐觉得,OI和文化课、其他竞赛的相似点,还是有那么多。

我之所以讨厌大多数高考要考的文化课,无非是做它们的题很是烦人:如果你知道这个解题套路,那么套进去,得分;你要是不知道,任你想破头皮,做不出来。

这世界上的问题,的确很多需要经验去解决,经验——或记忆,是人类赖以存活的根基。可是在文化课的题目中,这一点被无限放大了,你就是要背住这个套路,这个题型,这个方法,否则死路一条。也许并不是如此吧,但我所在的环境处处如此,以至于我总觉得其中另有目的。

但OI不也如此吗?背下各种各样的算法,了解各种各样的题型。在STL还没被解禁的时候,一个排序算法都需要背得想吐。那时候之机械更甚,真不明白明明有STL为什么不允许用。但OI毕竟和其他科目不同,否则我早就放弃了,就像我入学短短几个月后放弃物理竞赛一样。虽然我不知道是不是我对信息技术的喜爱遮住了什么缺点。不过也无所谓了。

在被噎住半年后,我才重新拿起OI,备战NOIP——也就是这学期开始吧。从找时间练,再晚上放学留在机房练,又停课练,现在跑到成都练。能沉浸在自己喜欢的事情里,感觉真是好啊,只是这时间太短了。但我没有为过去的半年后悔,因为我知道后悔无用,而且就算再来一次,也未必会被我珍惜。

唯一令我欣慰的是,NOIP就算失败也不会是我OI的终点。还有省选,虽然希望不大。但将来到了大学,我可不想去ACM了……那时既然有了自由,我就会做自己梦想的事。

离NOIP2015还有短短几天。未来的事,又有谁能预见。