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

这样就可以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 ));//这里一定要注意 

}

代码很粗糙 需要更练习 ,需要源码联系我 [email protected]

猜你喜欢

转载自blog.csdn.net/h1028962069/article/details/51512051
今日推荐