|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
思路来源:首先MFC可以创建一个dll文件,可以在里面创建一个界面,在dll注入到一个程序的时候可以弹出来一个窗口。
提出想法:我想这qt能不能做到同样的事情?
实现方式:代码如下,简单来说就是在dllmain里面调用CreateThread创建新线程,然后再新线程里实现QApplication 消息循环,选CreateThread是因为这个函数即使主线程结束了,子线程也不会结束,而且qthread和cpp提供的线程使用的类似java或者py的setdeamon或者wait这种函数会卡死线程。
遇到问题:使用dll注入工具注入到同样是qt写的界面程序中,界面是弹出来了,拖动界面没问题,但不能碰上面的按钮,一碰一会就卡死了。百思不得其解,求大大指点一下,万分感激。我寻思再被注入程序的进程里有俩线程,应该互相不会影响,也不知道哪里出了问题。
#include<QApplication>
#include<QPushButton>
#include <windows.h>
#include<ui_test.h>
DWORD WINAPI shadow_window(LPVOID lp)
{
char** argv=NULL;
int argc=0;
QApplication app(argc,argv);
QWidget w;
QPushButton btn(&w);
btn.setText("aaa");
w.show();
return app.exec();
}
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD callreason, LPVOID lp)
{
if(callreason==DLL_PROCESS_ATTACH)
{
MessageBoxA(NULL,"sxaa","bbb",MB_OK);
CreateThread(NULL,0,LPTHREAD_START_ROUTINE(shadow_window),0,0,NULL);
}
return TRUE;
}
|
|