@echo off
::NicTense 写于 2010.03.19
setlocal enableextensions
setlocal enabledelayedexpansion
set p=%SystemDrive%\wxpe\pic
for /f "tokens=2,*" %%i in ('reg query "HKCU\Control Panel\Desktop" /v Wallpaper') do (
set w=%%j
if /i "!w:~0,11!"=="!p!" set "w=%%~nxj" & goto next
)
for /f "tokens=2,*" %%i in ('reg query "HKCU\Control Panel\Desktop" /v ConvertedWallpaper') do (
set w=%%j
if /i "!w:~0,11!"=="!p!" ( set "w=%%~nxj" ) else set w=
)
:next
set n=0
for /f "tokens=*" %%i in ('dir %p%\*.bmp %p%\*.jpg /b /on') do (
set "w!n!=%%i"
set /a n+=1
if "!w!"=="found" set "w=%%i" & goto wall
if /i "%%i"=="!w!" set w=found
)
if /i "%1"=="rand" if "%w%"=="" goto rand
set "w=%w0%" & goto wall
:rand
set /a n=!RANDOM!%%n
set w=!w%n%!
:wall
if not "%w%"=="" pecmd.exe WALL "%p%\%w%"
原帖由 NicTense 于 2010-3-20 02:38 发表
闲着无聊,写了个设置墙纸的批处理,可轻松实现开机随机显示墙纸和一键切换循环显示,有兴趣的可以试试批处理文件名为SETWP.CMD,放在PE的wxpe\system32目录下,源代码如下:(直接下载:85207)这 ...
1.51 KB, 下载次数: 77, 下载积分: 无忧币 -2
原帖由 slore 于 2010-3-20 21:25 发表
nircmd不错呀。。。
30多kB功能超强。。。
VC吧,都不行了,现在就会脚本什么的。。。
搞了半天才搞出来。感觉貌似用汇编写能小些=。=
USBFIX才5KB呀!你应该找他搞的。。。
S2B.exe 2.5KB
你 ...
自己按PrintScreen(你要用pecmd按对吧?)
原帖由 slore 于 2010-3-20 22:49 发表
没有现成的,有现成intel jpeg libray库。
找个时间试下。现学现卖,都是google找
相关函数,自己乱整合的。
既然内核mspaint,干嘛把关联给精简了?
预览,右键都不能直接编辑了。。。
BOOL SaveBitmap(const BITMAP &bm,HDC hDC,HBITMAP hBitmap,LPCTSTR szFileName)
{
int nBitPerPixel = bm.bmBitsPixel;//获得颜色模式
int nW = bm.bmWidth;
int nH = bm.bmHeight;
int nPalItemC=bm.bmPlanes; //调色板项的个数
int nBmpInfSize=sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*nPalItemC;//位图信息的大小
int nDataSize=(nBitPerPixel*nW+31)/32*4*nH;//位图数据的大小
//初始化位图信息
BITMAPFILEHEADER bfh = {0};//位图文件头
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + nBmpInfSize;//sizeof(BITMAPINFOHEADER);//到位图数据的偏移量
bfh.bfSize = bfh.bfOffBits + nDataSize;//文件总的大小
bfh.bfType = (WORD)0x4d42;//位图标志
char * p = new char[nBmpInfSize+nDataSize];//申请内存位图数据空间(包括信息头)
memset(p,0,nBmpInfSize);//将信息头的数据初始化为0
LPBITMAPINFOHEADER pBih = (LPBITMAPINFOHEADER) p;//位图信息头
pBih->biCompression = BI_RGB;
pBih->biBitCount = nBitPerPixel;//每个图元像素使用的位数
pBih->biHeight = nH;//高度
pBih->biWidth = nW;//宽度
pBih->biPlanes = 1;
pBih->biSize = sizeof(BITMAPINFOHEADER);
pBih->biSizeImage = nDataSize;//图像数据大小
char *pData=p+nBmpInfSize;
//DDB转换为DIB
::GetDIBits(hDC,hBitmap,0,nH,pData,(LPBITMAPINFO) pBih, DIB_RGB_COLORS);//获取位图数据
ofstream ofs(szFileName,ios::binary);
if(ofs.fail())
return FALSE;
ofs.write((const char*)&bfh, sizeof(BITMAPFILEHEADER));//写入位图文件头
ofs.write((const char*)pBih, nBmpInfSize);//写入位图信息数据
ofs.write((const char*)pData, nDataSize);//写入位图数据
return TRUE;
}
void main()
{
HWND hWnd=NULL;
::OpenClipboard(hWnd); // 打开剪贴板
HANDLE hBitmap = ::GetClipboardData(CF_BITMAP); // 获取剪贴板数据句柄
if(hBitmap==NULL)
{
return ;
}
HDC hDC = ::GetDC(hWnd); // 获取设备环境句柄
HDC hdcMem = CreateCompatibleDC(hDC); // 创建与设备相关的内存环境
SelectObject(hdcMem, hBitmap); // 选择对象
SetMapMode(hdcMem, GetMapMode(hDC)); // 设置映射模式
BITMAP bm; // 得到位图对象
GetObject(hBitmap, sizeof(BITMAP), &bm);
SaveBitmap(bm,hDC,(HBITMAP)hBitmap,"clip.bmp");
::ReleaseDC(hWnd, hDC); // 释放设备环境句柄
DeleteDC(hdcMem); // 删除内存环境
::CloseClipboard(); // 关闭剪贴板
}
//获取屏幕中指定区域的图
hbitmap cpage1::gethbitmap()
{
int nwidth=m_rectcapture.width();
int nheight=m_rectcapture.height(); //得到鼠标所在处的窗口的区域宽、高
hdc hdcscreen, hmemdc;
hbitmap hbitmap, holdbitmap;
hdcscreen = createdc( //建立一个屏幕设备环境句柄
"display", //用vbnullstring传递null值给该参数,除非:1、用display,是获取整个屏幕的设备场景;2、用winspool,则是访问打印驱动
null, //所用专门设备的名称。该名由打印管理器分配显示
null, //用vbnullstring传递null值给该参数
null //devmode,这个结构保存初始值。用createdcbynum传递0(null)值则适用默认设置
);
hmemdc = createcompatibledc(hdcscreen); //建立一个与屏幕设备环境句柄兼容、与鼠标所在处的窗口的区域等大的位图
hbitmap = createcompatiblebitmap(hdcscreen, nwidth, nheight);
holdbitmap =(hbitmap)selectobject(hmemdc, hbitmap); //把新位图选到内存设备描述表中
bitblt(hmemdc, 0, 0, nwidth, nheight, hdcscreen,m_rectcapture.left,m_rectcapture.top,srccopy); // 把屏幕设备描述表拷贝到内存设备描述表中
hbitmap =(hbitmap)selectobject(hmemdc, holdbitmap); //取回鼠标所在处的窗口屏幕位图的句柄
deletedc(hdcscreen);
deletedc(hmemdc); //不再需要时,该设备场景可用deletedc函数删除。删除前,其所有对象应回复初始状态。
return hbitmap;
}
//保存图片
void cpage1::onlbuttonup(uint nflags, cpoint point)
{
/*-------------------------------------------------*/
m_getwininfo.eraselastwindow();
/*-------------------------------------------------*/
if(this->m_bsavetofile)
this->writebmptofile(this->gethbitmap());
if(this->m_bcopytoclip)
this->copybmptoclipboard(this->gethbitmap());
if(this->m_bopenmspaint)
::shellexecute(null,"open","mspaint.exe",this->m_strfilepath,null,sw_shownormal);
this->stopcapture();
afxgetmainwnd()->showwindow(sw_normal); //恢复窗口显示模式
cpropertypage::onlbuttonup(nflags, point);
}
欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) | Powered by Discuz! X3.3 |