100分求以前在csdn上发的文章里的c++代码 以前在csdn上看见一位仁兄写的文章,类似于更换桌面(不是更换桌面墙纸),但运行的程序仍然进程里,以前把那个代码研究了一下,可惜硬盘出了一些问题,所以代码不见了,所以……希望大家帮忙 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我记得以前那位仁兄写的文章有“吐血推荐”这几个字,但是我在csdn上搜索了很久也没找到,所以才发了这个……UP者有分!!!!!!!!提供代码者高分!!!!!!!谢谢!!!!! 那个代码我就不知道了,不过帮人顶一下。其实你用注入一个dll到目标进程的方法也可以实现的 #include "stdafx.h"#include "resource.h"#include "ShellApi.h"HINSTANCE hInst = NULL;HDESK hDesktopCurrent = NULL;HDESK hDesktopLlx = NULL;LONG APIENTRY WndProc( HWND hWnd, UINT message, // type of message WPARAM wParam, // additional information LPARAM lParam) // additional information{ int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_ABOUT: //DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code here... RECT rt; GetClientRect(hWnd, &rt); //DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER); EndPaint(hWnd, &ps); break; /* case WM_DESTROY: PostQuitMessage(0); break; //*/ case WM_LBUTTONDOWN: break; case WM_HOTKEY: if(7777 == wParam) { PostQuitMessage(0); } else if(7778 == wParam) { SwitchDesktop(hDesktopCurrent); } else if(7779 == wParam) { SwitchDesktop(hDesktopLlx); } break; case WM_QUIT: case WM_DESTROY: SwitchDesktop(hDesktopCurrent); return DefWindowProc(hWnd, message, wParam, lParam); default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0;}void StartMyExplore(void){ STARTUPINFO sui; // Process startup info PROCESS_INFORMATION pi; // info returned from CreateProcess // // Most sui members will be 0 // ZeroMemory ((PVOID)&sui, sizeof(sui)); sui.cb = sizeof (sui); // // Need the lpDesktop member so the new process runs on this desktop // The lpDesktop member was reserved in previous versions of NT // sui.lpDesktop = _T("llx"); CreateProcess (NULL, // image name "explorer", // command line NULL, // process security attributes NULL, // thread security attributes TRUE, // inherit handles CREATE_DEFAULT_ERROR_MODE|CREATE_SEPARATE_WOW_VDM, NULL, // environment block NULL, // current directory &sui, // STARTUPINFO &pi); // PROCESS_INFORMATION}int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ // run once SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = TRUE; sa.lpSecurityDescriptor = 0; HANDLE hMap = NULL; hMap = CreateFileMapping((void *)0xFFFFFFFF, &sa, PAGE_READWRITE, 0, 8, "File_llx"); if (hMap != NULL && GetLastError() == ERROR_ALREADY_EXISTS) { return TRUE; } WNDCLASS wc; wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon (NULL, "IDI_SETTHREADDESKTOP"); wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject (WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = "lilinxiang"; if(!RegisterClass(&wc)) { return TRUE; } hDesktopCurrent = NULL; hDesktopCurrent = GetThreadDesktop(GetCurrentThreadId()); hDesktopLlx = NULL; hDesktopLlx = OpenDesktop("llx", 0, FALSE, NULL); if (hDesktopLlx != NULL) { CloseDesktop(hDesktopLlx); } hDesktopLlx = CreateDesktop("llx", NULL, NULL,0,MAXIMUM_ALLOWED, NULL); if(hDesktopLlx == NULL) { return 0; } if(!SetThreadDesktop(hDesktopLlx)) { char szError[256] = {0}; ltoa( (long)(GetLastError()) , szError, 10); } SwitchDesktop(hDesktopLlx); HWND hWnd = NULL; hWnd = CreateWindow ("lilinxiang", "hello, world!", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL ); if(NULL == hWnd) { return TRUE; } //register hotkey for exit this desktop or switch to another desktop //ShowWindow(hWnd, SW_SHOW); //UpdateWindow(hWnd); if(!RegisterHotKey(hWnd, 7777, MOD_CONTROL, 'Q')) {//exit process return TRUE; } if(!RegisterHotKey(hWnd, 7778, MOD_CONTROL | MOD_SHIFT, 'Q')) {//switch to new desktop return TRUE; } if(!RegisterHotKey(hWnd, 7779, MOD_CONTROL | MOD_SHIFT, 'W')) {//switch to original desktop return TRUE; } StartMyExplore(); MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg);// Translates virtual key codes DispatchMessage(&msg); // Dispatches message to window } SwitchDesktop(hDesktopCurrent); return TRUE;} 呵呵!谢谢loopyifly(深情咸鱼)和Ah(蓝过天)了! 为什么一个句柄加上(BYTE*)后就可以变成指针了.... CImageList出错,在线==答案,问题困扰很久了 关于MFC地图绘制的问题。 SetbkColor()用法... 多种结构客户端怎么区分阿 一副24bit真彩的bmp图如何转换成(单色,4, 16)灰度图.谢谢 请教大虾:怎样能清除CListCtrl的闪烁现象 关于从服务器下载,自动升级? mov后缀文件如何打开? 网页中在文本框之间切换需等待很长时间,何故? 请问在使用远程线程动态镶入DLL时如何启动DLL中的函数? 100分! 我的flash控件不能嵌入屏幕保护程序
UP者有分!!!!!!!!
提供代码者高分!!!!!!!
谢谢!!!!!
其实你用注入一个dll到目标进程的方法也可以实现的
#include "resource.h"#include "ShellApi.h"HINSTANCE hInst = NULL;HDESK hDesktopCurrent = NULL;
HDESK hDesktopLlx = NULL;LONG APIENTRY WndProc(
HWND hWnd,
UINT message, // type of message
WPARAM wParam, // additional information
LPARAM lParam) // additional information
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc; switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
//DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
RECT rt;
GetClientRect(hWnd, &rt);
//DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
EndPaint(hWnd, &ps);
break;
/*
case WM_DESTROY:
PostQuitMessage(0);
break;
//*/
case WM_LBUTTONDOWN:
break;
case WM_HOTKEY:
if(7777 == wParam)
{
PostQuitMessage(0);
}
else if(7778 == wParam)
{
SwitchDesktop(hDesktopCurrent);
}
else if(7779 == wParam)
{
SwitchDesktop(hDesktopLlx);
}
break;
case WM_QUIT:
case WM_DESTROY:
SwitchDesktop(hDesktopCurrent);
return DefWindowProc(hWnd, message, wParam, lParam);
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}void StartMyExplore(void)
{
STARTUPINFO sui; // Process startup info
PROCESS_INFORMATION pi; // info returned from CreateProcess
//
// Most sui members will be 0
//
ZeroMemory ((PVOID)&sui, sizeof(sui)); sui.cb = sizeof (sui);
//
// Need the lpDesktop member so the new process runs on this desktop
// The lpDesktop member was reserved in previous versions of NT
//
sui.lpDesktop = _T("llx");
CreateProcess (NULL, // image name
"explorer", // command line
NULL, // process security attributes
NULL, // thread security attributes
TRUE, // inherit handles
CREATE_DEFAULT_ERROR_MODE|CREATE_SEPARATE_WOW_VDM,
NULL, // environment block
NULL, // current directory
&sui, // STARTUPINFO
&pi); // PROCESS_INFORMATION
}int CALLBACK WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// run once
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = 0;
HANDLE hMap = NULL;
hMap = CreateFileMapping((void *)0xFFFFFFFF, &sa, PAGE_READWRITE, 0, 8, "File_llx");
if (hMap != NULL && GetLastError() == ERROR_ALREADY_EXISTS)
{
return TRUE;
} WNDCLASS wc;
wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon (NULL, "IDI_SETTHREADDESKTOP");
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject (WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = "lilinxiang";
if(!RegisterClass(&wc))
{
return TRUE;
} hDesktopCurrent = NULL;
hDesktopCurrent = GetThreadDesktop(GetCurrentThreadId()); hDesktopLlx = NULL;
hDesktopLlx = OpenDesktop("llx", 0, FALSE, NULL);
if (hDesktopLlx != NULL)
{
CloseDesktop(hDesktopLlx);
} hDesktopLlx = CreateDesktop("llx", NULL,
NULL,0,MAXIMUM_ALLOWED,
NULL);
if(hDesktopLlx == NULL)
{
return 0;
} if(!SetThreadDesktop(hDesktopLlx))
{
char szError[256] = {0};
ltoa( (long)(GetLastError()) , szError, 10);
}
SwitchDesktop(hDesktopLlx); HWND hWnd = NULL;
hWnd = CreateWindow ("lilinxiang",
"hello, world!",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL
);
if(NULL == hWnd)
{
return TRUE;
} //register hotkey for exit this desktop or switch to another desktop
//ShowWindow(hWnd, SW_SHOW);
//UpdateWindow(hWnd);
if(!RegisterHotKey(hWnd, 7777, MOD_CONTROL, 'Q'))
{//exit process
return TRUE;
}
if(!RegisterHotKey(hWnd, 7778, MOD_CONTROL | MOD_SHIFT, 'Q'))
{//switch to new desktop
return TRUE;
}
if(!RegisterHotKey(hWnd, 7779, MOD_CONTROL | MOD_SHIFT, 'W'))
{//switch to original desktop
return TRUE;
}
StartMyExplore(); MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);// Translates virtual key codes
DispatchMessage(&msg); // Dispatches message to window
} SwitchDesktop(hDesktopCurrent);
return TRUE;
}