// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
HINSTANCE g_hInst;
HWND hWinMain,hList;
#define ID_LISTVIEW 104#pragma comment(lib,"comctl32")void InitListView()
{ LV_COLUMN lvc; hList=CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEWA, NULL,
WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS,
0, 0, 0, 0, hWinMain, (HMENU)ID_LISTVIEW, g_hInst, NULL);
if(!hList)
{
char err[50]={0};
wsprintf(err,"Error Code=%d",GetLastError());
MessageBox(hWinMain,err,"Error",MB_OK); }
SendMessage(hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_GRIDLINES); lvc.mask= LVCF_TEXT | LVCF_WIDTH ;
lvc.fmt=LVCFMT_RIGHT;
lvc.pszText="序号";
lvc.cx=50;
SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&lvc); lvc.mask |= LVCF_FMT;
lvc.fmt=LVCFMT_LEFT; lvc.pszText="CCCC";
lvc.cx= 350;
SendMessage(hList, LVM_INSERTCOLUMN, 1, (LPARAM)&lvc); lvc.pszText="AAAA";
lvc.cx= 100;
SendMessage(hList, LVM_INSERTCOLUMN, 2, (LPARAM)&lvc);}LRESULT CALLBACK ProcWinMain(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
//HANDLE_MSG(hwnd,WM_COMMAND,Cls_OnCommand);
case WM_SIZE:
MoveWindow(hList,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);
return 0;
case WM_SHOWWINDOW:
return 0;
case WM_CREATE:
hWinMain=hwnd;
InitListView();
//LocateNtdllEntry();
//FindExport();
//DebugPrivilege (SE_DEBUG_NAME,TRUE);
//GetSSDT();
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_NOTIFY:
switch (LOWORD(wParam))
{
case ID_LISTVIEW:
if( ((LPNMHDR)lParam)->code == NM_CUSTOMDRAW )
{
switch( ((LPNMLVCUSTOMDRAW)lParam)->nmcd.dwDrawStage )
{
case CDDS_PREPAINT:
return CDRF_NOTIFYITEMDRAW;
case CDDS_ITEMPREPAINT:
{
LPNMLVCUSTOMDRAW customDraw = (LPNMLVCUSTOMDRAW)lParam;
customDraw->clrTextBk=customDraw->nmcd.dwItemSpec%2?RGB(250, 250, 250):RGB(0xFF, 0xFF, 0xFF);
//if () customDraw->clrText = RGB(255, 0, 0) ;
//else customDraw->clrText = RGB(0, 0, 0) ;
return CDRF_NEWFONT;
}
break;
default:
return CDRF_DODEFAULT;
}
}
break;
}
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
int ShowDialog(HINSTANCE hInstance)
{
WNDCLASSEX stWndClass;
MSG stMsg;
INITCOMMONCONTROLSEX iex; g_hInst=hInstance;
iex.dwSize=sizeof(iex);
iex.dwICC=ICC_LISTVIEW_CLASSES;
if(!InitCommonControlsEx(&iex))
{
char err[50]={0};
wsprintf(err,"Error Code=%d",GetLastError());
MessageBox(hWinMain,err,"2",MB_OK);
}
// ssdt_list=new SSDT_LIST_ENTRY[500]; ZeroMemory(&stWndClass,sizeof(stWndClass));
// HMENU hMenu=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1));
HICON g_hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));;
stWndClass.hCursor=LoadCursor(0,IDC_ARROW);
stWndClass.cbSize=sizeof(WNDCLASSEX);
stWndClass.style=CS_HREDRAW | CS_VREDRAW;
stWndClass.lpfnWndProc=ProcWinMain;
stWndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW + 1);
stWndClass.lpszClassName="DymaticCreateWindow";
stWndClass.hIcon=g_hIcon;
stWndClass.hInstance=g_hInst; if(!RegisterClassEx(&stWndClass))
{
char err[50]={0};
wsprintf(err,"Error Code=%d",GetLastError());
MessageBox(hWinMain,err,"Error",MB_OK); }
//建立并显示窗口
CreateWindowEx(WS_EX_CLIENTEDGE,"DymaticCreateWindow","动态创建窗口",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL/*hMenu*/,hInstance,NULL); ShowWindow(hWinMain,SW_SHOWNORMAL);
UpdateWindow(hWinMain); //消息循环
while (PeekMessage(&stMsg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&stMsg);
DispatchMessage(&stMsg);
}
while (1)
{
ShowWindow(hWinMain,SW_SHOWNORMAL);
}
WaitMessage();
return (int)stMsg.wParam;
}BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{ switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
//::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ShowDialog,(LPVOID)hModule,NULL,NULL);
ShowDialog(hModule);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}上面是源代码,程序远程注入,在CreateProcess 的时候把进程暂停,然后远程注入执行,唯独ListView不出来,感觉像是comctl32加载问题, GetLastError =1407 无有效的模组怎么解决,,,如果不用CreateThread去创建窗口没有任何问题
#include "stdafx.h"
HINSTANCE g_hInst;
HWND hWinMain,hList;
#define ID_LISTVIEW 104#pragma comment(lib,"comctl32")void InitListView()
{ LV_COLUMN lvc; hList=CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEWA, NULL,
WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS,
0, 0, 0, 0, hWinMain, (HMENU)ID_LISTVIEW, g_hInst, NULL);
if(!hList)
{
char err[50]={0};
wsprintf(err,"Error Code=%d",GetLastError());
MessageBox(hWinMain,err,"Error",MB_OK); }
SendMessage(hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_GRIDLINES); lvc.mask= LVCF_TEXT | LVCF_WIDTH ;
lvc.fmt=LVCFMT_RIGHT;
lvc.pszText="序号";
lvc.cx=50;
SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&lvc); lvc.mask |= LVCF_FMT;
lvc.fmt=LVCFMT_LEFT; lvc.pszText="CCCC";
lvc.cx= 350;
SendMessage(hList, LVM_INSERTCOLUMN, 1, (LPARAM)&lvc); lvc.pszText="AAAA";
lvc.cx= 100;
SendMessage(hList, LVM_INSERTCOLUMN, 2, (LPARAM)&lvc);}LRESULT CALLBACK ProcWinMain(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
//HANDLE_MSG(hwnd,WM_COMMAND,Cls_OnCommand);
case WM_SIZE:
MoveWindow(hList,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);
return 0;
case WM_SHOWWINDOW:
return 0;
case WM_CREATE:
hWinMain=hwnd;
InitListView();
//LocateNtdllEntry();
//FindExport();
//DebugPrivilege (SE_DEBUG_NAME,TRUE);
//GetSSDT();
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_NOTIFY:
switch (LOWORD(wParam))
{
case ID_LISTVIEW:
if( ((LPNMHDR)lParam)->code == NM_CUSTOMDRAW )
{
switch( ((LPNMLVCUSTOMDRAW)lParam)->nmcd.dwDrawStage )
{
case CDDS_PREPAINT:
return CDRF_NOTIFYITEMDRAW;
case CDDS_ITEMPREPAINT:
{
LPNMLVCUSTOMDRAW customDraw = (LPNMLVCUSTOMDRAW)lParam;
customDraw->clrTextBk=customDraw->nmcd.dwItemSpec%2?RGB(250, 250, 250):RGB(0xFF, 0xFF, 0xFF);
//if () customDraw->clrText = RGB(255, 0, 0) ;
//else customDraw->clrText = RGB(0, 0, 0) ;
return CDRF_NEWFONT;
}
break;
default:
return CDRF_DODEFAULT;
}
}
break;
}
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
int ShowDialog(HINSTANCE hInstance)
{
WNDCLASSEX stWndClass;
MSG stMsg;
INITCOMMONCONTROLSEX iex; g_hInst=hInstance;
iex.dwSize=sizeof(iex);
iex.dwICC=ICC_LISTVIEW_CLASSES;
if(!InitCommonControlsEx(&iex))
{
char err[50]={0};
wsprintf(err,"Error Code=%d",GetLastError());
MessageBox(hWinMain,err,"2",MB_OK);
}
// ssdt_list=new SSDT_LIST_ENTRY[500]; ZeroMemory(&stWndClass,sizeof(stWndClass));
// HMENU hMenu=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1));
HICON g_hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));;
stWndClass.hCursor=LoadCursor(0,IDC_ARROW);
stWndClass.cbSize=sizeof(WNDCLASSEX);
stWndClass.style=CS_HREDRAW | CS_VREDRAW;
stWndClass.lpfnWndProc=ProcWinMain;
stWndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW + 1);
stWndClass.lpszClassName="DymaticCreateWindow";
stWndClass.hIcon=g_hIcon;
stWndClass.hInstance=g_hInst; if(!RegisterClassEx(&stWndClass))
{
char err[50]={0};
wsprintf(err,"Error Code=%d",GetLastError());
MessageBox(hWinMain,err,"Error",MB_OK); }
//建立并显示窗口
CreateWindowEx(WS_EX_CLIENTEDGE,"DymaticCreateWindow","动态创建窗口",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL/*hMenu*/,hInstance,NULL); ShowWindow(hWinMain,SW_SHOWNORMAL);
UpdateWindow(hWinMain); //消息循环
while (PeekMessage(&stMsg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&stMsg);
DispatchMessage(&stMsg);
}
while (1)
{
ShowWindow(hWinMain,SW_SHOWNORMAL);
}
WaitMessage();
return (int)stMsg.wParam;
}BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{ switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
//::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ShowDialog,(LPVOID)hModule,NULL,NULL);
ShowDialog(hModule);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}上面是源代码,程序远程注入,在CreateProcess 的时候把进程暂停,然后远程注入执行,唯独ListView不出来,感觉像是comctl32加载问题, GetLastError =1407 无有效的模组怎么解决,,,如果不用CreateThread去创建窗口没有任何问题
解决方案 »
- 编辑工具栏时,无意把打开按钮删除了,怎么才能添上去
- 问个基础的,如何修改工程所加载的数据库文件?
- 如何清除不定长度的edit框里的内容
- 如何在dll和主程序中共享变量?
- 请问在我的dll中如何调用本进程内存中的某个地址00FF31的函数?
- vc++中制作dll的一个简单问题
- 每一个vc程序员都要讨论
- 我是初学者,遇到了问题请帮忙!
- 来讨论一下吧!用VC编写哪些程序优势很大?
- 小弟已用afxoleinit,可仍然不行(问题:在对话框中使用了一个listctrl组件,定义了一列,我想给该组件加一个背景图,用SetBkImage却无法实现,不知为何,请各位大侠指点迷经,或介绍其它实现方法,本人不胜感激!)
- 一个关于win32的问题
- CreateWindowEx 创建按钮 非常奇怪的一个问题哈,按下空格,按钮压下和弹起来的速度超慢
窗口,这怎么和listview联系起来的?老实说,真没看出来
HWND hWinMain,hList;
窗口,这怎么和listview联系起来的?老实说,真没看出来
==========
你可能看错了,他这个创建是主窗口。他是用
hList=CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEWA, NULL,
WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS,
0, 0, 0, 0, hWinMain, (HMENU)ID_LISTVIEW, g_hInst, NULL);来创建ListViewControl的。将第二个参数改成 WC_LISTVIEW试试
iex.dwSize=sizeof(iex);
iex.dwICC=ICC_LISTVIEW_CLASSES;
if(!InitCommonControlsEx(&iex))
{
char err[50]={0};
wsprintf(err,"Error Code=%d",GetLastError());
MessageBox(hWinMain,err,"2",MB_OK);}
这段初始化代码写在CreateWindowEx前面试试
To create a list-view control, use the CreateWindow or CreateWindowEx function and specify the WC_LISTVIEW window class. This window class is registered when the common controls DLL loads. To ensure that this DLL loads, use the InitCommonControls or InitCommonControlsEx function.