鱼C论坛

 找回密码
 立即注册
查看: 3099|回复: 4

学习无法突破,碰到问题无法解决,学的根本不够

[复制链接]
发表于 2013-2-7 02:17:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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啊?
  1. Cwgame::Cwgame(char *gclassname,char *gname)
  2. {
  3.         pByte = NULL;
  4.         GameHwnd = ::FindWindow(gclassname,gname);
  5.         ::GetWindowThreadProcessId(GameHwnd,&processid);
  6.         processH=::OpenProcess(PROCESS_ALL_ACCESS,false,processid);
  7. }
复制代码
我将类的实例化中封装窗口的查找和打开远程进程
  1. mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
  2.         mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
  3.         mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
复制代码
这是鼠标的物理模拟,将消息送入系统队列中,
  1. void Cwgame::QGetWindowRect(RECT rect)
  2. {
  3.         ::GetWindowRect(GameHwnd,&rect);
  4. }

  5. BYTE *Cwgame::ReadMemory(int pvAddressRemote,int dwSize)
  6. {
  7.         DWORD byread;
  8.         if (pByte != NULL)
  9.                 delete [] pByte;
  10.         pByte = new BYTE[dwSize];
  11.         LPCVOID pbase = (LPCVOID)pvAddressRemote;
  12.         ::ReadProcessMemory(processH,pbase,pByte,dwSize,&byread);
  13.         return pByte;
  14. }

  15. void Cwgame::HSendMessage(UINT Msg,WPARAM wParam,LPARAM lParam)
  16. {
  17.         ::SendMessage(GameHwnd,Msg,wParam,lParam);
  18. }

  19. void Cwgame::QMoveWindow(int x,int y, int width,int height)
  20. {
  21.         ::MoveWindow(GameHwnd,x,y,width,height,true);
  22. }


  23. void Cwgame::SetWindowTop()
  24. {
  25.         ::SetWindowPos(GameHwnd,HWND_TOP,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
  26. }

  27. void Cwgame::WriteMemory(int lpBaseAddress, BYTE *lpBuffer, int nSize)
  28. {
  29.         long byWriteSize;
  30.         ::WriteProcessMemory(processH,(LPVOID)(lpBaseAddress),(LPVOID)(lpBuffer),(DWORD)nSize,(LPDWORD)(&byWriteSize));
  31. }

  32. void Cwgame::SetWindowTOPMOST()
  33. {
  34.         ::SetWindowPos(GameHwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); //窗口置顶函数
  35. }


  36. void Cwgame::SetWindowNOTOPMOST()
  37. {
  38.         ::SetWindowPos(GameHwnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
  39. }


  40. void Cwgame::RemoteCall(int CallAddr)
  41. {
  42.         DWORD tid;
  43.         ::CreateRemoteThread(processH,NULL,0,(LPTHREAD_START_ROUTINE)CallAddr,NULL,0,&tid);
  44. }
复制代码
这是我部分的类成员,对api进行了修改,
变量的命名很乱,远程注入怎么写才好,我找不到call 的正确的位置,老是程序终止或是无反应?

很晚了,睡觉去了



小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-2-7 09:15:48 | 显示全部楼层
LZ会开车么?如果你对发动机引擎,汽车的各部分组件的原理都很清楚,并且开车的时候一直想着它们是如何相互配合让汽车启动的,那么你一定不可能把车开动或者一开动汽车马上就出车祸。我们人类的精力都是有限的,所以当我们解决一个实际问题的时候必须忽略很多对该问题来说无关紧要的细节,仅仅解决一两个重要的问题。那么哪些细节怎么办?这就需要会使用其他人提供的方便的工具(在编程上就是各种程序库),这些工具使我们可以不花什么气力研究工具的原理就可以使用该工具,其实任何的编程语言,本质上说不也都是解决问题的工具吗?另外,我不认为程序员等同于码农(虽然在外行眼里他们是一样的)码农是专门研究一种工具的,他们企图用一种工具来解决所有的问题;程序员是研究实际问题并寻找合适的工具解决问题的,他们企图用所有合适的工具来解决某个特殊的问题。所以编某些样板代码的时候码农一定比真正的程序员要快很多,但遇到大型问题,需要多种工具的时候,码农用多久都解决不了该问题。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-2-7 09:22:05 | 显示全部楼层
最后看楼主的标题,我觉得你不是学得不够,也不是学得不精,而是想得不够。学了半年左右就应该静下心想想自己主要掌握学的那些技术的优势,以及如何不花什么时间就使用自己不怎么熟悉的新技术。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-2-27 14:07:49 | 显示全部楼层
是啊,哥们,我也有同感。我也是从按键精灵,易语言,vb,c,汇编走过来的,现在一直搞windows api编程,不过感觉也很郁闷啊,一个分组框控件就让我弄了1天,才知道原来需要MFC。
很多以前用易能写出来的东西,学习了底层东西后,居然用c不能实现了。
还真是越学越倒退,不过我却不想放弃,毕竟自己选择编程,是因为喜欢,现在仍然是喜欢。
论坛回复太慢了,有活跃点的群吗,推荐个
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-2-27 14:53:15 | 显示全部楼层
晕了。我一直想学编程,以前也用按健与serash写脚本。但现在游戏都开始封了。才想静下心来学汇编。然后学点别的。以图混口饭吃。看了大哥的学习历程。有点为以后的生活当心了
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-8 13:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表