您的位置:首页 > 其它

dll 子类化 记事本 相应自己的功能

2016-05-27 00:17 417 查看
这样就可以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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: