桌面动态壁纸
By
o3o_o3o_o3o
at 2022-11-27 • 0人收藏 • 748人看过
我们首先需要把win.ui.glass库中的几段代码改一下:
把第15行的winform.text改成"玻璃窗口"。
把第84行改成注释。
然后运行代码:
import win.ui; /*DSG{{*/ var winform = win.form(text="114514";right=759;bottom=469;acceptfiles=1;bgcolor=15793151;border="none";exmode="toolwindow";min=false) winform.add( listview={cls="listview";left=0;top=0;right=428;bottom=459;acceptfiles=1;bgcolor=15793151;mode="icon";z=1} ) /*}}*/ var VideoForm = win.form(text="视频播放器";right=759;bottom=469;acceptfiles=1;min=false) VideoForm.add( ffWindow={cls="custom";text="自定义控件";left=26;top=26;right=693;bottom=427;bgcolor=0;z=1} ) import win.ui.glass; win.ui.glass(winform,,1,,0); import mpvPlayer; import string; import fsys.lnk; import fsys.file; import fsys.info; import fsys.table; import key.hotkey; import win.ui.explorer; import win.imageList; import process; import soImage; import console; import win.ui.menu; winform.popmenu = win.ui.popmenu(winform); var mplayer = mpvPlayer(VideoForm.ffWindow); var lnk = fsys.lnk(); var Img = soImage(); var F={}; var a=0,o=0; var IfMove = 0;//避免重复setPos导致卡顿 var VideoPath = "C:\Users\Lenovo\Videos\Captures\Phigros痉挛桌面动态壁纸.mp4";//视频地址 VideoForm.show(true); hotkey = key.hotkey(winform); var fsystable = fsys.table("/paths.table") winform.enableDpiScaling(); var add = function(filePath,dontsave){ var sfi = fsys.info.get(filePath, 0x100/*_SHGFI_ICON*/|0x4000/*_SHGFI_SYSICONINDEX*/) var imageList = win.imageList(topointer(sfi.returnValue)) winform.listview.setImageList( imageList,0/*_LVSIL_NORMAL*/ ) var spth = io.splitpath(filePath) var itemtext = spth.file if(!#itemtext) itemtext = spth.drive winform.listview.addItem(itemtext,,sfi.iIcon) ::DestroyIcon(sfi.hIcon) imageList.destroy() if(dontsave) return ; if(!fsystable) fsystable = fsys.table("/paths.table") table.push(fsystable,filePath) fsystable.save() } for(k,v in fsystable){ if(k = "_gc") continue ; if(!io.exist(fsystable[k])){ fsystable[k] = null fsystable.save() continue; } add(fsystable[k],true) } winform.listview.onnotify = function(id,code,ptr){ select(code) { case 0xFFFFFFFD/*_NM_DBLCLK*/ { var nm = winform.listview.getNotifyMessage(code,ptr) if(nm.iItem){ process.execute(fsystable[nm.iItem]) } } case 0xFFFFFFFB/*_NM_RCLICK*/{ var nm = winform.listview.getNotifyMessage(code,ptr) if(nm.iItem){ winform.popmenu.add("打开",function(){process.execute(fsystable[nm.iItem])}) winform.popmenu.add('删除',function(){winform.listview.delItem(nm.iItem)}) winform.popmenu.popup() win.delay(100) winform.popmenu.remove(1) winform.popmenu.remove(1) } } } } hotkey.reg( "Ctrl","D", function(hFocusWnd,...){ if(win.msgboxTest("你是否要清空?","提示")){ fsystable = null collectgarbage("collect") string.save("/paths.table","{}" ) winform.listview.clear() } } ) winform.wndproc = function(hwnd,message,wParam,lParam){ winform.listview.setPos(0,0,winform.width,winform.height) } //winform.listview.orphanWindow() mplayer.loadFile(VideoPath); var tmId = VideoForm.setInterval( function(){ event = mplayer.waitEvent(0); },1 ) mplayer.onEndFile = function(reason,err){ mplayer.loadFile(VideoPath); } mplayer.setVolume(0); VideoForm.ffWindow.setPos(0,0,VideoForm.width-18,VideoForm.height-46); VideoForm.wndproc = function(hwnd,message,wParam,lParam){ if(message==5/*_WM_SIZE*/){ VideoForm.ffWindow.setPos(0,0,VideoForm.width-18,VideoForm.height-46) } if(message==3/*_WM_MOVE*/){ Ifmove=1; var x,y,cx,cy,pos = VideoForm.getPos(); win.setPos(win.find(,"玻璃窗口"),-10,-10,5,5,0/*_HWND_TOP*/)//这行代码是为了不让玻璃窗口碍事,但是这行代码有时会引起程序在关闭窗口时报错 winform.setPos(x+9,y+38,cx-18,cy-47,0/*_HWND_TOP*/); } else{ Ifmove=0; } if(message==0x233/*_WM_DROPFILES*/){ var tmpfiletab = win.getDropFile(wParam) for(i=1;#tmpfiletab;1){ add(tmpfiletab[i]) } } } VideoForm.onClose = function(){ winform.close(); } winform.onClose = function(hwnd,message,wParam,lParam){ VideoForm.close(); fsystable = null collectgarbage("collect") string.save("/paths.table","{}" ) winform.listview.clear() } winform.show(true); while(winform.valid==true){ if(Ifmove==0){ var x,y,cx,cy,pos = VideoForm.getPos(); win.setPos(win.find(,"玻璃窗口"),-10,-10,5,5,0/*_HWND_TOP*/)//这行代码是为了不让玻璃窗口碍事,但是这行代码有时会引起程序在关闭窗口时报错 winform.setPos(x+9,y+38,cx-18,cy-47,0/*_HWND_TOP*/); win.delay(100) } } win.loopMessage(); return winform;
你就可以得到一个像这样的桌面动态壁纸了:
虽然总体效果很好,但是依然有一些问题:
关闭窗口时可能会有报错的声音,但是没有消息框。
删除一个文件会发生这样的事情:
(而且同一个文件可以添加多次)
3. 有的时候listview下方会出现滑动条:
4. 文字周围有白框。
5. 我希望文件是竖着排放的,但它是横着的。
6. 视频播放完之后桌面动态壁纸还会黑一下:
希望有哪位大神能帮我解决这几个问题,谢谢。
2 个回复 | 最后更新于 2022-11-28
登录后方可回帖
没啥,一开始以为做的是动态屏保,忽略就行了