奇怪的有关问题,折腾好久了。没有Messagebox就不显示按钮
奇怪的问题,折腾好久了。没有Messagebox就不显示按钮?
以上是Dllmain的代码
问题出现
毫无效果
但是加入了MessageBox
却有效果了!
这是怎么回事。。
应该如何修改?
------解决方案--------------------
我估计是线程结束了造成的,你在线程里加一个消息循环试试看。
- C/C++ code
// dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "windows.h" #include "stdafx.h" #define _T TEXT HWND 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;
却有效果了!
这是怎么回事。。
应该如何修改?
------解决方案--------------------
我估计是线程结束了造成的,你在线程里加一个消息循环试试看。