Thinkai's Blog

Autohoutkey|Python|php|aardio|VOIP|IT 爱好者

正在浏览分类 迷你

总共找到 1 篇

迷你小说txt阅读器 Win+H随时隐藏 Autohotkey 3671

作者为 发表

Autohotkey

这是原来上计算机课写的一个小说阅读器,老师一来随时隐藏,嘿嘿

阅读界面

章节目录界面

Autohotkey源代码

#MaxMem, 4095 ;最大内存 4G
#NoTrayIcon ;不显示图标
DetectHiddenWindows, On ;检查隐藏窗口
CoordMode, Mouse, Relative ;鼠标坐标相对窗口
;创建章节目录显示窗口
Gui, Add, ListView, x0 y0 w300 h400 glist, idx|章节目录
Gui, Show, , 章节目录
WinHide, 章节目录 ;隐藏窗口
;第一次打开程序
IfNotExist, history.ini
	{
	MsgBox, 4096, 版本说明|What's new, 更新项目:`n1.增加窗口大小调整功能,可以全屏啦!`n2.在Win+H基础上增加Win+Z快速显示隐藏窗口。`n3.优化上一页算法。`n4.增加点击文本上半部分为【上一页】,下半部分为【下一页】的翻页功能。`n`n已知问题:`n调整窗口大小后,当时可能显示错位,翻页后正常。
	FileSelectFile, file, , , 选择一本小说, (*.txt) ;选取文件
	if file =
		Reload
	IniWrite, %file%, history.ini, history, file ;写入ini
	WinShow, 章节目录 ;显示窗口
	FileDelete, mulu.txt
	LV_Delete() ;删除已有信息
	SplashTextOn, 200, 20, 提示, 获取章节中,请稍候! ;悬浮窗口
	FileRead, main, %file% ;读取文件
	StringSplit, line, main, `n ;按行分割
	idx = 0 ;初始变量
	Loop
	{
	idx += 1
	if idx > %line0% ;大于最大行
		Break ;中断循环
	var = % line%idx% ;获取当前行
	if var <>
		{
		StringReplace, var, var, `r, , All ;替换回车
		test := RegExMatch(var, ".*第.*(章|卷|回)\s.{1,40}") ;正则表达式匹配章节
		if test = 1
			{
			LV_Add("",idx,var)
			mulu = %mulu%%idx%,%var%`n ;追加变量
			}
		}
	}
	FileAppend, %mulu%, mulu.txt ;保存目录信息
	SplashTextOff
	}
Else
	{
	IniRead, file, history.ini, history, file ;读取ini中的文件名
	FileRead, main, %file% ;读取文件
	StringSplit, line, main, `n ;按行分割
	MsgBox, 36, 询问, 是否继续阅读【%file%】?
	IfMsgBox, No
		{
		FileDelete, history.ini
		Reload
		}
	Else
		{
		WinShow, 章节目录
		LV_Delete()
		SplashTextOn, 200, 20, 提示, 获取章节中,请稍候!
		FileRead, main, %file% ;读取目录信息
		StringSplit, line, main, `n
		Loop
		{
		FileReadLine, cc, mulu.txt, %A_Index%
		if errorlevel
		Break
		if cc <>
			{
			StringSplit, st, cc, `,,
			idx = %st1%
			var = %st2%
			LV_Add("",idx,var)
			}
		}
		SplashTextOff
		MsgBox, 36, 询问, 是否继续上次阅读位置?
		IfMsgBox, Yes
			{
			FileRead, tail, tail.txt
			IniRead, idx, history.ini, history, idx
			FileRead, dis, dis.txt
			goto, jx
			}
		}
	}

Return

list:
;获取焦点行
FocusedRowNumber := LV_GetNext(0, "F")
if FocusedRowNumber
	{
	LV_GetText(index, FocusedRowNumber, 1) ;获取id
	goto, show
	}
Return

menu:
IfWinExist, 章节目录
	{
	WinHide, 阅读
	WinShow, 章节目录
	}
Return

jx: ;继续阅读
oldidx = %idx%
SplitPath, file, , , , name, 4 ;获取文件名
WinHide, 章节目录
IfWinNotExist, 阅读
	{
	Gui, 2:Add, Text, x0 y10 w270 h180 gtextbody vshow,
	Gui, 2:Add, Text, x20 y190 w40 h20 glast vlast, 上一页
	Gui, 2:Add, Text, x120 y190 w40 h20 gmenu vmenu, 目录
	Gui, 2:Add, Text, x220 y190 w40 h20 gnext vnext, 下一页
	Gui, 2:Add, Text, x0 y210 w270 h20 vbt, %name%
	Gui, 2:Show, , 阅读
	Gui, 2:Default
	Gui, 2:+Resize
	}
Else
	WinShow, 阅读
GuiControl, 2:, show, %dis%
Return

show:
SplitPath, file, , , , name,
WinHide, 章节目录
IfWinNotExist, 阅读
	{
	Gui, 2:Add, Text, x0 y10 w270 h180 gtextbody vshow,
	Gui, 2:Add, Text, x20 y190 w40 h20 glast vlast, 上一页
	Gui, 2:Add, Text, x120 y190 w40 h20 gmenu vmenu, 目录
	Gui, 2:Add, Text, x220 y190 w40 h20 gnext vnext, 下一页
	Gui, 2:Add, Text, x0 y210 w270 h20 vbt, %name%
	Gui, 2:Show, , 阅读
	Gui, 2:Default
	Gui, 2:+Resize
	}
Else
	WinShow, 阅读
add = 0
tail = % line%index%
idx = %index%
goto, display
Return

display:
oldidx = %idx%
dis =
y = 0
Loop
{
if A_Index > %sy%
	{
	GuiControl, 2:, show, %dis%
	Break
	}
if add = 1
	{
	idx += 1
	tail = % line%idx%
	}
test := RegExMatch(tail, ".*第.*(章|卷|回)\s.{1,40}")
if test = 1
	GuiControl, 2:, bt, %name%-%tail%
StringLen, len, tail
if len < %sx% ;单行长度小于最大单行字数
	{
	dis = %dis%%tail%`n
	add = 1
	}
if len >= %sx% ;单行长度大于等于最大单行字数
	{
	stringLeft, cline, tail, %sx% ;截取范围内的
	StringTrimLeft, tail, tail, %sx% ;范围外的
	dis = %dis%%cline%`n
	StringLen, len2, tail
	if len2 < 1
		add = 1
	Else
		add = 0
	}
}
Return


~Left::
~Up::
last:
idx := oldidx-sy/2
StringGetPos, pos, idx, .
StringLeft, idx, idx, %pos%
tail =
goto, display
Return

~Right::
~Down::
next:
goto display
Return


GuiClose: ;主窗口关闭
ExitApp

2GuiClose: ;阅读窗口关闭
FileDelete, tail.txt
FileAppend, %tail%, tail.txt
IniWrite, %idx%, history.ini, history, idx
FileDelete, dis.txt
FileAppend, %dis%, dis.txt
IniWrite, %add%, history.ini, history, add
WinHide, 阅读
WinShow, 章节目录
Return

2GuiSize:
sx := A_GuiWidth/6
StringGetPos, pos, sx, .
StringLeft, sx, sx, %pos%
sx -= 1
sy := A_GuiHeight/12
StringGetPos, pos, sy, .
StringLeft, sy, sy, %pos%
sy -= 4
textw := A_GuiWidth
texth := (sy+1)*12
buttony := texth+10
menux := A_GuiWidth/2-20
nextx := A_GuiWidth-40
titley := texth+30
GuiControl, 2:Move, show, w%textw% h%texth%
GuiControl, 2:Move, last, y%buttony%
GuiControl, 2:Move, menu, x%menux% y%buttony%
GuiControl, 2:Move, next, x%nextx% y%buttony%
GuiControl, 2:Move, bt, y%titley%
Return

textbody:
MouseGetPos, clickx, clicky
updown := clicky/texth
if updown > 0.5
	goto, next
if updown < 0.5
	goto, last
Return

#z:: ;Win+Z快速隐藏
#h:: ;Win+H快速隐藏
IfWinActive, ahk_class AutoHotkeyGUI
	WinHide, ahk_class AutoHotkeyGUI
Else
	WinShow, ahk_class AutoHotkeyGUI
Return

minireader.zip



友情链接:Autohotkey中文论坛Autohotkey中文帮助Autohotkey官网我的B站直播间如若生涯一场梦博客联系作者免GooglePlay APK下载

 主题设计 • skyfrit.com  Thinkai's Blog | 保留所有权利

49 queries in 0.799 seconds |