|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 消失在黑暗中 于 2013-2-7 02:19 编辑
学技术想用出去,能赚到钱,是大家学编程的目的吧。穷开心的学技术是很可悲的。
我学编程中,想过做游戏,做WG。现在看来,难度很大!
买过一本书,叫《游戏开发设计基础教程》。买的时候看不懂,我想我以后能看的懂,所以买了,然后开始学c++,学完c++的基础,于是能看懂上面的类了,可是又看不懂api,不精通算法,看不懂逻辑,不明白图像处理技术。
于是我上网找了本《window api 参考大全》,这本书附带源码。一个个试api,以前学过按键精灵的编程,很顺利的学完了窗口的api函数,并能大概知道有哪些重要的窗口api。
看到DC设备上下文api就懵了,dc到底是什么玩意?于是上网查找,找到的答案是:GDI的数据结构。我这个人比较有好奇心,于是查各种资料,都没有满意的答案,我到现在都搞不清楚,dc到底是什么玩意!看过一本书《window 程序设计》第五版,书中作者这么写道:要说完GDI,需要整整一本书。现在,我对dc的认识只在其对象的使用上,这是我很遗憾的地方,求好心人解答。
位图和图标的api也很难理解,不过都试过其api 的调用。试过显示位图,位图位运算,可惜没试过怎么镂空图片,原理简单,可是一直都没去试,我比较懒。懒得放弃了跨出制作二维游戏的第一步,想想后面的位图处理和游戏逻辑,我就打退堂鼓。
其他的api没有上面的gdi函数这么难,我没试完所有的api。
很感谢小甲鱼的汇编基础视频,我看完了,每次重新看,都有新的理解。但是我学了也没什么用,当初学汇编是为了让人觉得会搞汇编就很牛逼。
想过做WG,做WG的渴望来自当初大学时代与同学一起玩游戏。玩的很累,于是想做WG,接触到了按键精灵。记得按键精灵中有一段代码是执行渐开线找图,当时被其功能惊叹,认为能写按键精灵的人就很牛逼,会编程的人很牛逼。后来有个名词的出现,使我不在对编程高看了-码农。编程不是我想象轻松的工作。
模拟按键鼠标都很简单,找图的功能很难实现。从网上都找不到找图相关的代码,谁有的,给我一份,很遗憾的地方。最初的想法是对比点,可效率很慢。想的第二种办法是:先将游戏的dc位图用bitblt复制到内存dc上,然后再找点,相比快一点,但是效率还是慢,有什么高效的办法?一直过不去的地方
很牛逼的技术找call,于是我也想学。找啊找,找到个郁金香老师的视频,不全,就几个,看不清。人家是收费的!
今年是没希望学完od了,win32汇编中的retn就让我头疼,我想说的是,win32汇编与16汇编不同,难道又要万里长征,继续学习win32,?只能继续学啦,一路走到黑
青春不再,时间不多!更何况我是半路出家。做IT的想法是从学生时代开始的,可起步在半年前,我不是在说自己有多能学,其实我写不出像样的东西,学的不精,反而占用业余时间,却无法给我的生活带来光彩!
最近想用c++写个WG的类,可是怎么找call啊?- Cwgame::Cwgame(char *gclassname,char *gname)
- {
- pByte = NULL;
- GameHwnd = ::FindWindow(gclassname,gname);
- ::GetWindowThreadProcessId(GameHwnd,&processid);
- processH=::OpenProcess(PROCESS_ALL_ACCESS,false,processid);
- }
复制代码 我将类的实例化中封装窗口的查找和打开远程进程- mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
- mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
- mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
复制代码 这是鼠标的物理模拟,将消息送入系统队列中,- void Cwgame::QGetWindowRect(RECT rect)
- {
- ::GetWindowRect(GameHwnd,&rect);
- }
- BYTE *Cwgame::ReadMemory(int pvAddressRemote,int dwSize)
- {
- DWORD byread;
- if (pByte != NULL)
- delete [] pByte;
- pByte = new BYTE[dwSize];
- LPCVOID pbase = (LPCVOID)pvAddressRemote;
- ::ReadProcessMemory(processH,pbase,pByte,dwSize,&byread);
- return pByte;
- }
- void Cwgame::HSendMessage(UINT Msg,WPARAM wParam,LPARAM lParam)
- {
- ::SendMessage(GameHwnd,Msg,wParam,lParam);
- }
- void Cwgame::QMoveWindow(int x,int y, int width,int height)
- {
- ::MoveWindow(GameHwnd,x,y,width,height,true);
- }
- void Cwgame::SetWindowTop()
- {
- ::SetWindowPos(GameHwnd,HWND_TOP,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
- }
- void Cwgame::WriteMemory(int lpBaseAddress, BYTE *lpBuffer, int nSize)
- {
- long byWriteSize;
- ::WriteProcessMemory(processH,(LPVOID)(lpBaseAddress),(LPVOID)(lpBuffer),(DWORD)nSize,(LPDWORD)(&byWriteSize));
- }
- void Cwgame::SetWindowTOPMOST()
- {
- ::SetWindowPos(GameHwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); //窗口置顶函数
- }
- void Cwgame::SetWindowNOTOPMOST()
- {
- ::SetWindowPos(GameHwnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
- }
- void Cwgame::RemoteCall(int CallAddr)
- {
- DWORD tid;
- ::CreateRemoteThread(processH,NULL,0,(LPTHREAD_START_ROUTINE)CallAddr,NULL,0,&tid);
- }
复制代码 这是我部分的类成员,对api进行了修改,
变量的命名很乱,远程注入怎么写才好,我找不到call 的正确的位置,老是程序终止或是无反应?
很晚了,睡觉去了
|
|