乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      delphi HooK 指定程序窗體和控件的 WndProc

       quasiceo 2013-11-30

      delphi HooK 指定程序窗體和控件的 WndProc

      作者:admin 來源: 日期:2011/8/16 9:35:18 人氣:555 標(biāo)簽:

      搞點(diǎn)界面XX

      只是做不好的話會(huì)引起explorer和其他程序崩潰

      首先我們的思路肯定這樣的啦!

      1 下鉤

      2 當(dāng)一個(gè)程序運(yùn)行后鉤子被注入,入口肯定是要先判斷 是否是我們要HOOK的程序的進(jìn)程

      3判斷是了就保存原來的WndProc的地址然后 SetWindowLong 把窗體的 WndProc 或 控件的 WndProc 轉(zhuǎn)向我們新的 WndProc



      然后呢,發(fā)現(xiàn)什么問題,鉤子入口函數(shù)執(zhí)行啦,但是 SetWindowLong 就是不成功。。。(SetWindowLong 頭參是窗體或控件句柄)

      調(diào)了下,發(fā)現(xiàn)原來 SetWindowLong 函數(shù)沒有被執(zhí)行,納悶中 ,以為入口函數(shù)沒有被執(zhí)行 ,后來放個(gè)消息發(fā)現(xiàn) 入口函數(shù)被執(zhí)行,但是

      SetWindowLong 沒有被執(zhí)行........

      原來當(dāng)鉤子入口函數(shù)執(zhí)行的時(shí)候 鉤子所在進(jìn)程是有啦 ,但是進(jìn)程的窗體還沒出來,獲取不到窗體句柄和控件句柄.

      后來把 SetWindowLong 嘗試放在其他位置 , 發(fā)現(xiàn)掛鉤總是過濾不到消息不然就是引起其他程序崩潰..........

      下樓完吃飯 , 找到突破口 , 嘗試了下 , 好啦.

      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------

      鉤任務(wù)管理器的 WndProc 為例子...............

      HOOK控件WndProc的話,需要先枚舉出你要搞的那個(gè)的句柄,然后就不用說了吧,枚舉自己來,我這里不搞了.

      ibrary zhusjm;

      uses
      Windows, Messages, SysUtils, Dialogs, psapi;

      var
      OldHook: HHOOK;
      OldProc:FARPROC;
      CriticalSection: TRTLCriticalSection;

      Function WndProc(Hwnd,Msg,wParam,lParam:longint):LRESULT; stdcall;
      begin
      case Msg of
      //WM_PAINT: 這東西好啊 = = ,搞點(diǎn)什么好事都不錯(cuò)丫,嘻嘻嘻
      WM_MOUSEMOVE:
      begin
      showmessage('s');
      end;
      end;
      Result:=CallWindowProc(OldProc,Hwnd,Msg,wParam,lParam);
      end;


      procedure HookProc(nCode, wParam, lParam: LongWORD);stdcall;
      var
      Winh:HWND;
      begin
      CallNextHookEx(OldHook, nCode, wParam, lParam);
      end;


      function SetHook:Boolean;stdcall;
      begin
      OldHook:=SetWindowsHookEx(WH_GETMESSAGE,@HookProc, Hinstance,0);
      if (OldHook=0) then
      begin
      exit
      end
      else
      Result:=True;
      end;


      procedure UnHook; stdcall;
      begin
      UnhookWindowsHookEx(OldHook);
      end;


      function IdToExeDir(dwProcessId : DWORD): String;
      var
      cbNeeded : DWORD;
      hProcess : THandle;
      hModules : HMODULE;
      lpFilename : array [0..1024-1] of Char;
      begin
      result:='';
      hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,false,dwProcessId);
      if hProcess=0 then exit;
      EnumProcessModules(hProcess,@hModules,sizeof(hModule),cbNeeded);
      GetModuleFileNameEx(hProcess,hModules,lpFilename,1024);
      result:=lpFilename;
      CloseHandle(hProcess);
      end;


      procedure SetWndProc;
      var
      WinStr:HWND;
      begin
      EnterCriticalSection(CriticalSection);
      Sleep(2000); //等兩秒,嘿嘿 這回窗口出來了吧~
      WinStr:=FindWindow(nil,'Windows 任務(wù)管理器');
      OldProc:=FARPROC(GetWindowLong(WinStr,GWL_WNDPROC));
      if WinStr<>0 then
      begin
      SetWindowLong(WinStr,GWL_WNDPROC,Longint(@WndProc));
      end;
      LeaveCriticalSection(CriticalSection);
      ExitThread(4);
      end;


      procedure FindWindows;
      var
      WinStr:HWND;
      ThreadId1:DWORD;
      begin
      if pos('taskmgr',IdToExeDir(GetCurrentProcessID))>0 then
      begin
      if CriticalSection.RecursionCount<>0 then
      DeleteCriticalSection(CriticalSection);
      InitializeCriticalSection(CriticalSection);
      CreateThread(nil,0,@SetWndProc,nil,0,ThreadId1); //雖然這時(shí)候窗口沒出來find不到句柄,那我們不懂來個(gè)線程啊,嘻嘻嘻嘻
      end;
      end;


      procedure DllMain(Reason: Integer);
      begin
      case Reason of
      DLL_PROCESS_ATTACH:
      begin
      FindWindows;
      end;
      DLL_PROCESS_DETACH:
      begin

      end;
      end;
      end;

      exports
      SetHook,
      UnHook;

      begin
      DLLProc:=@DllMain;
      DllMain(DLL_PROCESS_ATTACH);
      end.

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多