这样就可以diy 别人软件 只粘贴部分代码
只是dll 没有劫持 需要手动注入
对记事本菜单进行修改
void menushow()
{
hWnd = FindWindow(NULL, "无标题 - 记事本");
hedit =
FindWindowEx(hWnd,NULL,"Edit", "");
HMENU hMenu = GetMenu(hWnd);
RemoveMenu(hMenu, 0, MF_BYPOSITION);
RemoveMenu(hMenu, 0, MF_BYPOSITION);
RemoveMenu(hMenu, 0, MF_BYPOSITION);
RemoveMenu(hMenu, 0, MF_BYPOSITION);
RemoveMenu(hMenu, 0, MF_BYPOSITION);
HMENU hPopupMenu = CreatePopupMenu();
AppendMenu(hMenu, MF_POPUP, (int)hPopupMenu, "VIP隐藏工具");
AppendMenu(hPopupMenu, MF_STRING, 100, "置顶");
AppendMenu(hPopupMenu, MF_STRING, 101, "透明");
AppendMenu(hPopupMenu, MF_STRING, 102, "设置字体");
AppendMenu(hPopupMenu, MF_STRING, 103, "设置颜色");
AppendMenu(hPopupMenu, MF_STRING, 104, "获取进程");
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
}
子类化的地方 和回调函数
extern "C" _declspec (dllexport)
void fun()
{
OldWindwProc=GetWindowLong(hWnd, GWL_WNDPROC);
SetWindowLong(hWnd,GWL_WNDPROC,(long)NewWndProc);
}
回调函数
LRESULT NewWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_COMMAND:
{
WORD wID = LOWORD(wParam);
if (wID==100)
{
//窗口置顶
SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_DRAWFRAME | SWP_NOSIZE);
}
if (wID==101)
{
typedef BOOL (WINAPI *PFN_SETLAYEREDWINDOWATTRIBUTES)(HWND hWnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags);
PFN_SETLAYEREDWINDOWATTRIBUTES SetLayeredWindowAttributes = NULL;
HMODULE m_hUser32 = LoadLibrary("User32.dll");
SetLayeredWindowAttributes = (PFN_SETLAYEREDWINDOWATTRIBUTES)GetProcAddress(m_hUser32, "SetLayeredWindowAttributes");
SetWindowLong( hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE)| WS_EX_LAYERED);
SetLayeredWindowAttributes( hWnd, 0, 125, 3);
}
//设置字体
if (wID==102)
{
GetObject(GetStockObject(SYSTEM_FONT), sizeof(lf), &lf);
chfont.lStructSize = sizeof(CHOOSEFONT);
chfont.hwndOwner = hWnd;
chfont.hDC = NULL;
chfont.lpLogFont = &lf;
chfont.iPointSize = 0;
chfont.Flags = CF_INITTOLOGFONTSTRUCT | CF_EFFECTS | CF_SCREENFONTS ;
chfont.rgbColors = 0;
chfont.lCustData = 0;
chfont.lpfnHook = NULL;
chfont.lpTemplateName = NULL;
chfont.hInstance = NULL;
chfont.lpszStyle = NULL;
chfont.nFontType = 0;
chfont.nSizeMin = 0;
chfont.nSizeMax = 0;
ChooseFont(&chfont);
//创建字体
hFont = CreateFontIndirect(&lf);
crText=chfont.rgbColors;
SendMessage(hedit,WM_SETFONT,(WPARAM)hFont,0);
InvalidateRect(hedit,NULL,TRUE);
}
if (wID==103)
{
cc.lStructSize =sizeof(cc);
cc.hwndOwner =hedit;
cc.hInstance =0;
cc.rgbResult =0;
cc.lpCustColors =fontcolor;
cc.Flags =CC_RGBINIT;
cc.lCustData =0;
cc.lpfnHook =0;
cc.lpTemplateName =0;
if(ChooseColor(&cc)==TRUE)
{
DeleteObject(hb); //删除以前创建的,以免内存泄露
clBkgnd=cc.rgbResult; //保存背景色z
InvalidateRect(hedit,NULL,TRUE); //强制更新
}
}
//获取进程
if (wID==104)
{
char buf[MAXBYTE] ={0};
char pidbuf[MAXBYTE*10]={0};
HANDLE hSnapshot =CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS,
0);
PROCESSENTRY32 Process = {0};
Process.dwSize = sizeof(PROCESSENTRY32);
BOOL bRet = Process32First(hSnapshot, &Process);
do
{
wsprintf(buf,"%s\r\n",Process.szExeFile);
strcat(pidbuf,buf);
}
while (bRet =Process32Next(hSnapshot, &Process));
SetWindowText(hedit,pidbuf);
}
break;
}
break;
case WM_CTLCOLOREDIT:
{
SetTextColor((HDC)wParam,crText); //设置文字色
SetBkColor((HDC)wParam,clBkgnd); //设置背景色
return (LRESULT)hb;
}
break;
case WM_CLOSE:
{
MessageBox(NULL, "确认是否退出本程序", "提示",MB_ICONINFORMATION);
}
break;
}
return (CallWindowProc((WNDPROC)OldWindwProc,hWnd,message,wParam,lParam ));//这里一定要注意
}
代码很粗糙 需要更练习 ,需要源码联系我 1028962069@qq.com