为什么生成的DLL不能注册,要怎样将它注入到指定进程? 下面是代码。#include <windows.h>#include "stdafx.h"WNDPROC lpOldWndFunc=NULL;LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_SYSCOMMAND:
switch(LOWORD(wParam))
{
case 988:
MessageBox(hwnd,"test","About this demo...",MB_OK);
return TRUE;
}
break;}
return CallWindowProc(lpOldWndFunc,hwnd,uMsg,wParam,lParam);
}
BOOL CALLBACK EnumWinProc(HWND hwnd, LPARAM lParam)
{
DWORD PID;
GetWindowThreadProcessId(hwnd,&PID);
if(PID==(DWORD)lParam)
{
HMENU SysMenu=GetSystemMenu(hwnd,FALSE);
if(SysMenu)
{
int ItemCount=GetMenuItemCount(SysMenu);
InsertMenu(SysMenu,ItemCount-1,MF_BYPOSITION|MF_STRING,988,"About This Demo...");
lpOldWndFunc=(WNDPROC)GetWindowLong(hwnd,GWL_WNDPROC);
SetWindowLong(hwnd,GWL_WNDPROC,(LONG)WinProc); }}
return TRUE;
}
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
EnumWindows(EnumWinProc,(LPARAM)(GetCurrentProcessId()));
break;
}return TRUE;
}
{
switch(uMsg)
{
case WM_SYSCOMMAND:
switch(LOWORD(wParam))
{
case 988:
MessageBox(hwnd,"test","About this demo...",MB_OK);
return TRUE;
}
break;}
return CallWindowProc(lpOldWndFunc,hwnd,uMsg,wParam,lParam);
}
BOOL CALLBACK EnumWinProc(HWND hwnd, LPARAM lParam)
{
DWORD PID;
GetWindowThreadProcessId(hwnd,&PID);
if(PID==(DWORD)lParam)
{
HMENU SysMenu=GetSystemMenu(hwnd,FALSE);
if(SysMenu)
{
int ItemCount=GetMenuItemCount(SysMenu);
InsertMenu(SysMenu,ItemCount-1,MF_BYPOSITION|MF_STRING,988,"About This Demo...");
lpOldWndFunc=(WNDPROC)GetWindowLong(hwnd,GWL_WNDPROC);
SetWindowLong(hwnd,GWL_WNDPROC,(LONG)WinProc); }}
return TRUE;
}
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
EnumWindows(EnumWinProc,(LPARAM)(GetCurrentProcessId()));
break;
}return TRUE;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货