如题
代码如下,但无法实现,如何修改?
#include <windows.h>
#include <Winuser.h>
#include <stdio.h>
#include <wingdi.h>
RECT winrect;
int deskwidth;
int deskheight;
HDC winhdc;
HBRUSH hbrush;
//回调函数声明
LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
HWND GetBackground(){
HWND hwnd = FindWindowA("progman","Program Manager");
HWND worker = NULL;
do{
worker = FindWindowExA(NULL,worker,"workerW",NULL);
if(worker != NULL){
char buff[200] = {0};
int ret = GetClassNameA(worker,(PCHAR)buff,sizeof(buff)*2);
if(ret == 0){
return NULL;
}
}
if(GetParent(worker) == hwnd){
return worker;
}
}while(worker != NULL);
return NULL;
}
void SetFather(HWND child){
HWND hwnd = GetBackground();
if(hwnd == NULL){
SendMessage(hwnd,0x052C,0,0);
hwnd = GetBackground();
}
if(hwnd != NULL){
SetParent(child,hwnd);
}
}
void printbj(){
//FillRect(winhdc, &winrect, hbrush);
TextOutA(winhdc, 700, 500, "哈哈哈", 6);
}
//Win32应用程序入口
int WINAPI WinMain(
HINSTANCE hInstance, // 当前应用程序实例
HINSTANCE hPrevInstance, // 32位程序没用,总为0
LPSTR lpCmdLine, // 命令行参数
int nCmdShow // 显示状态
)
{
GetClientRect(GetDesktopWindow(),&winrect);//获取桌面大小
deskwidth = winrect.right - winrect.left;
deskheight = winrect.bottom - winrect.top;
hbrush = CreateSolidBrush(RGB(255, 255, 255));//创建画刷
char szTitle[] = "背景显示器";
char szClassName[] = "显示背景";
// 1.设计窗口类
WNDCLASS wndcls; //窗口类
//填写窗口类相应的信息(必要)
wndcls.cbClsExtra = 0; //类的额外附加字节数
wndcls.cbWndExtra = 0; //窗口额外的附加字节数
wndcls.hbrBackground = (HBRUSH)GetStockObject(DKGRAY_BRUSH); //背景颜色
wndcls.hCursor = LoadCursor(NULL,IDC_ARROW); //光标样式
wndcls.hIcon = LoadIcon(NULL,IDI_WINLOGO); //图标样式
wndcls.hInstance = hInstance; //实例句柄
wndcls.lpfnWndProc = WindowProc; //回调函数,由系统调用
wndcls.lpszClassName = szClassName; //窗口类名称
wndcls.lpszMenuName = NULL; //菜单名字
wndcls.style = CS_HREDRAW | CS_VREDRAW; //窗口类型,这里是水平重画跟垂直重画
// 2.注册窗口类
RegisterClass(&wndcls);
// 3.创建窗口
HWND hwnd;
hwnd=CreateWindow(
szClassName, //窗口类名称,必须跟上面填写的一样,否则显示不了窗口
szTitle, //窗口标题
WS_OVERLAPPEDWINDOW, //指定要创建的窗口的样式
0,0, //窗口位置
deskwidth,deskheight, //窗口大小
NULL, //父窗口
NULL, //菜单
hInstance, //实例句柄,WinMain函数参数
NULL //窗口创建数据
);
// 4.显示窗口
winhdc = GetWindowDC(hwnd);
//SetLayeredWindowAttributes(hwnd,0,(255*70)/150,LWA_ALPHA);//设置窗口透明
SetFather(hwnd);//设置窗口位置
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd); //刷新窗口
//printbj();
// 循环获取消息
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg); //转换消息(如:WM_CHAR),只会产生新的消息,不会销毁原由消息
// WM_CHAR消息由WM_KEYDOWN消息和WM_KEYUP消息组成
DispatchMessage(&msg); //将消息传给窗口回调函数
}
return 0;
}
//回调函数,处理各种消息,由系统调用
LRESULT CALLBACK WindowProc(
HWND hwnd, // 窗口句柄
UINT uMsg, // 指定消息类型
WPARAM wParam, // 第一个消息参数
LPARAM lParam // 第二条消息参数
)
{
switch(uMsg)
{
case WM_PAINT: /* 窗口重绘消息 */
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(hwnd,&ps); //指定窗口进行绘图工作的准备
EndPaint(hwnd,&ps); //绘图结束,释放绘图区
/*
BeginPaint和EndPaint只能在WM_PAINT消息中使用,不能在其它消息在使用
BeginPaint和EndPaint是一对的,BeginPaint函数创建的DC不能用ReleaseDC去释放
GetDC获取到的DC也不能使用EndPaint来释放
*/
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam); //缺省消息处理,必不可少!
}
return 0;
}