首页
社区
课程
招聘
[求助]dll中创建win32的窗口,不是mfc的窗口,求助
发表于: 2016-6-5 09:23 6062

[求助]dll中创建win32的窗口,不是mfc的窗口,求助

2016-6-5 09:23
6062
#include <stdio.h>

#include <Windows.h>

int (*pFun)();
int H_WORK = 0;
int WorkAddress = 0;
DWORD dwThreadId;
int SetWindowLong返回 = 0, 消息值 = 0;
int StartWorkThread();
int(*函数指针)();
int 处理函数(HWND hwd, int msg, int wp, int lp);
HWND GetMainWindow();
DWORD WINAPI F_Work(_In_ LPVOID lpParameter);
#define 发送_游戏进程消息_运行标志_关闭 (WM_USER+0)
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);
int WINAPI
DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved) {
        switch (fdwReason) {
        case DLL_PROCESS_ATTACH: {
                                函数指针 = 处理函数;
                                消息值 = RegisterWindowMessage("sb");
                                SetWindowLong返回 = SetWindowLong(GetMainWindow(), GWL_WNDPROC, (LONG)(*函数指针));
                               

                                       
                                        pFun = StartWorkThread;
                                        WorkAddress = (int)(*pFun);
                                        _asm
                                        {
                                                call WorkAddress;
                                        }
        }
                                                         break;

        case DLL_PROCESS_DETACH: {
                SetWindowLong(GetMainWindow(), GWL_WNDPROC, SetWindowLong返回);
                MessageBox(NULL, TEXT("DLL已从目标进程卸载"), TEXT("信息"), MB_ICONINFORMATION);
        }
                                                         break;
        }
        return 1;
}

int StartWorkThread()
{
        H_WORK = 0;
        if (H_WORK == 0)
        {
               
                H_WORK = (int)CreateThread(NULL,0,F_Work,NULL,0,&dwThreadId);
                return 1;
        }
        else
        {
                TerminateThread((HANDLE)H_WORK,0);
                H_WORK = 0;
                return 0;
        }
}
DWORD WINAPI F_Work(_In_ LPVOID lpParameter)
{
       
        SendMessage(GetMainWindow(), 发送_游戏进程消息_运行标志_关闭,0,0);
}
int 处理函数(HWND hwd, int msg, int wp, int lp)
{
        int 进程句柄 = 0;
        if (msg == 发送_游戏进程消息_运行标志_关闭)
        {
                MessageBox(NULL, TEXT("DLL已进入目标进程"), TEXT("信息"), MB_ICONINFORMATION);
        }

        return(CallWindowProc((WNDPROC)SetWindowLong返回, hwd, msg, wp, lp));

}
HWND GetMainWindow()
{
        DWORD dwCurrentProcessId = GetCurrentProcessId();
        if (!EnumWindows(EnumWindowsProc, (LPARAM)&dwCurrentProcessId))
        {
                return (HWND)dwCurrentProcessId;
        }
        return NULL;
}
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
        DWORD dwCurProcessId = *((DWORD*)lParam);
        DWORD dwProcessId = 0;

        GetWindowThreadProcessId(hwnd, &dwProcessId);
        if (dwProcessId == dwCurProcessId && GetParent(hwnd) == NULL)
        {
                *((HWND *)lParam) = hwnd;
                return FALSE;
        }
        return TRUE;
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 35
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
目前 注入跟卸载 都不会崩溃,也会正确提示卸载或注入,只是dll中的窗口过程,我不知道得写在哪里好
大牛求解答阿,我就只想要win32一窗口而已,求代码
2016-6-5 09:25
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
写在新线程里
2016-6-5 10:05
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
还要写消息循环
2016-6-5 11:33
0
雪    币: 35
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
是阿  这个窗口过程不知写在哪
2016-6-5 11:49
0
雪    币: 166
活跃值: (392)
能力值: ( LV13,RANK:357 )
在线值:
发帖
回帖
粉丝
6
在新线程里实现 消息循环,注册窗体,创建窗体,显示窗体...  你说的窗口过程(单击之类的)都得自己处理相应的消息
2016-6-5 21:35
0
游客
登录 | 注册 方可回帖
返回
//