Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
HOOK APIÈëÃÅÆª
 
×÷Õߣºa199228 À´×ÔÓÚ£ºCSDN ·¢²¼ÓÚ 2015-10-26
  2235  次浏览      27
 

WindowsϵͳÊǽ¨Á¢ÔÚʼþÇý¶¯µÄ»úÖÆÉϵģ¬Ëµ´©Á˾ÍÊÇÕû¸öϵͳ¶¼ÊÇͨ¹ýÏûÏ¢µÄ´«µÝÀ´ÊµÏֵġ£¶ø¹³×ÓÊÇWindowsϵͳÖзdz£ÖØÒªµÄϵͳ½Ó¿Ú£¬ÓÃËü¿ÉÒԽػñ²¢´¦ÀíË͸øÆäËûÓ¦ÓóÌÐòµÄÏûÏ¢£¬À´Íê³ÉÆÕͨӦÓóÌÐòÄÑÒÔʵÏֵŦÄÜ¡£¹³×Ó¿ÉÒÔ¼àÊÓϵͳ»ò½ø³ÌÖеĸ÷ÖÖʼþÏûÏ¢£¬½Ø»ñ·¢ÍùÄ¿±ê´°¿ÚµÄÏûÏ¢²¢½øÐд¦Àí¡£ÕâÑù£¬ÎÒÃǾͿÉÒÔÔÚϵͳÖа²×°×Ô¶¨ÒåµÄ¹³×Ó£¬¼àÊÓϵͳÖÐÌØ¶¨Ê¼þµÄ·¢Éú£¬Íê³ÉÌØ¶¨µÄ¹¦ÄÜ£¬±ÈÈç½Ø»ñ¼üÅÌ¡¢Êó±êµÄÊäÈ룬ÆÁĻȡ´Ê£¬ÈÕÖ¾¼àÊӵȵȡ£¿É¼û£¬ÀûÓù³×Ó¿ÉÒÔʵÏÖÐí¶àÌØÊâ¶øÓÐÓõŦÄÜ¡£Òò´Ë£¬¶ÔÓڸ߼¶±à³ÌÈËÔ±À´Ëµ£¬ÕÆÎÕ¹³×ӵıà³Ì·½·¨ÊǺÜÓбØÒªµÄ¡£

¹³×ÓµÄÀàÐÍ

Ò»£® °´Ê¼þ·ÖÀ࣬ÓÐÈçϵļ¸ÖÖ³£ÓÃÀàÐÍ

£¨1£© ¼üÅ̹³×Ӻ͵ͼ¶¼üÅ̹³×Ó¿ÉÒÔ¼àÊÓ¸÷ÖÖ¼üÅÌÏûÏ¢¡£

£¨2£© Êó±ê¹³×Ӻ͵ͼ¶Êó±ê¹³×Ó¿ÉÒÔ¼àÊÓ¸÷ÖÖÊó±êÏûÏ¢¡£

£¨3£© Íâ¿Ç¹³×Ó¿ÉÒÔ¼àÊÓ¸÷ÖÖShellʼþÏûÏ¢¡£±ÈÈçÆô¶¯ºÍ¹Ø±ÕÓ¦ÓóÌÐò¡£

£¨4£© ÈÕÖ¾¹³×Ó¿ÉÒԼǼ´ÓϵͳÏûÏ¢¶ÓÁÐÖÐÈ¡³öµÄ¸÷ÖÖʼþÏûÏ¢¡£

£¨5£© ´°¿Ú¹ý³Ì¹³×Ó¼àÊÓËùÓдÓϵͳÏûÏ¢¶ÓÁз¢ÍùÄ¿±ê´°¿ÚµÄÏûÏ¢¡£

´ËÍ⣬»¹ÓÐÒ»Ð©ÌØ¶¨Ê¼þµÄ¹³×ÓÌṩ¸øÎÒÃÇʹÓ㬲»Ò»Ò»Áо١£

ÏÂÃæÃèÊö³£ÓõÄHookÀàÐÍ£º

1¡¢WH_CALLWNDPROCºÍWH_CALLWNDPROCRET Hooks

WH_CALLWNDPROCºÍWH_CALLWNDPROCRET HooksʹÄã¿ÉÒÔ¼àÊÓ·¢Ë͵½´°¿Ú¹ý³ÌµÄÏûÏ¢¡£ÏµÍ³ÔÚÏûÏ¢·¢Ë͵½½ÓÊÕ´°¿Ú¹ý³Ì֮ǰµ÷ÓÃWH_CALLWNDPROC Hook×ӳ̣¬²¢ÇÒÔÚ´°¿Ú¹ý³Ì´¦ÀíÍêÏûÏ¢Ö®ºóµ÷ÓÃWH_CALLWNDPRO

CRET Hook×ӳ̡£WH_CALLWNDPROCRET Hook´«µÝÖ¸Õëµ½CWPRETSTRUCT½á¹¹£¬ÔÙ´«µÝµ½Hook×ӳ̡£CWPRETSTRUCT½á¹¹°üº¬ÁËÀ´×Ô´¦ÀíÏûÏ¢µÄ´°¿Ú¹ý³ÌµÄ·µ»ØÖµ£¬Í¬ÑùÒ²°üÀ¨ÁËÓëÕâ¸öÏûÏ¢¹ØÁªµÄÏûÏ¢²ÎÊý¡£

2¡¢WH_CBT Hook

ÔÚÒÔÏÂʼþ֮ǰ£¬ÏµÍ³¶¼»áµ÷ÓÃWH_CBT Hook×ӳ̣¬ÕâЩʼþ°üÀ¨£º

1. ¼¤»î£¬½¨Á¢£¬Ïú»Ù£¬×îС»¯£¬×î´ó»¯£¬Òƶ¯£¬¸Ä±ä³ß´çµÈ´°¿Úʼþ£»

2. Íê³ÉϵͳָÁ

3. À´×ÔϵͳÏûÏ¢¶ÓÁÐÖеÄÒÆ¶¯Êó±ê£¬¼üÅÌʼþ£»

4. ÉèÖÃÊäÈë½¹µãʼþ£»

5. ͬ²½ÏµÍ³ÏûÏ¢¶ÓÁÐʼþ¡£

Hook×ӳ̵ķµ»ØÖµÈ·¶¨ÏµÍ³ÊÇ·ñÔÊÐí»òÕß·ÀÖ¹ÕâЩ²Ù×÷ÖеÄÒ»¸ö¡£

3¡¢WH_DEBUG Hook

ÔÚϵͳµ÷ÓÃϵͳÖÐÓëÆäËûHook¹ØÁªµÄHook×Ó³Ì֮ǰ£¬ÏµÍ³»áµ÷ÓÃWH_DEBUG Hook×ӳ̡£Äã¿ÉÒÔʹÓÃÕâ¸öHookÀ´¾ö¶¨ÊÇ·ñÔÊÐíϵͳµ÷ÓÃÓëÆäËûHook¹ØÁªµÄHook×ӳ̡£

4¡¢WH_FOREGROUNDIDLE Hook

µ±Ó¦ÓóÌÐòµÄǰ̨Ï̴߳¦ÓÚ¿ÕÏÐ״̬ʱ£¬¿ÉÒÔʹÓÃWH_FOREGROUNDIDLE HookÖ´ÐеÍÓÅÏȼ¶µÄÈÎÎñ¡£µ±Ó¦ÓóÌÐòµÄǰ̨Ï̴߳ó¸ÅÒª±ä³É¿ÕÏÐ״̬ʱ£¬ÏµÍ³¾Í»áµ÷ÓÃWH_FOREGROUNDIDLE Hook×ӳ̡£

5¡¢WH_GETMESSAGE Hook

Ó¦ÓóÌÐòʹÓÃWH_GETMESSAGE HookÀ´¼àÊÓ´ÓGetMessage or PeekMessageº¯Êý·µ»ØµÄÏûÏ¢¡£Äã¿ÉÒÔʹÓÃWH_GETMESSAGE HookÈ¥¼àÊÓÊó±êºÍ¼üÅÌÊäÈ룬ÒÔ¼°ÆäËû·¢Ë͵½ÏûÏ¢¶ÓÁÐÖеÄÏûÏ¢¡£

6¡¢WH_JOURNALPLAYBACK Hook

WH_JOURNALPLAYBACK HookʹӦÓóÌÐò¿ÉÒÔ²åÈëÏûÏ¢µ½ÏµÍ³ÏûÏ¢¶ÓÁС£¿ÉÒÔʹÓÃÕâ¸öHook»Ø·Åͨ¹ýʹÓÃWH_JOURNALRECORD Hook¼Ç¼ÏÂÀ´µÄÁ¬ÐøµÄÊó±êºÍ¼üÅÌʼþ¡£Ö»ÒªWH_JOURNALPLAYBACK HookÒѾ­°²×°£¬Õý³£µÄÊó±êºÍ¼üÅÌʼþ¾ÍÊÇÎÞЧµÄ¡£WH_JOURNALPLAYBACK HookÊÇÈ«¾ÖHook£¬Ëü²»ÄÜÏóÏß³ÌÌØ¶¨HookÒ»ÑùʹÓá£WH_JOURNALPLAYBACK Hook·µ»Ø³¬Ê±Öµ£¬Õâ¸öÖµ¸æËßϵͳÔÚ´¦ÀíÀ´×ԻطÅHookµ±Ç°ÏûϢ֮ǰÐèÒªµÈ´ý¶à³¤Ê±¼ä£¨ºÁÃ룩¡£Õâ¾ÍʹHook¿ÉÒÔ¿ØÖÆÊµÊ±Ê¼þµÄ»Ø·Å¡£WH_JOURNALPLAYBACKÊÇsystem-wide local hooks£¬Ëü‚ƒ²»•þ±»×¢Éäµ½ÈκÎÐгÌλַ¿Õég¡££¨¹À¼Æ°´¼ü¾«ÁéÊÇÓÃÕâ¸öhook×öµÄ£©

7¡¢WH_JOURNALRECORD Hook

WH_JOURNALRECORD HookÓÃÀ´¼àÊӺͼǼÊäÈëʼþ¡£µäÐ͵ģ¬¿ÉÒÔʹÓÃÕâ¸öHook¼Ç¼Á¬ÐøµÄÊó±êºÍ¼üÅÌʼþ£¬È»ºóͨ¹ýʹÓÃWH_JOURNALPLAYBACK HookÀ´»Ø·Å¡£WH_JOURNALRECORD HookÊÇÈ«¾ÖHook£¬Ëü²»ÄÜÏóÏß³ÌÌØ¶¨HookÒ»ÑùʹÓá£WH_JOURNALRECORDÊÇsystem-wide local hooks£¬Ëü‚ƒ²»•þ±»×¢Éäµ½ÈκÎÐгÌλַ¿Õég¡£

8¡¢WH_KEYBOARD Hook

ÔÚÓ¦ÓóÌÐòÖУ¬WH_KEYBOARD HookÓÃÀ´¼àÊÓWM_KEYDOWN and WM_KEYUPÏûÏ¢£¬ÕâЩÏûϢͨ¹ýGetMessage or PeekMessage function·µ»Ø¡£¿ÉÒÔʹÓÃÕâ¸öHookÀ´¼àÊÓÊäÈëµ½ÏûÏ¢¶ÓÁÐÖеļüÅÌÏûÏ¢¡£

9¡¢WH_KEYBOARD_LL Hook

WH_KEYBOARD_LL Hook¼àÊÓÊäÈëµ½Ïß³ÌÏûÏ¢¶ÓÁÐÖеļüÅÌÏûÏ¢¡£

10¡¢WH_MOUSE Hook

WH_MOUSE Hook¼àÊÓ´ÓGetMessage »òÕß PeekMessage º¯Êý·µ»ØµÄÊó±êÏûÏ¢¡£Ê¹ÓÃÕâ¸öHook¼àÊÓÊäÈëµ½ÏûÏ¢¶ÓÁÐÖеÄÊó±êÏûÏ¢¡£

11¡¢WH_MOUSE_LL Hook

WH_MOUSE_LL Hook¼àÊÓÊäÈëµ½Ïß³ÌÏûÏ¢¶ÓÁÐÖеÄÊó±êÏûÏ¢¡£

12¡¢WH_MSGFILTER ºÍ WH_SYSMSGFILTER Hooks

WH_MSGFILTER ºÍ WH_SYSMSGFILTER HooksʹÎÒÃÇ¿ÉÒÔ¼àÊӲ˵¥£¬¹ö¶¯Ìõ£¬ÏûÏ¢¿ò£¬¶Ô»°¿òÏûÏ¢²¢ÇÒ·¢ÏÖÓû§Ê¹ÓÃALT+TAB or ALT+ESC ×éºÏ¼üÇл»´°¿Ú¡£WH_MSGFILTER HookÖ»ÄܼàÊÓ´«µÝµ½²Ëµ¥£¬¹ö¶¯Ìõ£¬ÏûÏ¢¿òµÄÏûÏ¢£¬ÒÔ¼°´«µÝµ½Í¨¹ý°²×°ÁËHook×ӳ̵ÄÓ¦ÓóÌÐò½¨Á¢µÄ¶Ô»°¿òµÄÏûÏ¢¡£WH_SYSMSGFILTER Hook¼àÊÓËùÓÐÓ¦ÓóÌÐòÏûÏ¢¡£WH_MSGFILTER ºÍ WH_SYSMSGFILTER HooksʹÎÒÃÇ¿ÉÒÔÔÚģʽѭ»·ÆÚ¼ä¹ýÂËÏûÏ¢£¬ÕâµÈ¼ÛÓÚÔÚÖ÷ÏûϢѭ»·ÖйýÂËÏûÏ¢¡£Í¨¹ýµ÷ÓÃCallMsgFilter function¿ÉÒÔÖ±½ÓµÄµ÷ÓÃWH_MSGFILTER Hook¡£Í¨¹ýʹÓÃÕâ¸öº¯Êý£¬Ó¦ÓóÌÐòÄܹ»ÔÚģʽѭ»·ÆÚ¼äʹÓÃÏàͬµÄ´úÂëÈ¥¹ýÂËÏûÏ¢£¬ÈçͬÔÚÖ÷ÏûϢѭ»·ÀïÒ»Ñù¡£

13¡¢WH_SHELL Hook

Íâ¿ÇÓ¦ÓóÌÐò¿ÉÒÔʹÓÃWH_SHELL HookÈ¥½ÓÊÕÖØÒªµÄ֪ͨ¡£µ±Íâ¿ÇÓ¦ÓóÌÐòÊǼ¤»îµÄ²¢ÇÒµ±¶¥²ã´°¿Ú½¨Á¢»òÕßÏú»Ùʱ£¬ÏµÍ³µ÷ÓÃWH_SHELL Hook×ӳ̡£

WH_SHELL ¹²ÓУµÖÓÇé›r£º

1. Ö»ÒªÓиötop-level¡¢unowned ´°¿Ú±»²úÉú¡¢Æð×÷ÓᢻòÊDZ»´Ý»Ù£»

2. µ±TaskbarÐèÒªÖØ»­Ä³¸ö°´Å¥£»

3. µ±ÏµÍ³ÐèÒªÏÔʾ¹ØÓÚTaskbarµÄÒ»¸ö³ÌÐòµÄ×îС»¯ÐÎʽ£»

4. µ±Ä¿Ç°µÄ¼üÅ̲¼¾Ö״̬¸Ä±ä£»

5. µ±Ê¹ÓÃÕß°´Ctrl+EscÈ¥Ö´ÐÐTask Manager£¨»òÏàͬ¼¶±ðµÄ³ÌÐò£©¡£

°´ÕÕ¹ßÀý£¬Íâ¿ÇÓ¦ÓóÌÐò¶¼²»½ÓÊÕWH_SHELLÏûÏ¢¡£ËùÒÔ£¬ÔÚÓ¦ÓóÌÐòÄܹ»½ÓÊÕWH_SHELLÏûϢ֮ǰ£¬Ó¦ÓóÌÐò±ØÐëµ÷ÓÃSystemParametersInfo function×¢²áËü×Ô¼º¡£

ÒÔÉÏÊÇ13ÖÖ³£ÓõÄhookÀàÐÍ£¡

¶þ£® °´Ê¹Ó÷¶Î§·ÖÀ࣬Ö÷ÒªÓÐÏ̹߳³×ÓºÍϵͳ¹³×Ó

£¨1£© Ï̹߳³×Ó¼àÊÓÖ¸¶¨Ï̵߳ÄʼþÏûÏ¢¡£

£¨2£© ϵͳ¹³×Ó¼àÊÓϵͳÖеÄËùÓÐÏ̵߳ÄʼþÏûÏ¢¡£ÒòΪϵͳ¹³×Ó»áÓ°ÏìϵͳÖÐËùÓеÄÓ¦ÓóÌÐò£¬ËùÒÔ¹³×Óº¯Êý±ØÐë·ÅÔÚ¶ÀÁ¢µÄ¶¯Ì¬Á´½Ó¿â(DLL)

ÖС£ÕâÊÇϵͳ¹³×ÓºÍÏ̹߳³×ӺܴóµÄ²»Í¬Ö®´¦¡£

¼¸µãÐèҪ˵Ã÷µÄµØ·½£º

£¨1£© Èç¹û¶ÔÓÚͬһʼþ£¨ÈçÊó±êÏûÏ¢£©¼È°²×°ÁËÏ̹߳³×ÓÓÖ°²×°ÁËϵͳ¹³×Ó£¬ÄÇôϵͳ»á×Ô¶¯Ïȵ÷ÓÃÏ̹߳³×Ó£¬È»ºóµ÷ÓÃϵͳ¹³×Ó¡£

£¨2£© ¶ÔͬһʼþÏûÏ¢¿É°²×°¶à¸ö¹³×Ó´¦Àí¹ý³Ì£¬ÕâЩ¹³×Ó´¦Àí¹ý³ÌÐγÉÁ˹³×ÓÁ´¡£µ±Ç°¹³×Ó´¦Àí½áÊøºóÓ¦°Ñ¹³×ÓÐÅÏ¢´«µÝ¸øÏÂÒ»¸ö¹³×Óº¯Êý¡£¶øÇÒ×î½ü°²×°µÄ¹³×Ó·ÅÔÚÁ´µÄ¿ªÊ¼£¬¶ø×îÔç°²×°µÄ¹³×Ó·ÅÔÚ×îºó£¬Ò²¾ÍÊǺó¼ÓÈëµÄÏÈ»ñµÃ¿ØÖÆÈ¨¡£

£¨3£© ¹³×ÓÌØ±ðÊÇϵͳ¹³×Ó»áÏûºÄÏûÏ¢´¦Àíʱ¼ä£¬½µµÍϵͳÐÔÄÜ¡£Ö»ÓÐÔÚ±ØÒªµÄʱºò²Å°²×°¹³×Ó£¬ÔÚʹÓÃÍê±ÏºóÒª¼°Ê±Ð¶ÔØ¡£

±àд¹³×Ó³ÌÐò

±àд¹³×Ó³ÌÐòµÄ²½Öè·ÖΪÈý²½£º¶¨Òå¹³×Óº¯Êý¡¢°²×°¹³×ÓºÍÐ¶ÔØ¹³×Ó¡£

1£®¶¨Òå¹³×Óº¯Êý

¹³×Óº¯ÊýÊÇÒ»ÖÖÌØÊâµÄ»Øµ÷º¯Êý¡£¹³×Ó¼àÊÓµÄÌØ¶¨Ê¼þ·¢Éúºó£¬ÏµÍ³»áµ÷Óù³×Óº¯Êý½øÐд¦Àí¡£²»Í¬Ê¼þµÄ¹³×Óº¯ÊýµÄÐÎʽÊǸ÷²»ÏàͬµÄ¡£ÏÂÃæÒÔÊó±ê¹³×Óº¯Êý¾ÙÀý˵Ã÷¹³×Óº¯ÊýµÄÔ­ÐÍ£º

LRESULT CALLBACK HookProc(int nCode ,WPARAM wParam,LPARAM lParam)

²ÎÊýwParamºÍ lParam°üº¬Ëù¹³ÏûÏ¢µÄÐÅÏ¢£¬±ÈÈçÊó±êλÖá¢×´Ì¬£¬¼üÅ̰´¼üµÈ¡£nCode°üº¬ÓйØÏûÏ¢±¾ÉíµÄÐÅÏ¢£¬±ÈÈçÊÇ·ñ´ÓÏûÏ¢¶ÓÁÐÖÐÒÆ³ö¡£

ÎÒÃÇÏÈÔÚ¹³×Óº¯ÊýÖÐʵÏÖ×Ô¶¨ÒåµÄ¹¦ÄÜ£¬È»ºóµ÷Óú¯Êý CallNextHookEx.°Ñ¹³×ÓÐÅÏ¢´«µÝ¸ø¹³×ÓÁ´µÄÏÂÒ»¸ö¹³×Óº¯Êý¡£CallNextHookEx.µÄÔ­ÐÍÈçÏ£º

LRESULT CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam )

²ÎÊý hhkÊǹ³×Ó¾ä±ú¡£nCode¡¢wParamºÍlParam Êǹ³×Óº¯Êý¡£

µ±È»Ò²¿ÉÒÔͨ¹ýÖ±½Ó·µ»ØTRUEÀ´¶ªÆú¸ÃÏûÏ¢£¬¾Í×èÖ¹Á˸ÃÏûÏ¢µÄ´«µÝ¡£

2£®°²×°¹³×Ó

ÔÚ³ÌÐò³õʼ»¯µÄʱºò£¬µ÷Óú¯ÊýSetWindowsHookEx°²×°¹³×Ó¡£Æäº¯ÊýÔ­ÐÍΪ£º

HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, HINSTANCE hMod,DWORD dwThreadId )

²ÎÊýidHook±íʾ¹³×ÓÀàÐÍ£¬ËüÊǺ͹³×Óº¯ÊýÀàÐÍÒ»Ò»¶ÔÓ¦µÄ¡£±ÈÈ磬WH_KEYBOARD±íʾ°²×°µÄÊǼüÅ̹³×Ó£¬WH_MOUSE±íʾÊÇÊó±ê¹³×ӵȵȡ£

LpfnÊǹ³×Óº¯ÊýµÄµØÖ·¡£

HModÊǹ³×Óº¯ÊýËùÔÚµÄʵÀýµÄ¾ä±ú¡£¶ÔÓÚÏ̹߳³×Ó£¬¸Ã²ÎÊýΪNULL£»¶ÔÓÚϵͳ¹³×Ó£¬¸Ã²ÎÊýΪ¹³×Óº¯ÊýËùÔÚµÄDLL¾ä±ú¡£

dwThreadId Ö¸¶¨¹³×ÓËù¼àÊÓµÄÏ̵߳ÄÏ̺߳š£¶ÔÓÚÈ«¾Ö¹³×Ó£¬¸Ã²ÎÊýΪNULL¡£

SetWindowsHookEx·µ»ØËù°²×°µÄ¹³×Ó¾ä±ú¡£

3£®Ð¶Ôع³×Ó

µ±²»ÔÙʹÓù³×Óʱ£¬±ØÐë¼°Ê±Ð¶ÔØ¡£¼òµ¥µØµ÷Óú¯Êý BOOL UnhookWindowsHookEx( HHOOK hhk)¼´¿É¡£

ÖµµÃ×¢ÒâµÄÊÇÏ̹߳³×ÓºÍϵͳ¹³×ӵĹ³×Óº¯ÊýµÄλÖÃÓкܴóµÄ²î±ð¡£Ï̹߳³×ÓÒ»°ãÔÚµ±Ç°Ï̻߳òÕßµ±Ç°Ïß³ÌÅÉÉúµÄÏß³ÌÄÚ£¬¶øÏµÍ³¹³×Ó±ØÐë·ÅÔÚ¶ÀÁ¢µÄ¶¯Ì¬Á´½Ó¿âÖУ¬ÊµÏÖÆðÀ´ÒªÂ鷳һЩ¡£

ÔÚCChildView::OnPaint()Ìí¼ÓÈçÏ´úÂ룺

(2)childview.cppÎļþÖж¨ÒåÈ«¾ÖµÄÊó±ê¹³×Óº¯Êý¡£

ϵͳ¹³×ӵıà³ÌʵÀý£º

ÓÉÓÚϵͳ¹³×ÓÒªÓõ½dll£¬ËùÒÔÏȽéÉÜÏÂwin32 dllµÄÌØµã£º

Win32 DLLÓë Win16 DLLÓкܴóµÄÇø±ð£¬ÕâÖ÷ÒªÊÇÓɲÙ×÷ϵͳµÄÉè¼ÆË¼Ïë¾ö¶¨µÄ¡£Ò»·½Ã棬ÔÚWin16 DLLÖгÌÐòÈë¿Úµãº¯ÊýºÍ³ö¿Úµãº¯Êý£¨LibMainºÍWEP£©ÊÇ·Ö±ðʵÏֵģ»¶øÔÚWin32 DLLÖÐÈ´ÓÉͬһº¯ÊýDLLMainÀ´ÊµÏÖ¡£ÎÞÂÛºÎʱ£¬µ±Ò»¸ö½ø³Ì»òÏß³ÌÔØÈëºÍÐ¶ÔØDLLʱ£¬¶¼Òªµ÷Óøú¯Êý£¬ËüµÄÔ­ÐÍÊÇBOOL WINAPI DllMain (HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved);£¬ÆäÖУ¬µÚÒ»¸ö²ÎÊý±íʾDLLµÄʵÀý¾ä±ú£»µÚÈý¸ö²ÎÊýϵͳ±£Áô£»ÕâÀïÖ÷Òª½éÉÜһϵڶþ¸ö²ÎÊý£¬ËüÓÐËĸö¿ÉÄܵÄÖµ£ºDLL_PROCESS_ATTACH£¨½ø³ÌÔØÈ룩£¬DLL_THREAD_ATTACH£¨Ïß³ÌÔØÈ룩£¬DLL_THREAD_DETACH£¨Ïß³ÌÐ¶ÔØ£©£¬DLL_PROCESS_DETACH£¨½ø³ÌÐ¶ÔØ£©£¬ÔÚDLLMainº¯ÊýÖпÉÒÔ¶Ô´«µÝ½øÀ´µÄÕâ¸ö²ÎÊýµÄÖµ½øÐÐÅб𣬲¢¸ù¾Ý²»Í¬µÄ²ÎÊýÖµ¶ÔDLL½øÐбØÒªµÄ³õʼ»¯»òÇåÀí¹¤×÷¡£

¾Ù¸öÀý×ÓÀ´Ëµ£¬µ±ÓÐÒ»¸ö½ø³ÌÔØÈëÒ»¸öDLLʱ£¬ÏµÍ³·ÖÅɸøDLLµÄµÚ¶þ¸ö²ÎÊýΪDLL_PROCESS_ATTACH£¬Õâʱ£¬Äã¿ÉÒÔ¸ù¾ÝÕâ¸ö²ÎÊý³õʼ»¯Ìض¨µÄÊý¾Ý¡£

ÁíÒ»·½Ã棬ÔÚWin16»·¾³Ï£¬ËùÓÐÓ¦ÓóÌÐò¶¼ÔÚͬһµØÖ·¿Õ¼ä£»¶øÔÚWin32»·¾³Ï£¬ËùÓÐÓ¦ÓóÌÐò¶¼ÓÐ×Ô¼ºµÄ˽Óпռ䣬ÿ¸ö½ø³ÌµÄ¿Õ¼ä¶¼ÊÇÏ໥¶ÀÁ¢µÄ£¬Õâ¼õÉÙÁËÓ¦ÓóÌÐò¼äµÄÏ໥ӰÏ죬µ«Í¬Ê±Ò²Ôö¼ÓÁ˱à³ÌµÄÄѶȡ£´ó¼ÒÖªµÀ£¬ÔÚWin16»·¾³ÖУ¬DLLµÄÈ«¾ÖÊý¾Ý¶Ôÿ¸öÔØÈëËüµÄ½ø³ÌÀ´Ëµ¶¼ÊÇÏàͬµÄ£»¶øÔÚWin32»·¾³ÖУ¬Çé¿öÈ´·¢ÉúÁ˱仯£¬µ±½ø³ÌÔÚÔØÈëDLLʱ£¬ÏµÍ³×Ô¶¯°ÑDLLµØÖ·Ó³Éäµ½¸Ã½ø³ÌµÄ˽Óпռ䣬¶øÇÒÒ²¸´ÖƸÃDLLµÄÈ«¾ÖÊý¾ÝµÄÒ»·Ý¿½±´µ½¸Ã½ø³Ì¿Õ¼ä£¬Ò²¾ÍÊÇ˵ÿ¸ö½ø³ÌËùÓµÓеÄÏàͬµÄDLLµÄÈ«¾ÖÊý¾ÝÆäֵȴ²¢²»Ò»¶¨ÊÇÏàͬµÄ¡£Òò´Ë£¬ÔÚWin32»·¾³ÏÂÒªÏëÔÚ¶à¸ö½ø³ÌÖй²ÏíÊý¾Ý£¬¾Í±ØÐë½øÐбØÒªµÄÉèÖá£Ò༴°ÑÕâЩÐèÒª¹²ÏíµÄÊý¾Ý·ÖÀë³öÀ´£¬·ÅÖÃÔÚÒ»¸ö¶ÀÁ¢µÄÊý¾Ý¶ÎÀ²¢°Ñ¸Ã¶ÎµÄÊôÐÔÉèÖÃΪ¹²Ïí¡£

ÔÚVC6ÖÐÓÐÈýÖÖÐÎʽµÄMFC DLL£¨ÔÚ¸ÃDLLÖпÉÒÔʹÓúͼ̳ÐÒÑÓеÄMFCÀà)¿É¹©Ñ¡Ôñ£¬¼´Regular statically linked to MFC DLL£¨±ê×¼¾²Ì¬Á´½ÓMFC DLL£©ºÍRegular using the shared MFC DLL£¨±ê×¼¶¯Ì¬Á´½ÓMFC DLL£©ÒÔ¼°Extension MFC DLL£¨À©Õ¹MFC DLL£©¡£µÚÒ»ÖÖDLLµÄÌØµãÊÇ£¬ÔÚ±àÒëʱ°ÑʹÓõÄMFC´úÂë¼ÓÈëµ½DLLÖУ¬Òò´Ë£¬ÔÚʹÓøóÌÐòʱ²»ÐèÒªÆäËûMFC¶¯Ì¬Á´½ÓÀà¿âµÄ´æÔÚ£¬µ«Õ¼ÓôÅÅ̿ռä±È½Ï´ó£»µÚ¶þÖÖDLLµÄÌØµãÊÇ£¬ÔÚÔËÐÐʱ£¬¶¯Ì¬Á´½Óµ½MFCÀà¿â£¬Òò´Ë¼õÉÙÁ˿ռäµÄÕ¼Ó㬵«ÊÇÔÚÔËÐÐʱȴÒÀÀµÓÚMFC¶¯Ì¬Á´½ÓÀà¿â£»ÕâÁ½ÖÖDLL¼È¿ÉÒÔ±»MFC³ÌÐòʹÓÃÒ²¿ÉÒÔ±»Win32³ÌÐòʹÓᣵÚÈýÖÖDLLµÄÌØµãÀàËÆÓÚµÚ¶þÖÖ£¬×öΪMFCÀà¿âµÄÀ©Õ¹£¬Ö»Äܱ»MFC³ÌÐòʹÓá£

LRESULT CALLBACK MouseProc 
(int nCode, WPARAM wParam, LPARAM lParam)
{//ÊÇÊó±êÒÆ¶¯ÏûÏ¢
if(wParam==WM_MOUSEMOVE||wParam
==WM_NCMOUSEMOVE)
{
point=((MOUSEHOOKSTRUCT £ª)lParam)£­>pt;
//È¡Êó±êÐÅÏ¢
pView£­>Invalidate(); //´°¿ÚÖØ»­
}
return CallNextHookEx(hHook,nCode,wParam,lParam);
//´«µÝ¹³×ÓÐÅÏ¢
}

(3)CChildViewÀàµÄ¹¹Ô캯ÊýÖа²×°¹³×Ó¡£

CChildView::CChildView() 
{
pView=this;//»ñµÃÊä³ö´°¿ÚÖ¸Õë
hHook=SetWindowsHookEx(WH_MOUSE,MouseProc,0,GetCurrentThreadId());
}
(4)CChildViewÀàµÄÎö¹¹º¯ÊýÖÐÐ¶ÔØ¹³×Ó¡£
CChildView::¡«CChildView()
{
if(hHook)
UnhookWindowsHookEx(hHook);
}

CPaintDC dc(this);
char str[256];
sprintf(str,¡°x=£¥d,y=£¥d",point.x,point.y); //¹¹Ôì×Ö·û´®
dc.TextOut(0,0,str); //ÏÔʾ×Ö·û´®

Ï̹߳³×ӵıà³ÌʵÀý£º

°´ÕÕÉÏÃæ½éÉܵķ½·¨ÊµÏÖÒ»¸öÏ̼߳¶µÄÊó±ê¹³×Ó¡£¹³×Ó¸ú×Ùµ±Ç°´°¿ÚÊó±êÒÆ¶¯µÄλÖñ仯ÐÅÏ¢¡£²¢Êä³öµ½´°¿Ú¡£

(1)ÔÚVC£«£«6.0ÖÐÀûÓÃMFC

APPWizard£¨EXE£©Éú³ÉÒ»¸ö²»Ê¹ÓÃÎĵµ/ÊӽṹµÄµ¥ÎĵµÓ¦ÓÃmousehook¡£´ò¿ªchildview.cppÎļþ£¬¼ÓÈëÈ«¾Ö±äÁ¿£º

HHOOK hHook;//Êó±ê¹³×Ó¾ä±ú 
CPoint point;//Êó±êλÖÃÐÅÏ¢
CChildView £ªpView; // Êó±ê¹³×Óº¯ÊýÓõ½µÄÊä³ö´°¿ÚÖ¸Õë

ÏÂÃæËµËµÔÚVC6ÖÐÈ«¾Ö¹²ÏíÊý¾ÝµÄʵÏÖ

ÔÚÖ÷ÎļþÖУ¬ÓÃ#pragma data_seg½¨Á¢Ò»¸öеÄÊý¾Ý¶Î²¢¶¨Òå¹²ÏíÊý¾Ý£¬Æä¾ßÌå¸ñʽΪ£º

½ö¶¨ÒåÒ»¸öÊý¾Ý¶Î»¹²»ÄÜ´ïµ½¹²ÏíÊý¾ÝµÄÄ¿µÄ£¬»¹Òª¸æËß±àÒëÆ÷¸Ã¶ÎµÄÊôÐÔ£¬ÓÐÁ½ÖÖ·½·¨¿ÉÒÔʵÏÖ¸ÃÄ¿µÄ£¨ÆäЧ¹ûÊÇÏàͬµÄ£©£¬Ò»ÖÖ·½·¨ÊÇÔÚ.DEFÎļþÖмÓÈëÈçÏÂÓï¾ä£º

SETCTIONS shareddata READ WRITE SHARED

ÁíÒ»ÖÖ·½·¨ÊÇÔÚÏîÄ¿ÉèÖÃÁ´½ÓÑ¡ÏîÖмÓÈëÈçÏÂÓï¾ä£º

(4)ÔÚMousehook.appÎļþµÄ¶¥²¿¼ÓÈë#include"Mousehook.h"Óï¾ä£»

(5)¼ÓÈëÈ«¾Ö¹²ÏíÊý¾Ý±äÁ¿£º

#pragma data_seg("mydata") 
¡¡¡¡HWND glhPrevTarWnd=NULL;
¡¡¡¡//ÉÏ´ÎÊó±êËùÖ¸µÄ´°¿Ú¾ä±ú
¡¡¡¡HWND glhDisplayWnd=NULL;
¡¡¡¡//ÏÔʾĿ±ê´°¿Ú±êÌâ±à¼­¿òµÄ¾ä±ú
¡¡¡¡HHOOK glhHook=NULL;
¡¡¡¡//°²×°µÄÊó±ê¹³×Ó¾ä±ú
¡¡¡¡HINSTANCE glhInstance=NULL;
¡¡¡¡//DLLʵÀý¾ä±ú
¡¡¡¡#pragma data_seg()

(6)ÔÚDEFÎļþÖж¨Òå¶ÎÊôÐÔ£º

SECTIONS 
¡¡¡¡mydata READ WRITE SHARED

(7)ÔÚÖ÷ÎļþMousehook.cppµÄDllMainº¯ÊýÖмÓÈë±£´æDLLʵÀý¾ä±úµÄÓï¾ä£º

DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) 
¡¡¡¡{
¡¡¡¡//Èç¹ûʹÓÃlpReserved²ÎÊýÔòɾ³ýÏÂÃæÕâÐÐ
¡¡¡¡UNREFERENCED_PARAMETER(lpReserved);
¡¡¡¡if (dwReason == DLL_PROCESS_ATTACH)
¡¡¡¡{
¡¡¡¡ TRACE0("MOUSEHOOK.DLL Initializing!/n");
¡¡¡¡ //À©Õ¹DLL½ö³õʼ»¯Ò»´Î
¡¡¡¡ if (!AfxInitExtensionModule(MousehookDLL, hInstance))
¡¡¡¡ return 0;
¡¡¡¡ new CDynLinkLibrary(MousehookDLL);
¡¡¡¡ //°ÑDLL¼ÓÈ붯̬MFCÀà¿âÖÐ
¡¡¡¡ glhInstance=hInstance;
¡¡¡¡ //²åÈë±£´æDLLʵÀý¾ä±ú
¡¡¡¡}
¡¡¡¡else if (dwReason == DLL_PROCESS_DETACH)
¡¡¡¡{
¡¡¡¡ TRACE0("MOUSEHOOK.DLL Terminating!/n");
¡¡¡¡ //ÖÕÖ¹Õâ¸öÁ´½Ó¿âǰµ÷ÓÃËü
¡¡¡¡ AfxTermExtensionModule(MousehookDLL);
¡¡¡¡}
¡¡¡¡return 1;
¡¡¡¡}

/SECTION:shareddata,rws

ºÃÁË£¬×¼±¸ÖªÊ¶ÒѾ­Ñ§ÍêÁË£¬ÈÃÎÒÃÇ¿ªÊ¼±àд¸öÈ«¾ÖµÄ¹³×Ó³ÌÐò°É£¡

ÓÉÓÚÈ«¾Ö¹³×Óº¯Êý±ØÐë°üº¬ÔÚ¶¯Ì¬Á´½Ó¿âÖУ¬ËùÒÔ±¾ÀýÓÉÁ½¸ö³ÌÐòÌåÀ´ÊµÏÖ¡£

1£®½¨Á¢¹³×ÓMousehook.DLL

(1)Ñ¡ÔñMFC AppWizard(DLL)´´½¨ÏîÄ¿Mousehook£»

(2)Ñ¡ÔñMFC Extension DLL£¨¹²ÏíMFC¿½±´£©ÀàÐÍ£»

(3)ÓÉÓÚVC5ûÓÐÏֳɵĹ³×ÓÀ࣬ËùÒÔÒªÔÚÏîĿĿ¼Öд´½¨Mousehook.hÎļþ£¬ÔÚÆäÖн¨Á¢¹³×ÓÀࣺ

class AFX_EXT_CLASS Cmousehook:public CObject 
¡¡¡¡{
¡¡¡¡public:
¡¡¡¡Cmousehook();
¡¡¡¡//¹³×ÓÀàµÄ¹¹Ô캯Êý
¡¡¡¡~Cmousehook();
¡¡¡¡//¹³×ÓÀàµÄÎö¹¹º¯Êý
¡¡¡¡BOOL starthook(HWND hWnd);
¡¡¡¡//°²×°¹³×Óº¯Êý
¡¡¡¡BOOL stophook();
¡¡¡¡Ð¶Ôع³×Óº¯Êý
¡¡¡¡};

#pragma data_seg £¨"shareddata")
¡¡¡¡HWND sharedwnd=NULL;//¹²ÏíÊý¾Ý
¡¡¡¡#pragma data_seg()

(8)ÀàCmousehookµÄ³ÉÔ±º¯ÊýµÄ¾ßÌåʵÏÖ£º

Cmousehook::Cmousehook()
¡¡¡¡//À๹Ô캯Êý
¡¡¡¡{
¡¡¡¡}
¡¡¡¡Cmousehook::~Cmousehook()
¡¡¡¡//ÀàÎö¹¹º¯Êý
¡¡¡¡{
¡¡¡¡stophook();
¡¡¡¡}
¡¡¡¡BOOL Cmousehook::starthook(HWND hWnd)
¡¡¡¡//°²×°¹³×Ó²¢É趨½ÓÊÕÏÔʾ´°¿Ú¾ä±ú
¡¡¡¡{
¡¡¡¡BOOL bResult=FALSE;
¡¡¡¡glhHook=SetWindowsHookEx(WH_MOUSE,MouseProc,glhInstance,0);
¡¡¡¡if(glhHook!=NULL)
¡¡¡¡ bResult=TRUE;
¡¡¡¡glhDisplayWnd=hWnd;
¡¡¡¡//ÉèÖÃÏÔʾĿ±ê´°¿Ú±êÌâ±à¼­¿òµÄ¾ä±ú
¡¡¡¡return bResult;
¡¡¡¡}
¡¡¡¡BOOL Cmousehook::stophook()
¡¡¡¡//Ð¶ÔØ¹³×Ó
¡¡¡¡{
¡¡¡¡BOOL bResult=FALSE;
¡¡¡¡if(glhHook)
¡¡¡¡{
¡¡¡¡ bResult= UnhookWindowsHookEx(glhHook);
¡¡¡¡ if(bResult)
¡¡¡¡{
¡¡¡¡ glhPrevTarWnd=NULL;
¡¡¡¡ glhDisplayWnd=NULL;//Çå±äÁ¿
¡¡¡¡ glhHook=NULL;
¡¡¡¡ }
¡¡¡¡}
¡¡¡¡return bResult;
¡¡¡¡}

(9)¹³×Óº¯ÊýµÄʵÏÖ£º

LRESULT WINAPI MouseProc(int nCode,WPARAM wparam,LPARAM lparam)
¡¡¡¡{
¡¡¡¡LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT FAR *) lparam;
¡¡¡¡ if (nCode>=0)
¡¡¡¡{
¡¡¡¡HWND glhTargetWnd=pMouseHook->hwnd;
¡¡¡¡//ȡĿ±ê´°¿Ú¾ä±ú
¡¡¡¡ HWND ParentWnd=glhTargetWnd;
¡¡¡¡ while (ParentWnd !=NULL)
¡¡¡¡{
¡¡¡¡ glhTargetWnd=ParentWnd;
¡¡¡¡ ParentWnd=GetParent(glhTargetWnd);
¡¡¡¡ //ȡӦÓóÌÐòÖ÷´°¿Ú¾ä±ú
¡¡¡¡ }
¡¡¡¡ if(glhTargetWnd!=glhPrevTarWnd)
¡¡¡¡{
¡¡¡¡ char szCaption[100];
¡¡¡¡ GetWindowText(glhTargetWnd,szCaption,100);
¡¡¡¡ //ȡĿ±ê´°¿Ú±êÌâ
¡¡¡¡ if(IsWindow(glhDisplayWnd))
¡¡¡¡ SendMessage(glhDisplayWnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)szCaption);
¡¡¡¡ glhPrevTarWnd=glhTargetWnd;
¡¡¡¡ //±£´æÄ¿±ê´°¿Ú
¡¡¡¡ }
¡¡¡¡ }
¡¡¡¡ return CallNextHookEx(glhHook,nCode,wparam,lparam);
¡¡¡¡ //¼ÌÐø´«µÝÏûÏ¢
¡¡¡¡}

10)±àÒëÏîÄ¿Éú³Émousehook.dll¡£

2£®´´½¨¹³×Ó¿ÉÖ´ÐгÌÐò

(1)ÓÃMFCµÄAppWizard(EXE)´´½¨ÏîÄ¿Mouse£»

(2)Ñ¡Ôñ¡°»ùÓÚ¶Ô»°Ó¦Óá±²¢°´Ï¡°Íê³É¡±¼ü£»

(3)±à¼­¶Ô»°¿ò£¬É¾³ýÆäÖÐÔ­ÓеÄÁ½¸ö°´Å¥£¬¼ÓÈ뾲̬Îı¾¿òºÍ±à¼­¿ò£¬ÓÃÊó±êÓÒ¼üµã»÷¾²Ì¬Îı¾¿ò£¬ÔÚµ¯³öµÄ²Ëµ¥ÖÐÑ¡Ôñ¡°ÊôÐÔ¡±£¬ÉèÖÃÆä±êÌâΪ¡°Êó±êËùÔڵĴ°¿Ú±êÌ⡱£»

(4)ÔÚMouse.hÖмÓÈë¶ÔMousehook.hµÄ°üº¬Óï¾ä#Include"../Mousehook/Mousehook.h"£»

(5)ÔÚCMouseDlg.hµÄCMouseDlgÀඨÒåÖÐÌí¼Ó˽ÓÐÊý¾Ý³ÉÔ±£º

CMouseHook m_hook;//¼ÓÈë¹³×ÓÀà×÷ΪÊý¾Ý³ÉÔ±

(6)ÐÞ¸ÄCmouseDlg::OnInitDialog()º¯Êý£º

BOOL CMouseDlg::OnInitDialog() 
¡¡¡¡{
¡¡¡¡CDialog::OnInitDialog();
¡¡¡¡ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
¡¡¡¡ASSERT(IDM_ABOUTBOX <0xF000);
¡¡¡¡CMenu* pSysMenu = GetSystemMenu(FALSE);
¡¡¡¡if (pSysMenu != NULL)
¡¡¡¡{
¡¡¡¡ CString strAboutMenu;
¡¡¡¡ strAboutMenu.LoadString(IDS_ABOUTBOX);
¡¡¡¡ if (!strAboutMenu.IsEmpty())
¡¡¡¡ {
¡¡¡¡ pSysMenu->AppendMenu(MF_SEPARATOR);
¡¡¡¡ pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
¡¡¡¡ }
¡¡¡¡}
¡¡¡¡SetIcon(m_hIcon, TRUE);//Set big icon
¡¡¡¡SetIcon(m_hIcon, FALSE);//Set small icon
¡¡¡¡//TODO: Add extra initialization here
¡¡¡¡CWnd * pwnd=GetDlgItem(IDC_EDIT1);
¡¡¡¡//È¡µÃ±à¼­¿òµÄÀàÖ¸Õë
¡¡¡¡m_hook.starthook(pwnd->GetSafeHwnd());
¡¡¡¡//È¡µÃ±à¼­¿òµÄ´°¿Ú¾ä±ú²¢°²×°¹³×Ó
¡¡¡¡return TRUE;
¡¡¡¡//return TRUE unless you set the focus to a control
¡¡¡¡}

(7)Á´½ÓDLL¿â£¬¼´°Ñ../Mousehook/debug/Mousehook.lib¼ÓÈëµ½ÏîÄ¿ÉèÖÃÁ´½Ó±êÇ©ÖУ»

(8)±àÒëÏîÄ¿Éú³É¿ÉÖ´ÐÐÎļþ£»

(9)°ÑMousehook.DLL¿½±´µ½../mouse/debugĿ¼ÖУ»

(10)ÏÈÔËÐм¸¸ö¿ÉÖ´ÐгÌÐò£¬È»ºóÔËÐÐMouse.exe³ÌÐò£¬°ÑÊó±êÔÚ²»Í¬´°¿ÚÖÐÒÆ¶¯£¬ÔÚMouse.exe³ÌÐò´°¿ÚÖеı༭¿òÄÚ½«ÏÔʾ³öÊó±êËùÔÚµÄÓ¦ÓóÌÐòÖ÷´°¿ÚµÄ±êÌâ¡£

   
2235 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ

ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ