奇怪的问题,折腾好久了。没有Messagebox就不显示按钮?
- C/C++ code
// dllmain.cpp : 定义 DLL 应用程序的入口点。#include "windows.h"#include "stdafx.h"#define _T TEXTHWND hwnd;HINSTANCE hIns;HWND hwndButton = NULL;HANDLE hThread;HWND hwndDLG;DWORD WINAPI FunProc(LPVOID lparamater){ hwnd = FindWindow(NULL,_T("Warcraft III")); hIns = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); hwndButton= CreateWindow(_T("Button"), _T("btn"), WS_VISIBLE|WS_CHILD, 5, 5, 80, 20,hwnd, NULL, GetModuleHandle(0), NULL); if(hwndButton == NULL) { MessageBox(hwnd,_T("shibai"),_T("shibai"),MB_OK); } ShowWindow(hwndButton,SW_RESTORE); return 0;}BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { hThread = CreateThread(NULL,0,FunProc,NULL,0,NULL); } case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: WaitForSingleObject(hThread,0); } return TRUE;}
以上是Dllmain的代码
问题出现
- C/C++ code
DWORD WINAPI FunProc(LPVOID lparamater){ hwnd = FindWindow(NULL,_T("Warcraft III")); hIns = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); hwndButton= CreateWindow(_T("Button"), _T("btn"), WS_VISIBLE|WS_CHILD, 5, 5, 80, 20,hwnd, NULL, GetModuleHandle(0), NULL); if(hwndButton == NULL) { MessageBox(hwnd,_T("shibai"),_T("shibai"),MB_OK); } ShowWindow(hwndButton,SW_RESTORE); //不增加MessageBox(hwnd,_T("shibai"),_T("shibai"),MB_OK); return 0;}
毫无效果
但是加入了MessageBox
- C/C++ code
hwnd = FindWindow(NULL,_T("Warcraft III")); hIns = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); hwndButton= CreateWindow(_T("Button"), _T("btn"), WS_VISIBLE|WS_CHILD, 5, 5, 80, 20,hwnd, NULL, GetModuleHandle(0), NULL); if(hwndButton == NULL) { MessageBox(hwnd,_T("shibai"),_T("shibai"),MB_OK); } ShowWindow(hwndButton,SW_RESTORE); MessageBox(hwnd,_T("shibai"),_T("shibai"),MB_OK);//增加了 return 0;
却有效果了!
这是怎么回事。。
应该如何修改?
[解决办法]
我估计是线程结束了造成的,你在线程里加一个消息循环试试看。