能不能帮我把下面的代码生成DLL文件,我在VB里引用啊谢谢!!!!

zqonline 2004-01-31 04:26:23
Re: 奇迹窗口源代码

我的用的工具是c++builder,下面是dll文件的源代码,相信会编程的都能看懂,大家自己写个执行文件将钩子安装进去就行,最简单的方法就是放一个Timer,然后用GetAsyncKeyState函数设定一个热键,在回调函数中
将钩子安装进去。
然后运行游戏,在游戏中呼叫热键就可以了。
当然,这里面还有很多问题我还没有考虑,毕竟我很菜,多多谅解!


//---------------------------------------------------------------------------#include <vcl.h>#include <windows.h>#pragma hdrstop#pragma argsused//---------------------------------------------------------------------------//三个输出函数 extern "C" { __declspec(dllexport) __stdcall void ShowForm(void); __declspec(dllexport) __stdcall bool SetHook(HWND hwindow); __declspec(dllexport) __stdcall bool RemoveHook(void); }HWND hwndmu;HHOOK hhook;HINSTANCE hinstance;bool bs=false;FARPROC oldproc;LRESULT CALLBACK HookProc(int ,WPARAM ,LPARAM);LRESULT CALLBACK WINPROC(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam); bool __stdcall winmu(void);//--------------------------------------------------------------------------int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved){hinstance=hinst ; return 1;}//---------------------------------------------------------------------------//安装WH_GETMESSAGE钩子到指定的线程中bool __stdcall SetHook(HWND hwindow){DWORD thid;if(hhook==NULL)//获取前端窗口句炳,当然也可以用FindWindow(NULL,"MU")来替代thid=GetWindowThreadProcessId(hwindow,NULL);hhook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)HookProc,hinstance,thid);if(hhook==NULL){ShowMessage("Set Hook fails");return false;}return true;}//---------------------------------------------------------//卸载钩子bool __stdcall RemoveHook(void){ if(hhook==NULL) { ShowMessage("Hook Removed"); return false; } UnhookWindowsHookEx(hhook); return true;}//-------------------------------------------------------//钩子回调函数LRESULT CALLBACK HookProc(int ncode,WPARAM wparam,LPARAM lparam){ if(ncode<0) return CallNextHookEx(hhook,ncode,wparam,lparam);//用一个bool变量让我们的winmu()只调用一次 if (!bs) winmu(); bs=true; return CallNextHookEx(hhook,ncode,wparam,lparam); } //-------------------------------------------------------bool __stdcall winmu(void) { long style; long exstyle; TDeviceMode devmode; hwndmu=GetForegroundWindow(); if(EnumDisplaySettings(0, 0, &devmode)) { devmode.dmPelsWidth=1024; devmode.dmPelsHeight=768; devmode.dmBitsPerPel=32; devmode.dmDisplayFrequency=75; ChangeDisplaySettings(&devmode,0); }//修改窗体的style属性style= GetWindowLong(hwndmu,GWL_STYLE);style=style | WS_CAPTION ;SetWindowLong(hwndmu,GWL_STYLE,style);//修改窗体的exstyle属性exstyle=GetWindowLong(hwndmu,GWL_EXSTYLE);exstyle=exstyle | WS_EX_APPWINDOW | WS_EX_WINDOWEDGE ;SetWindowLong(hwndmu,GWL_EXSTYLE,exstyle);//设置窗体的位置,取消其最前端显示,为图简单807,632是我自己随便设的//当然最好是先用AdjustWindowRect函数调整一下大小SetWindowPos(hwndmu,HWND_NOTOPMOST,0,0,807,632,SWP_SHOWWINDOW);ShowWindow(hwndmu,SW_SHOWNORMAL);//修改窗体的回调函数地址到我们自己定义的回调函数oldproc=(FARPROC)GetWindowLong(hwndmu,GWL_WNDPROC);if(SetWindowLong(hwndmu,GWL_WNDPROC,(long)WINPROC)==0)return false;return true;}//---------------------------------------------------------//自己定义的回调函数LRESULT CALLBACK WINPROC(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam){//消息过滤 switch (umsg) { case WM_ACTIVATEAPP: case WM_ACTIVATE: case WM_KILLFOCUS: case WM_SETFOCUS: case WM_CLOSE: return 0;//这里是个关键,把这个计时器kill case WM_TIMER: if(wparam==0x3e9) KillTimer(hwnd,wparam); break; } return CallWindowProc(oldproc,hwnd,umsg,wparam,lparam); }//---------------------------------------------------------
网址:



http://www.gameres.com/bbs/showthread.asp?threadid=3741
...全文
40 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yunuo2010000 2004-01-31
  • 打赏
  • 举报
回复
学习
ustc_tweeg 2004-01-31
  • 打赏
  • 举报
回复
用快接方式-w的方法窗口化不行吗?
zqonline 2004-01-31
  • 打赏
  • 举报
回复
是的啊!
只是学习用!
ustc_tweeg 2004-01-31
  • 打赏
  • 举报
回复
这个外挂用来窗口化的吗?
bullHEcow 2004-01-31
  • 打赏
  • 举报
回复
up

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧