大家好,我今天第一次接触编程,刚才看了些教程哈,挺感兴趣,觉定从今天起开始学习DELPHI,呵呵现在有一个这样的问题,请高手帮我解决下.我现在有一个传奇私服登陆器(DELPHI无壳的,但我没有源码),想给他加一个功能,就是运行时和运行中发现进程中有指定的程序(如指定几种外挂)后就不运行和关闭游戏.怎么实现?我现在还不会编程,能不能用PE导入一个DLL资源实现这个功能呢?我现在还不懂,不知道问的有没有问题,如果有些地方说的不对,还请高手见谅哈!

解决方案 »

  1.   

    写注册表应该会吧?
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
    这个项下面建立一个以外挂名字(例如你不想a.exe运行的话就建立一个a.exe的项,然后在项里面建立一个值为空的字符串值)
    具体的百度上面有
    http://baike.baidu.com/view/1181867.htm
      

  2.   

    百度那篇文章的debugger章节(第三节)
      

  3.   

    最简单的两种方法
    1, FindWindowEx或2, CreateToolhelp32Snapshot, Process32First, Process32Next
      

  4.   

    我不懂,怎么做呀?
    我刚才百度上查了
    第1种,我不明白
    第2种,我查了一段代码,是不是把这段代码里的提到的程序名改成我需要的就行?如果可以,怎么把这些代码弄到登陆器里呢?我只知道登陆器是脱了壳的.但没有源码,可以用DELPHI对他编写吗?用CreateToolhelp32Snapshot/Process32First/Process32Next API枚举系统进程在很多情况下需要对系统的进程进行操作,方法有很多种但最常用的是CreateToolhelp32Snapshot/Process32First/Process32Next 一系列API使现结束进程使用TerminateProcess使现下面的函数可以使现对进程的枚举:int ProcessList(){       PROCESSENTRY32 pe32;       pe32.dwSize=sizeof(pe32);       int count=0;       HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);       if(hProcessSnap==INVALID_HANDLE_VALUE)       {              printf("CreateToolhelp32Snapshot调用失败!");              return -1;       }       BOOL bMore=::Process32First(hProcessSnap,&pe32);              printf("%20s\t%10s\n","进程名","PID");       printf("====================================\n");       while(bMore)       {              count++;              printf("%20s\t%10d\n",pe32.szExeFile,pe32.th32ProcessID);              bMore=::Process32Next(hProcessSnap,&pe32);       }       ::CloseHandle(hProcessSnap);       printf("====================================\n");       printf("\n当前系统进程数为:%d\n",count);       return 0;}结束进程可以使用下面的函数:(使现其中dwid为想要结束的进程ID可通过列进程的函数得到)int TerminateProcessFromId(DWORD dwId){       BOOL bRet=FALSE;       HANDLE hProcess=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwId);       if(hProcess!=NULL)       {              bRet=::TerminateProcess(hProcess,0);       }       ::CloseHandle(hProcess);       if(bRet)              printf("%d 进程结束成功......\n\n\n\n",dwId);       else              printf("%d 进程结束失败......\n\n\n\n",dwId);       return 0;} 
    这一段源码我也看不懂哈.
    我现在就是个白痴,不会写字一样,你跟我说先写一横,再写一竖就是个十字.我听了还是不懂,就是有点明白也不知道怎么入手,你得拿着我的手写一次,我才能知道怎么开始拿笔写字.
    拜托拜托,来个耐心的兄弟帮我这一回,弄成了我就入了编程的门了,谢谢谢谢哈
    我QQ号:3798868
      

  5.   

    看不懂,就建个工程调一下。
    光靠看就能看懂程序的,恐怕都是牛牛级的,脑子能当编译器用的那种。关于 FindWindowEx ,假设你登录器主窗口的 class 为 "TLoginClass", 标题为 "登录器"handle: THandle ;handle := FindWindow('TLoginClass', '登录器')
    if IsWindows(handle) then
      ShowMessage('发现登录器')
    else
      ShowMessage('没发现登录器');更复杂的类似函数是 FindWindowEx ,EnumWindows ,具体可以google或者看msdn,如果你e文还凑合的话