Lc_KiT : ­Ó¤H¥D­¶ - ¬Ûï - ­q¾\  [ QOOZA - ½×¾Â - µn¤J ]
406 - Not Acceptable
 
2011 ¦~ 10 ¤ë 13 ¤é  ¬P´Á¥| 2011-10-13 09:20 PM


[Âà][API]4­Ókeybd ¼ÒÀÀ¤èªk, Æg!!~

Áä½L¬O§Ú­Ì¨Ï¥Î­pºâ¾÷ªº¤@­Ó«Ü­«­nªº¿é¤J³]³Æ¤F¡A§Y¨Ï¦b¹«¼Ð¤j¦æ¨ä¹Dªº¤µ¤Ñ¡A«Ü¦hµ{¦¡¨ÌµMÂ÷¤£¶}Áä½L¨Ó¾Þ§@¡C ¦ý¬O¦³®É­Ô¡A¤@¨Ç­«½Æ©Êªº¡A«ÜÁcº¾ªºÁä½L¾Þ§@Á`·|Åý¤H¯h¾Î¡A©ó¬O´N¦³¤F¥Îµ{¦¡¨Ó¥N´À¤H­Ì«öÁ䪺¤èªk¡A³o¼Ë¥i¥H§â«Ü¦h­«½Æ©ÊªºÁä½L¾Þ§@¥æµ¹µ{¦¡¨Ó¼ÒÀÀ¡A¬Ù¤F«Ü¦hºë¤O¡A«öÁäºëÆF´N¬O³o¼Ëªº¤@­Ó³n¥ó¡C ¨º»ò§Ú­Ì«ç¼Ë¤~¯à¥ÎVB¨Ó¼g¤@­Óµ{¦¡¡A¹F¨ì»P«öÁäºëÆFÃþ¦üªº¥\¯à©O¡H ¨º´NÅý§Ú­Ì¨Ó¥ýÁA¸Ñ¤@¤Uwindows¤¤ÅTÀ³Áä½L¨Æ¥óªº¾÷¨î¡C
·í¥Î¤á«ö¤UÁä½L¤Wªº¤@­ÓÁä®É¡AÁä½L¤ºªº´¹¤ù·|ÀË´ú¨ì³o­Ó°Ê§@¡A¨Ã§â³o­Ó«H¸¹¶Ç°e¨ì­pºâ¾÷¡C ¦p¦ó°Ï§O¬O­þ¤@­ÓÁä³Q«ö¤U¤F©O¡H Áä½L¤Wªº©Ò¦³«öÁä³£¦³¤@­Ó½s½X¡AºÙ§@Áä½L±½´y½X¡C ·í§A«ö¤U¤@­ÓÁä®É¡A³o­ÓÁ䪺±½´y½X´N³Q¶Çµ¹¨t²Î¡C ±½´y½X¬O¸ò¨ãÅ骺µwÅé¬ÛÃöªº¡A¦P¤@­ÓÁä¡A¦b¤£¦PÁä½L¤Wªº±½´y½X¦³¥i¯à¤£¦P¡C Áä½L±±¨î¾¹´N¬O±N³o­Ó±½´y½X¶Çµ¹­pºâ¾÷¡AµM«á¥æµ¹Áä½LÅX°Êµ{¦¡¡C Áä½LÅX°Êµ{¦¡·|§¹¦¨¬ÛÃöªº¤u§@¡A¨Ã§â³o­Ó±½´y½XÂà´«¬°Áä½LµêÀÀ½X¡C ¤°»ò¬OµêÀÀ½X©O¡H ¦]¬°±½´y½X»PµwÅé¬ÛÃö¡A¤£¨ã¦³³q¥Î©Ê¡A¬°¤F²Î¤@Áä½L¤W©Ò¦³Á䪺½s½X¡A©ó¬O´N´£¥X¤FµêÀÀ½X·§©À¡C µL½×¤°»òÁä½L¡A¦P¤@­Ó«öÁ䪺µêÀÀ½XÁ`¬O¬Û¦Pªº¡A³o¼Ëµ{¦¡´N¥i¥HÃѧO¤F¡C ²³æÂI»¡¡AµêÀÀ½X´N¬O§Ú­Ì¸g±`¥i¥H¬Ý¨ìªº¹³VK_A,VK_B³o¼Ëªº±`¼Æ¡A¤ñ¦pÁäAªºµêÀÀ½X¬O65¡A¼g¦¨16¶i¨î´N¬O&H41¡Aª`·N¡A¤H­Ì¸g±`¥Î16¶i¨î¨Óªí¥ÜµêÀÀ½X¡C ·íÁä½LÅX°Êµ{¦¡§â±½´y½XÂà´«¬°µêÀÀ½X«á¡A·|§â³o­ÓÁä½L¾Þ§@ªº±½´y½X©MµêÀÀ½XÁÙ¦³¨ä¥L¸ê°T¤@°_¶Ç»¼µ¹¾Þ§@¨t²Î¡C µM«á¾Þ§@¨t²Î«h·|§â³o¨Ç¸ê°T«Ê¸Ë¦b¤@­Ó®ø®§¤¤¡A¨Ã§â³o­ÓÁä½L®ø®§´¡¤J¨ì®ø®§¦C¶¤¡C ³Ì«á¡A­n¬O¤£¥X·N¥~ªº¸Ü¡A³o­ÓÁä½L®ø®§³Ì²×·|³Q°e¨ì·í«eªº¬¡°Êµ¡¤f¨º¸Ì¡A¬¡°Êµøµ¡©Ò¦bªºÀ³¥Îµ{¦¡±µ¦¬¨ì³o­Ó®ø®§«á¡A´Nª¾¹DÁä½L¤W­þ­ÓÁä³Q«ö¤U¡A¤]´N¥i¥H¨M©w¸Ó§@¥X¤°»òÅTÀ³µ¹¥Î¤á¤F¡C ³o­Ó¹Lµ{¥i¥H²³æªº¦p¤Uªí¥Ü¡G
¥Î¤á«ö¤U«öÁä-----Áä½LÅX°Êµ{¦¡±N¦¹¨Æ¥ó¶Ç»¼µ¹¾Þ§@¨t²Î-----¾Þ§@¨t²Î±NÁä½L¨Æ¥ó´¡¤J®ø®§¶¤¦C-----Áä½L®ø®§³Qµo°e¨ì·í«e¬¡°Êµ¡¤f<BR>©ú¥Õ¤F³o­Ó¹Lµ{¡A§Ú­Ì´N¥i¥H½sµ{¹ê²{¦b¨ä¤¤ªº¬Y­ÓÀô¸`¨Ó¼ÒÀÀÁä½L¾Þ§@¤F¡C ¦bVB¤¤¡A¦³¦hºØ¤èªk¥i¥H¹ê²{Áä½L¼ÒÀÀ¡A§Ú­Ì´N¤¶²Ð´XºØ¤ñ¸û¨å«¬ªº¡C

 1.§½³¡¯Å¼ÒÀÀ

±q¤W­±ªº¬yµ{¥i¥H¬Ý¥X¡AÁä½L¨Æ¥ó¬O³Ì²×³Q°e¨ì¬¡°Êµ¡¤f¡AµM«á¤~¤Þ°_¥Ø¼Ðµ{¦¡ÅTÀ³ªº¡C ¨º»ò³Ìª½±µªº¼ÒÀÀ¤èªk´N¬O¡Gª½±µ°°³y¤@­ÓÁä½L®ø®§µoµ¹¥Ø¼Ðµ{¦¡¡C «¢«¢¡A³o¹ê¦b¬O«Ü²³æ¡Awindows´£¨Ñ¤F´X­Ó³o¼ËªºAPI¨ç¼Æ¥i¥H¹ê²{ª½±µ¦V¥Ø¼Ðµ{¦¡µo°e®ø®§ªº¥\¯à¡A±`¥Îªº¦³SendMessage©MPostMessage¡A¥¦­Ìªº°Ï§O¬OPostMessage¨ç¼Æª½±µ§â®ø®§¤´µ¹¥Ø¼Ðµ{¦¡´N¤£ºÞ¤F¡A¦ÓSendMessage§â®ø®§µo¥X¥h«á¡AÁÙ­nµ¥«Ý¥Ø¼Ðµ{¦¡ªð¦^¨Ç¤°»òªF¦è¤~¦n¡C ³o¸Ì­nª`·Nªº¬O¡A¼ÒÀÀÁä½L®ø®§¤@©w­n¥ÎPostMessage¨ç¼Æ¤~¦n¡A¥ÎSendMessage¬O¤£¥¿½Tªº(¦]¬°¼ÒÀÀÁä½L®ø®§¬O¤£»Ý­nªð¦^­Èªº¡A¤£µM¥Ø¼Ðµ{¦¡·|¨S¤ÏÀ³)¡A¤Á°O¤Á°O¡I  PostMessage¨ç¼ÆªºVBÁn©ú¦p¤U¡G
 Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
°Ñ¼Æhwnd¬O§A­nµo°e®ø®§ªº¥Ø¼Ðµ{¦¡¤W¬Y­Ó±±¨î¶µªº±±¨î½X¡A°Ñ¼ÆwMsg¬O®ø®§ªºÃþ«¬¡Aªí¥Ü§A­nµo°e¤°»ò¼Ëªº®ø®§¡A³Ì«áwParam©MlParam³o¨â­Ó°Ñ¼Æ¬OÀH®ø®§ªþ¥[ªº¼Æ¾Ú¡A¨ãÅ餺®e­n¥Ñ®ø®§¨M©w¡C
¦A¨Ó¬Ý¬ÝwMsg³o­Ó°Ñ¼Æ¡A­n¼ÒÀÀ«öÁä´N¾a³o­Ó¤F¡C Áä½L®ø®§±`¥Îªº¦³¦p¤U´X­Ó¡G
 WM_KEYDOWNªí¥Ü¤@­Ó´¶³qÁä³Q«ö¤U
 WM_KEYUPªí¥Ü¤@­Ó´¶³qÁä³QÄÀ©ñ
 WM_SYSKEYDOWNªí¥Ü¤@­Ó¨t²ÎÁä³Q«ö¤U¡A¤ñ¦pAltÁä
 WM_SYSKEYUPªí¥Ü¤@­Ó¨t²ÎÁä³QÄÀ©ñ¡A¤ñ¦pAltÁä<BR>¦pªG§A½T©w­nµo°e¥H¤W´X­ÓÁä½L®ø®§¡A¨º»ò¦A¨Ó¬Ý¬Ý¦p¦ó½T©wÁä½L®ø®§¤¤ªºwParam©MlParam³o¨â­Ó°Ñ¼Æ¡C ¦b¤@­ÓÁä½L®ø®§¤¤¡AwParam°Ñ¼Æªº§t¸q¸û²³æ¡A¥¦ªí¥Ü§A­nµo°eªºÁä½L¨Æ¥óªº«öÁäµêÀÀ½X¡A¤ñ¦p§A­n¹ï¥Ø¼Ðµ{¦¡¼ÒÀÀ«ö¤UAÁä¡A¨º»òwParam°Ñ¼Æªº­È´N³]¬°VK_A ,¦Ü©ólParam³o­Ó°Ñ¼Æ´N¤ñ¸û½ÆÂø¤F¡A¦]¬°¥¦¥]§t¤F¦h­Ó¸ê°T¡A¤@¯ë¥i¥H§â¥¦³]¬°0¡A¦ý¬O¦pªG§A·Q­n§Aªº¼ÒÀÀ§ó¯u¹ê¤@¨Ç¡A¨º»ò«ØÄ³§AÁÙ¬O³]¸m¤@¤U³o­Ó°Ñ¼Æ¡C ¨º»ò§Ú­Ì´N¸Ô²ÓÁA¸Ñ¤@¤UlParam§a¡C  lParam¬O¤@­ÓlongÃþ«¬ªº°Ñ¼Æ¡A¥¦¦b¤º¦s¤¤¦û4­Ó¦r¸`¡A¼g¦¨¤G¶i¨î´N¬O00000000 00000000 00000000 00000000¤@¦@¬O32¦ì¡A§Ú­Ì±q¥k¦V¥ª¼Æ¡A°²³]³Ì¥kÃ䨺¦ì¬°²Ä0¦ì(ª`·N¬O±q0¦Ó¤£¬O±q1¶}©l­p¼Æ)¡A³Ì¥ªÃ䪺´N¬O²Ä31¦ì¡A¨º»ò¸Ó°Ñ¼Æªºªº0-15¦ìªí¥ÜÁ䪺µo°e¦¸¼Æµ¥ÂX®i¸ê°T¡A16-23¦ì¤¸¬°«öÁ䪺±½´y½X¡A24-31¦ìªí¥Ü¬O«ö¤UÁäÁÙ¬OÄÀ©ñÁä¡C ¤j®a¤@¯ë²ßºD¼g¦¨16¶i¨îªº¡A¨º»ò´NÀ³¸Ó¬O&H00 00 00 00 ¡A²Ä0-15¦ì¤@¯ë¬°&H0001¡A¦pªG¬O«ö¤UÁä¡A¨º»ò24-31¦ì¬°&H00¡AÄÀ©ñÁä«h¬°&HC0,¨º»ò16-23¦ìªº±½´y½X«ç»ò·|±o©O¡H ³o»Ý­n¥Î¨ì¤@­ÓAPI¨ç¼ÆMapVirtualKey¡A³o­Ó¨ç¼Æ¥i¥H±NµêÀÀ½XÂà´«¬°±½´y½X¡A©Î±N±½´y½XÂà´«¬°µêÀÀ½X¡AÁÙ¥i¥H§âµêÀÀ½XÂà´«¬°¹ïÀ³¦r¤¸ªºASCII½X¡C ¥¦ªºVBÁn©ú¦p¤U¡G
 Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
°Ñ¼ÆwCodeªí¥Ü«ÝÂà´«ªº½X¡A°Ñ¼ÆwMapTypeªí¥Ü±q¤°»òÂà´«¬°¤°»ò¡A¦pªG¬OµêÀÀ½XÂà±½´y½X¡A«hwMapType³]¸m¬°0¡A¦pªG¬OµêÀÀ±½´y½XÂàµêÀÀ½X¡A«hwMapType³]¸m¬°1¡A¦pªG¬OµêÀÀ½XÂàASCII½X¡A«hwMapType³]¸m¬°2.¬Û«H¦³¤F³o¨Ç¡A§Ú­Ì´N¥i¥Hºc³yÁä½L¨Æ¥óªºlParam°Ñ¼Æ¤F¡C ¤UÄѵ¹¥X¤@­Óºc³ylParam°Ñ¼Æªº¨ç¼Æ¡G
 Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

 Function MakeKeyLparam(ByVal VirtualKey As Long, ByVal flag As Long) As Long
 '°Ñ¼ÆVirtualKeyªí¥Ü«öÁäµêÀÀ½X,flagªí¥Ü¬O«ö¤UÁäÁÙ¬OÄÀ©ñÁä¡A¥ÎWM_KEYDOWN©MWM_KEYUP³o¨â­Ó±`¼Æªí¥Ü
 Dim s As String
 Dim Firstbyte As String 'lparam°Ñ¼Æªº24-31¦ì
 If flag = WM_KEYDOWNThen '¦pªG¬O«ö¤UÁä
 Firstbyte = "00"
 Else
 Firstbyte = "C0" '¦pªG¬OÄÀ©ñÁä
 End If
 Dim Scancode As Long
 'Àò±oÁ䪺±½´y½X
 Scancode = MapVirtualKey(VirtualKey, 0)
 Dim Secondbyte As String 'lparam°Ñ¼Æªº16-23¦ì¡A§YµêÀÀÁä±½´y½X
 Secondbyte = Right("00" & Hex(Scancode), 2)
 s = Firstbyte & Secondbyte & "0001"'0001¬°lparam°Ñ¼Æªº0-15¦ì¡A§Yµo°e¦¸¼Æ©M¨ä¥LÂX®i¸ê°T
 MakeKeyLparam = Val("&H" & s)
 End Function

³o­Ó¨ç¼Æ¹³³o¼Ë½Õ¥Î¡A¤ñ¦p«ö¤UAÁä¡A¨º»òlParam=MakeKeyLparam(VK_A,WM_KEYDOWN) ¡A«Ü²³æ§a¡C ­È±oª`·Nªº¬O¡A§Y¨Ï§Aµo°e®ø®§®É³]¸m¤FlParam°Ñ¼Æªº­È¡A¦ý¬O¨t²Î¦b¶Ç»¼®ø®§®É¤´µM¥i¯à·|®Ú¾Ú·í®Éªº±¡ªp­«·s³]¸m¸Ó°Ñ¼Æ¡A¨º»ò¥Ø¼Ðµ{¦¡¦¬¨ìªº®ø®§¤¤lParamªº­È¥i¯à·|©M§Aµo°e®Éªº¦³©Ò¤£¦P¡C ©Ò¥H¡A¦pªG§A«ÜÃiªº¸Ü¡AÁÙ¬Oª½±µ§â¥¦³]¬°0§a¡A¹ï¤j¦h¼Æµ{¦¡¤£·|¦³¼vÅTªº¡A¨þ¨þ¡C
¦n¤F¡A°µ§¹¥H¤Wªº¨Æ±¡¡A²{¦b§Ú­Ì¥i¥H¦V¥Ø¼Ðµ{¦¡µo°eÁä½L®ø®§¤F¡C ­º¥ý¨ú±o¥Ø¼Ðµ{¦¡±µ¨ü³o­Ó®ø®§ªº±±¨î¶µªº±±¨î½X¡A¤ñ¦p¥Ø¼Ð±±¨î½X¬O12345¡A¨º»ò§Ú­Ì¨Ó¹ï¥Ø¼Ð¼ÒÀÀ«ö¤U¨ÃÄÀ©ñAÁä¡A¹³³o¼Ë¡G(¬°¤F²³æ°_¨£¡AlParam³o­Ó°Ñ¼Æ´N¤£ºc³y¤F¡Aª½±µ¶Ç0)
 PostMessage 12345¡AWM_KEYDOWN¡AVK_A¡A0& '«ö¤UAÁä
 PostMessage 12345¡AWM_UP¡AVK_A¡A0& 'ÄÀ©ñAÁä<BR>¦n¤F¡A¤@¦¸«öÁä´N§¹¦¨¤F¡C ²{¦b§A¥i¥H­¢¤£¤Î«Ýªº¥´¶}°O¨Æ¥»°µ¹êÅç¡A¥ý¥ÎFindWindowEx³oÃþAPI¨ç¼Æ§ä¨ì°O¨Æ¥»µ{¦¡ªº±±¨î½X¡A¦A¦V¥¦µo°eÁä½L®ø®§¡A´Á±æ°O¨Æ¥»ùدà¸Þ²§ªº¦Û°Ê¥X²{¦r¤¸¡C ¥i¬O§A°¨¤W´N¬O¥¢±æ¤F¡A«x¡A«ç»ò¤@ÂI¤ÏÀ³¤]¨S¦³¡H §A´ÛÄF·P±¡°Ú~~~~~~~~~~55555555555555¤£¬Oªº®@¡A±µµÛ©¹¤U¬Ý°Ú¡C
¤@¯ë¥Ø¼Ðµ{¦¡³£·|§t¦³¦h­Ó±±¨î¶µ¡A¨Ã¤£¬O¨C­Ó±±¨î¶µ³£·|¹ïÁä½L®ø®§§@¥X¤ÏÀ³¡A¥u¦³§âÁä½L®ø®§µo°eµ¹±µ¨ü¥¦ªº±±¨î¶µ¤~·|±o¨ì´Á±æªº¤ÏÀ³¡C ¨º°O¨Æ¥»¨Ó»¡¡A¥¦ªº½s¿è®Ø¨ä¹ê¬O­ÓeditÃþ¡A¥u¦³³o­Ó±±¨î¶µ¤~¹ïÁä½L¨Æ¥ó¦³¤ÏÀ³¡A¦pªG¥u¬O§â®ø®§µoµ¹°O¨Æ¥»ªºµ¡Åé¡A¨º¬O¨S¦³¥Îªº¡C ²{¦b§A§ä¥X°O¨Æ¥»¨º­Ó½s¿è®Øªº±±¨î½X¡A¤ñ¦p¬O54321¡A¨º»ò¼g¦p¤U¥N½X¡G
 PostMessage 54321¡AWM_KEYDOWN¡AVK_F1¡A0& '«ö¤UF1Áä
 PostMessage 54321¡AWM_UP¡AVK_F1¡A0& 'ÄÀ©ñF1Áä<BR>«ç»ò¼Ë¡A¬O¤£¬O¥´¶}¤F°O¨Æ¥»ªº“À°§U”«H®§¡H ³o»¡©ú¥Ø¼Ðµ{¦¡¤w¸g¦¬¨ì¤F§Aµoªº®ø®§¡AÁÙ¤£¿ù§a~~~~~~~~
¥i¥H°¨¤W·s°ÝÃD´N¨Ó¤F¡A§A·Q¼ÒÀÀ¦V°O¨Æ¥»«ö¤UA³o­ÓÁä¡A¦n¦b°O¨Æ¥»ùئ۰ʿé¤J¦r¤¸¡A¥i¬O¡A¨S¦³¥ô¦ó¤ÏÀ³¡I ³o¬O«ç»ò¤@¦^¨Æ©O¡H
­ì¨Ó¡A¦pªG­n¦V¥Ø¼Ðµ{¦¡µo°e¦r¤¸¡A¥ú¾aWM_KEYDOWN©MWM_UP³o¨â­Ó¨Æ¥óÁÙ¤£¦æ¡AÁٻݭn¤@­Ó¨Æ¥ó¡GWM_CHAR¡A³o­Ó®ø®§ªí¥Ü¤@­Ó¦r¤¸¡Aµ{¦¡»Ý¾a¥¦¬Ý¨Ó±µ¨ü¿é¤Jªº¦r¤¸¡C ¤@¯ë¥u¦³A¡AB¡AC»CÀí¼Ëªº«öÁä¤~¦³WM_CHAR®ø®§¡A§OªºÁä(¤ñ¦p¤è¦VÁä©M¥\¯àÁä)¬O¨S¦³³o­Ó®ø®§ªº¡AWM_CHAR®ø®§¤@¯ëµo¥Í¦bWM_KEYDOWN®ø®§¤§«á¡C  WM_CHAR®ø®§ªºlParam°Ñ¼Æªº§t¸q»P¨ä¥LÁä½L®ø®§¤@¼Ë¡A¦Ó¥¦ªºwParam«hªí¥Ü¬ÛÀ³¦r¤¸ªºASCII½s½X(¥i¥H¿é¤J¤¤¤åªº®@^_^)¡A²{¦b§A¥i¥H¼g¥X¤@­Ó§¹¾ãªº¦V°O¨Æ¥»ùئ۰ʼg¤J¦r¤¸ªºµ{¦¡¤F¡A¤U­±¬O¤@­Ó¨Ò¤l¡A¨Ãªþ¦³³o¨Ç®ø®§±`¼Æªº¨ãÅé­È¡G
 Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
 Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

 Public Const WM_KEYDOWN = &H100
 Public Const WM_KEYUP = &H101
 Public Const WM_CHAR = &H102
 Public Const VK_A = &H41

 Function MakeKeyLparam(ByVal VirtualKey As Long, ByVal flag As Long) As Long
 Dim s As String
 Dim Firstbyte As String 'lparam°Ñ¼Æªº24-31¦ì
 If flag = WM_KEYDOWNThen '¦pªG¬O«ö¤UÁä
 Firstbyte = "00"
 Else
 Firstbyte = "C0" '¦pªG¬OÄÀ©ñÁä
 End If
 Dim Scancode As Long
 'Àò±oÁ䪺±½´y½X
 Scancode = MapVirtualKey(VirtualKey, 0)
 Dim Secondbyte As String 'lparam°Ñ¼Æªº16-23¦ì¡A§YµêÀÀÁä±½´y½X
 Secondbyte = Right("00" & Hex(Scancode), 2)
 s = Firstbyte & Secondbyte & "0001"'0001¬°lparam°Ñ¼Æªº0-15¦ì¡A§Yµo°e¦¸¼Æ©M¨ä¥LÂX®i¸ê°T
 MakeKeyLparam = Val("&H" & s)
 End Function

 Private Sub Form_Load()
 dim hwnd as long
 hwnd = XXXXXX'XXXXXªí¥Ü°O¨Æ¥»½s¿è®Øªº±±¨î½X
 PostMessage hwnd,WM_KEYDOWN¡AVK_A¡AMakeKeyLparam(VK_A,WM_KEYDOWN)'«ö¤UAÁä
 PostMessage hwnd,WM_CHAR¡AASC("A"),MakeKeyLparam(VK_A,WM_KEYDOWN)'¿é¤J¦r¤¸A
 PostMessage hwnd,WM_UP¡AVK_A¡AMakeKeyLparam(VK_A,WM_UP) 'ÄÀ©ñAÁä
 End Sub

³o´N¬O³q¹L§½³¡Áä½L®ø®§¨Ó¼ÒÀÀ«öÁä¡C ³o­Ó¤èªk¦³¤@­Ó·¥¤jªº¦n³B¡A´N¬O¡G¥¦¥i¥H¹ê²{«á¥x«öÁä¡A¤]´N¬O»¡¥L¹ï§Aªº«e»O¾Þ§@¤£·|¦³¤°»ò¼vÅT¡C ¤ñ¦p¡A§A¥i¥H¥Î³o­Ó¤èªk°µ­Óµ{¦¡¦b¹CÀ¸¤¤¼ÒÀÀ«öÁä¨Ó¤£Â_¦a°õ¦æ¬Y¨Ç­«½Æªº¾Þ§@¡A¦Ó§A«h¤@Ãä³Ü¯ù¤@Ãä»PQQ¤WªºMM­Ì²á±o¤õ¼ö¡A¥¦µ·²@¤£·|¼vÅT§Aªº«e»O¾Þ§@¡C µL½×¥Ø¼Ðµ{¦¡¬O§_Àò±oµJÂI³£¨S¦³¼vÅT¡A³o´N¬O«á¥x¼ÒÀÀ«öÁ䪺­ì²z°Õ~~~~


 2.¥þ§½¯Å¼ÒÀÀ

§A·|µo²{¡A¥Î¤W­±ªº¤èªk¼ÒÀÀ«öÁä¨Ã¤£¬O¹ï©Ò¦³µ{¦¡³£¦³®Äªº¡A¦³ªºµ{¦¡°Ú¡A§A¦V¥¦µo¤F¤@¤j°ï®ø®§¡A¥i¬O¥¦«o¤@ÂI¤ÏÀ³¤]¨S¦³¡C ³o¬O«ç»ò¦^¨Æ©O¡H ³o´N­n¬Ý¨ãÅ骺±¡ªp¤F¡A¦³¨Çµ{¦¡(¯S§O¬O¤@¨Ç¹CÀ¸)¥X©ó¬Y¨Ç­ì¦]¡A·|¸T¤î¥Î¤á¹ï¥¦¨Ï¥Î¼ÒÀÀ«öÁäµ{¦¡¡A³o­Ó«ç»ò¹ê²{©O¡H ¤ñ¦p¥i¥H¦bµ{¦¡¤¤Àˬd¤@¤U¡A¦pªGµo²{¦Û¤v¤£¬O¬¡°Êµøµ¡¡A´N¤£±µ¨üÁä½L®ø®§¡C ©ÎªÌ¥J²ÓÀˬd¤@¤U¦¬¨ìªºÁä½L®ø®§¡A§A·|µo²{¯u¹êªº«öÁä©M¼ÒÀÀªº«öÁ䮸®§Á`¬O¦³¤@¨Ç¤p®t§O¡A±q³o¨Ç¤p®t§O¤W¡A¥Ø¼Ðµ{¦¡´N¯à§PÂ_¥X¡G³o¬O°²ªº¡I ¬O°°³yªº¡I ¡I ¦]¦¹¡A¦pªG¥ÎPostMessageµo°e§½³¡®ø®§¼ÒÀÀ«öÁ䤣¦¨¥\ªº¸Ü¡A§A¥i¥H¸Õ¤@¸Õ¥þ§½¯ÅªºÁä½L®ø®§¡A¬Ý¬Ý¯à¤£¯àÄF¹L¥Ø¼Ðµ{¦¡¡C
¼ÒÀÀ¥þ§½Áä½L®ø®§±`¨£ªº¥i¥H¦³¥H¤U¤@¨Ç¤èªk¡G
 (1)¥ÎAPI¨ç¼Ækeybd_event¡A³o­Ó¨ç¼Æ¥i¥H¥Î¨Ó¼ÒÀÀ¤@­ÓÁä½L¨Æ¥ó¡A¥¦ªºVBÁn©ú¬°¡G
 Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
°Ñ¼ÆbVkªí¥Ü­n¼ÒÀÀªº«öÁ䪺µêÀÀ½X¡AbScanªí¥Ü¸Ó«öÁ䪺±½´y½X(¤@¯ë¥i¥H¶Ç0)¡AdwFlagsªí¥Ü¬O«ö¤UÁäÁÙ¬OÄÀ©ñÁä(«ö¤UÁ䬰0¡AÄÀ©ñÁ䬰2)¡AdwExtraInfo¬OÂX®i¼Ð»x¡A¤@¯ë¨S¦³¥Î¡C ¤ñ¦p­n¼ÒÀÀ«ö¤UAÁä¡A¥i¥H³o¼Ë¡G
 Const KEYEVENTF_KEYUP = &H2
 keybd_event VK_A, 0, 0, 0 '«ö¤UAÁä
 keybd_event VK_A, 0, KEYEVENTF_KEYUP, 0 'ÄÀ©ñAÁä<BR>ª`·N¦³®É­Ô«öÁ䪺³t«×¤£­n¤Ó§Ö¡A§_«h·|¥X°ÝÃD¡A¥i¥H¥ÎAPI¨ç¼ÆSleep¨Ó¶i¦æ©µ®É¡AÁn©ú¦p¤U¡G
 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
°Ñ¼ÆdwMillisecondsªí¥Ü©µ®Éªº®É¶¡¡A¥H²@¬í¬°³æ¦ì¡C
¨º»ò¦pªG­n¼ÒÀÀ«ö¤U¥\¯àÁä«ç»ò°µ©O¡H ¤ñ¦p­n«ö¤UCtrl+C¹ê²{«þ¨©³o­Ó¥\¯à¡A¥i¥H³o¼Ë¡G
 keybd_event VK_Ctrl, 0, 0, 0 '«ö¤UCtrlÁä
 keybd_event VK_C, 0, 0, 0 '«ö¤UCÁä
 Sleep 500 '©µ®É500²@¬í
 keybd_event VK_C, 0, KEYEVENTF_KEYUP, 0 'ÄÀ©ñCÁä
 keybd_event VK_Ctrl, 0, KEYEVENTF_KEYUP, 0 'ÄÀ©ñCtrlÁä<BR>¦n¤F¡A²{¦b§A¥i¥H¸Õ¸Õ¬O¤£¬O¥i¥HÄF¹L¥Ø¼Ðµ{¦¡¤F¡A³o­Ó¨ç¼Æ¹ï¤j³¡¤Àªºµøµ¡µ{¦¡³£¦³®Ä¡A¥i¬O¤´µM¦³¤@³¡¤À¹CÀ¸¹ï¥¦²£¥ÍªºÁä½L¨Æ¥ó¼ôµøµL¸@¡A³o®É­Ô¡A§A´N­n¥Î¤WbScan³o­Ó°Ñ¼Æ¤F¡C ¤@¯ëªº¡AbScan³£¶Ç0¡A¦ý¬O¦pªG¥Ø¼Ðµ{¦¡¬O¤@¨ÇDirectX¹CÀ¸¡A¨º»ò§A´N»Ý­n¥¿½T¨Ï¥Î³o­Ó°Ñ¼Æ¶Ç¤J±½´y½X¡A¥Î¤F¥¦¥i¥H²£¥Í¥¿½TªºµwÅ鍯¥ó®ø®§¡A¥H³Q¹CÀ¸ÃѧO¡C ³o¼Ëªº¸Ü¡A´N¥i¥H¼g¦¨³o¼Ë¡G
 keybd_event VK_A, MapVirtualKey(VK_A, 0), 0, 0 '«ö¤UAÁä
 keybd_event VK_A, MapVirtualKey(VK_A, 0), KEYEVENTF_KEYUP, 0 'ÄÀ©ñAÁä<BR>¥H¤W´N¬O¥Îkeybd_event¨ç¼Æ¨Ó¼ÒÀÀÁä½L¨Æ¥ó¡C °£¤F³o­Ó¨ç¼Æ¡ASendInput¨ç¼Æ¤]¥i¥H¼ÒÀÀ¥þ§½Áä½L¨Æ¥ó¡C  SendInput¥i¥Hª½±µ§â¤@±ø®ø®§´¡¤J¨ì®ø®§¶¤¦C¤¤¡Aºâ¬O¤ñ¸û©³¼hªº¤F¡C ¥¦ªºVBÁn©ú¦p¤U¡G
 Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As GENERALINPUT, ByVal cbSize As Long) As Long
°Ñ¼Æ¡G
 nlnprts¡G©w¸qplnputs«ü¦Vªºµ²ºcªº¼Æ¥Ø¡C
 plnputs¡G«ü¦VINPUTµ²ºc¼Æ²Õªº«ü°w¡C ¨C­Óµ²ºc¥Nªí´¡¤H¨ìÁä½L©Î¹«¼Ð¿é¤J¬y¤¤ªº¤@­Ó¨Æ¥ó¡C
 cbSize¡G©w¸qINPUTµ²ºcªº¤j¤p¡C ­YcbSize¤£¬OINPUTµ²ºcªº¤j¤p¡A«h¨ç¼Æ½Õ¥Î¥¢±Ñ¡C
ªð¦^­È¡G¨ç¼Æªð¦^³Q¦¨¥\¦a´¡¤HÁä½L©Î¹«¼Ð¿é¤J¬y¤¤ªº¨Æ¥óªº¼Æ¥Ø¡C ­Y­nÀò±o§ó¦hªº¿ù»~¸ê°T¡A¥i¥H½Õ¥ÎGetlastError¨ç¼Æ¡C
³Æµù¡GSendlnput¨ç¼Æ±NINPUTµ²ºc¤¤ªº¨Æ¥ó¶¶§Ç¦a´¡¤JÁä½L©Î¹«¼Ðªº¿é¤J¬y¤¤¡C ³o¨Ç¨Æ¥ó»P¥Î¤á´¡¤Jªº¡]¥Î¹«¼Ð©ÎÁä½L¡^©Î½Õ¥Îkeybd_event¡Amouse_event¡A©Î¥t¥~ªºSendlnput´¡¤HªºÁä½L©Î¹«¼Ðªº¿é¤J¬y¤£¬Û®e¡C
¶â¡A³o­Ó¨ç¼Æ¥Î°_¨ÓÆZ½ÆÂøªº¡A¦]¬°¥¦ªº°Ñ¼Æ³£¬O«ü°w¤@ÃþªºªF¦è¡C ­n¥Î¥¦¨Ó¼ÒÀÀÁä½L¿é¤J¡A¥ý­nºc³y¤@²Õ¼Æ¾Úµ²ºc¡A§â§A­n¼ÒÀÀªºÁä½L®ø®§¸Ë¶i¥h¡AµM«á¶Çµ¹¥¦¡C ¬°¤F¤è«K°_¨£¡A§â¥¦°µ¦b¤@­Ó¹Lµ{¸Ì­±¡A­n¥Îªº®É­Ôª½±µ½Õ¥Î¦n¤F¡A¥N½X¦p¤U¡G
 Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As GENERALINPUT, ByVal cbSize As Long) As Long
 Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
 Type GENERALINPUT
 dwType As Long
 xi(0 To 23) As Byte
 End Type

 Type KEYBDINPUT
 wVk As Integer
 wScan As Integer
 dwFlags As Long
 time As Long
 dwExtraInfo As Long
 End Type

 Const INPUT_KEYBOARD = 1

 Sub MySendKey(bkey As Long)
 '°Ñ¼Æbkey¶Ç¤J­n¼ÒÀÀ«öÁ䪺µêÀÀ½X§Y¥i¼ÒÀÀ«ö¤U«ü©wÁä
 Dim GInput(0 To 1) As GENERALINPUT
 Dim KInput As KEYBDINPUT
 KInput.wVk = bkey'§A­n¼ÒÀÀªº«öÁä
 KInput.dwFlags = 0 '«ö¤UÁä¼Ð»x
 GInput(0).dwType = INPUT_KEYBOARD
 CopyMemory GInput(0).xi(0), KInput, Len(KInput) '³o­Ó¨ç¼Æ¥Î¨Ó§â¤º¦s¤¤KInputªº¼Æ¾Ú½Æ»s¨ìGInput
 KInput.wVk = bkey
 KInput.dwFlags = KEYEVENTF_KEYUP'ÄÀ©ñ«öÁä
 GInput(1).dwType = INPUT_KEYBOARD 'ªí¥Ü¸Ó®ø®§¬°Áä½L®ø®§
 CopyMemory GInput(1).xi(0), KInput, Len(KInput)
 '¥H¤W¤u§@§â«ö¤UÁä©MÄÀ©ñÁä¦@2±øÁä½L®ø®§¥[¤J¨ìGInput¼Æ¾Úµ²ºc¤¤
 SendInput 2, GInput(0), Len(GInput(0)) '§âGInput¤¤¦s©ñªº®ø®§´¡¤J¨ì®ø®§¦C¶¤
 End Sub

°£¤F¥H¤W³o¨Ç¡A¥Î¥þ§½¹_¤l¤]¥i¥H¼ÒÀÀÁä½L®ø®§¡C ¦pªG§A¹ïwindows¤¤®ø®§¹_¤lªº¥Îªk¤w¸g¦³©ÒÁA¸Ñ¡A¨º»ò§A¥i¥H³q¹L³]¸m¤@­Ó¥þ§½HOOK¨Ó¼ÒÀÀÁä½L®ø®§¡A¤ñ¦p¡A§A¥i¥H¥ÎWH_JOURNALPLAYBACK³o­Ó¹_¤l¨Ó¼ÒÀÀ«öÁä¡C  WH_JOURNALPLAYBACK¬O¤@­Ó¨t²Î¯Åªº¥þ§½¹_¤l¡A¥¦©MWH_JOURNALRECORDªº¥\¯à¬O¬Û¹ïªº¡A±`¥Î¥¦­Ì¨Ó°O¿ý¨Ã­«¼½Áä½L¹«¼Ð¾Þ§@¡C  WH_JOURNALRECORD¹_¤l¥Î¨Ó±NÁä½L¹«¼Ðªº¾Þ§@©¾¹ê¦a°O¿ý¤U¨Ó¡A°O¿ý¤U¨Óªº¸ê°T¥i¥H«O¦s¨ìÀɤ¤¡A¦ÓWH_JOURNALPLAYBACK«h¥i¥H­«²{³o¨Ç¾Þ§@¡C ·íµM¥ç¥i¥H³æ¿W¨Ï¥ÎWH_JOURNALPLAYBACK¨Ó¼ÒÀÀÁä½L¾Þ§@¡C §A»Ý­n­º¥ýÁn©úSetWindowsHookEx¨ç¼Æ¡A¥¦¥i¥H¥Î¨Ó¦w¸Ë®ø®§¹_¤l¡G
 Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long,ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
¥ý¦w¸ËWH_JOURNALPLAYBACK³o­Ó¹_¤l¡AµM«á§A»Ý­n¦Û¤v¼g¤@­Ó¹_¤l¨ç¼Æ¡A¦b¨t²Î½Õ¥Î¥¦®É¡A§â§A­n¼ÒÀÀªº¨Æ¥ó¶Ç»¼µ¹¹_¤l°Ñ¼ÆlParam©Ò«ü¦VªºEVENTMSG°Ï°ì¡A´N¥i¥H¹F¨ì¼ÒÀÀ«öÁ䪺®ÄªG¡C ¤£¹L¥Î³o­Ó¹_¤l¼ÒÀÀÁä½L¨Æ¥ó¦³¤@­Ó°Æ§@¥Î¡A´N¬O¥¦·|Âê©w¯u¹êªº¹«¼ÐÁä½L¡A¤£¹L¦pªG§A´N¬O·Q¦b¼ÒÀÀªº®É­Ô¤£·|¨ü¯u¹êÁä½L¾Þ§@ªº·FÂZ¡A¨º»ò¥Î¥Î¥¦­Ë¬O­Ó¤£¿ùªº¥D·N¡C
 3.ÅX°Ê¯Å¼ÒÀÀ

¦pªG¤W­±ªº¤èªk§A³£¸Õ¹L¤F¡A¥i¬O§Aµo²{¥Ø¼Ðµ{¦¡«o¤´µM¹x©Tªº¤£±µ¨ü§A¼ÒÀÀªº®ø®§¡A´H~~~~~~~~~ÁÙ¦n¡A§ÚÁٳѤU³Ì«á¤@©Û¡A³o´N¬OÅX°Ê¯Å¼ÒÀÀ¡Gª½±µÅª¼gÁä½LªºµwÅé°ð¡I
¦³¤@¨Ç¨Ï¥ÎDirectX¤¶­±ªº¹CÀ¸µ{¦¡¡A¥¦­Ì¦bŪ¨úÁä½L¾Þ§@®É¶¹L¤Fwindowsªº®ø®§¾÷¨î¡A¦Ó¨Ï¥ÎDirectInput.³o¬O¦]¬°¦³¨Ç¹CÀ¸¹ï¹ê®É©Ê±±¨îªº­n¨D¤ñ¸û°ª¡A¤ñ¦pÁɨ®¹CÀ¸¡A­n¨D¥H³Ì§Ö³t«×ÅTÀ³Áä½L¿é¤J¡C ¦Ówindows®ø®§¥Ñ©ó¬O¶¤¦C§Î¦¡ªº¡A®ø®§¦b¶Ç»¼®É·|¦³¤£¤Ö©µ¿ð¡A¦³®É1¬íÄÁ¤]´N¶Ç»¼¤Q´X±ø®ø®§¡A³o­Ó³t«×¹F¤£¨ì¹CÀ¸ªº­n¨D¡C ¦ÓDirectInput«h¶¹L¤Fwindows®ø®§¡Aª½±µ»PÁä½LÅX°Êµ{¦¡¥´¥æ¹D¡A®Ä²v·íµM´£°ª¤F¤£¤Ö¡C ¦]¦¹¤]´N³y¦¨¡A¹ï³o¼Ëªºµ{¦¡µL½×¥ÎPostMessage©ÎªÌ¬Okeybd_event³£¤£·|¦³¤ÏÀ³¡A¦]¬°³o¨Ç¨ç¼Æ³£¦b¸û°ª¼h¡C ¹ï©ó³o¼Ëªºµ{¦¡¡A¥u¦n¥Îª½±µÅª¼gÁä½L°ðªº¤èªk¨Ó¼ÒÀÀµwÅ鍯¥ó¤F¡C ­n¥Î³o­Ó¤èªk¨Ó¼ÒÀÀÁä½L¡A»Ý­n¥ýÁA¸Ñ¤@¤UÁä½L½sµ{ªº¬ÛÃöª¾ÃÑ¡C
¦bDOS®É¥N¡A·í¥Î¤á«ö¤U©ÎªÌ©ñ¶}¤@­ÓÁä®É¡A´N·|²£¥Í¤@­ÓÁä½L¤¤Â_(¦pªGÁä½L¤¤Â_¬O¤¹³\ªº)¡A³o¼Ëµ{¦¡·|¸õÂà¨ìBIOS¤¤ªºÁä½L¤¤Â_³B²zµ{¦¡¥h°õ¦æ¡C ¥´¶}windowsªº³]³ÆºÞ²z¾¹¡A¥i¥H¬d¬Ý¨ìÁä½L±±¨î¾¹¥Ñ¨â­Ó°ð±±¨î¡C ¨ä¤¤&H60¬O¼Æ¾Ú°ð¡A¥i¥HŪ¥XÁä½L¼Æ¾Ú¡A¦Ó&H64¬O±±¨î°ð¡A¥Î¨Óµo¥X±±¨î«H¸¹¡C ¤]´N¬O¡A±q&H60¸¹°ð¥i¥HŪ¦¹Áä½Lªº«öÁä¸ê°T¡A·í±q³o­Ó°ðŪ¨ú¤@­Ó¦r¸`¡A¸Ó¦r¸`ªº§C7¦ì´N¬O«öÁ䪺±½´y½X¡A¦Ó°ª1¦ì«hªí¥Ü¬O«ö¤UÁäÁÙ¬OÄÀ©ñÁä¡C ·í«ö¤UÁä®É¡A³Ì°ª¦ì¬°0¡AºÙ¬°³q½X¡A·íÄÀ©ñÁä®É¡A³Ì°ª¦ì¬°1¡AºÙ¬°Â_½X¡C ¬JµM±q³o­Ó°ðŪ¼Æ¾Ú¥i¥HÀò±o«öÁä¸ê°T¡A¨º»ò¦V³o­Ó°ð¼g¤J¼Æ¾Ú´N¥i¥H¼ÒÀÀ«öÁä¤F¡I ¥Î¹LQbASIC4.5ªºªB¤Í¥i¯àª¾¹D¡AQB¤¤¦³­ÓOUT©R¥O¥i¥H¦V«ü©w°ð¼g¤J¼Æ¾Ú¡A¦ÓINP¨ç¼Æ¥i¥HŪ¨ú«ü©w°ðªº¼Æ¾Ú¡C ¨º§Ú­Ì¥ý¬Ý¬Ý¦pªG¥ÎQB¸Ó«ç»ò¼g¥N½X¡G
°²¦p§A·Q¼ÒÀÀ«ö¤U¤@­ÓÁä¡A³o­ÓÁ䪺±½´y½X¬°&H50¡A¨º´N³o¼Ë
 OUT &H64,&HD2 '§â¼Æ¾Ú&HD2µo°e¨ì&H64°ð¡C ³o¬O¤@­ÓKBC«ü¥O¡Aªí¥Ü±N­n¦VÁä½L¼g¤J¼Æ¾Ú
 OUT &H60,&H50 '§â±½´y½X&H50µo°e¨ì&H60°ð¡Aªí¥Ü¼ÒÀÀ«ö¤U±½´y½X¬°&H50ªº³o­ÓÁä<BR>¨º»ò­nÄÀ©ñ³o­ÓÁä©O¡H ¹³³o¼Ë¡Aµo°e¸ÓÁ䪺Â_½X¡G
 OUT &H64,&HD2 '§â¼Æ¾Ú&HD2µo°e¨ì&H64°ð¡C ³o¬O¤@­ÓKBC«ü¥O¡Aªí¥Ü±N­n¦VÁä½L¼g¤J¼Æ¾Ú
 OUT &H60,(&H50 OR &H80) '§â±½´y½X&H50»P¼Æ¾Ú&H80¶i¦æ©Î¹Bºâ¡A¥i¥H§â¥¦ªº°ª¦ì¸m1¡A±o¨ìÂ_½X¡Aªí¥ÜÄÀ©ñ³o­ÓÁä
¦n¤F¡A²{¦bªº°ÝÃD´N¬O¦bVB¤¤¦p¦ó¦V°ð¼g¤J¼Æ¾Ú¤F¡C ¦]¬°¦bwindows¤¤¡A´¶³qÀ³¥Îµ{¦¡¬OµLÅv¾Þ§@°ðªº¡A©ó¬O§Ú­Ì´N»Ý­n¤@­ÓÅX°Êµ{¦¡¨ÓÀ°§U§Ú­Ì¹ê²{¡C ¦b³o¸Ì§Ú­Ì¥i¥H¨Ï¥Î¤@­Ó²Õ¥óWINIO¨Ó§¹¦¨Åª¼g°ð¾Þ§@¡C ¤°»ò¬OWINIO¡H  WINIO¬O¤@­Ó¥þ§K¶Oªº¡BµL»Ýµù¥Uªº¡B§t®Ú·½µ{¦¡ªºWINDOWS2000°ð¾Þ§@ÅX°Êµ{¦¡²Õ¥ó(¥i¥H¨ìhttp://www.internals.com/¤W¥h¤U¸ü)¡C ¥¦¤£¶È¥i¥H¾Þ§@°ð¡AÁÙ¥i¥H¾Þ§@¤º¦s¡F¤£¶È¯à¦bVB¤U¥Î¡AÁÙ¥i¥H¦bDELPHI¡BVCµ¥¨ä¥LÀô¹Ò¤U¨Ï¥Î¡A©Ê¯à¯S§OÀu²§¡C ¤U¸ü¸Ó²Õ¥ó¡A¸ÑÀ£ÁY«á¥i¥H¬Ý¨ì´X­ÓÀɧ¨¡A¨ä¤¤ReleaseÀɧ¨¤Uªº3­ÓÀÉ´N¬O§Ú­Ì»Ý­nªº¡A³o3­ÓÀɬOWinIo.sys(¥Î©ówin xp¤UªºÅX°Êµ{¦¡)¡AWINIO.VXD(¥Î©ówin 98¤UªºÅX°Êµ{¦¡)¡A WinIo.dll(«Ê¸Ë¨ç¼Æªº°ÊºAÃì±µ®w)¡A§Ú­Ì¥u»Ý­n½Õ¥ÎWinIo.dll¤¤ªº¨ç¼Æ¡AµM«áWinIo.dll´N·|¦w¸Ë¨Ã½Õ¥ÎÅX°Êµ{¦¡¨Ó§¹¦¨¬ÛÀ³ªº¥\¯à¡C ­È±o¤@´£ªº¬O³o­Ó²Õ¥ó§¹¥þ¬Oºñ¦âªº¡AµL»Ý¦w¸Ë¡A§A¥u»Ý­n§â³o3­ÓÀɽƻs¨ì»P§Aªºµ{¦¡¬Û¦PªºÀɧ¨¤U´N¥i¥H¨Ï¥Î¤F¡C ¥Îªk«Ü²³æ¡A¥ý¥Î¸Ì­±ªºInitializeWinIo¨ç¼Æ¦w¸ËÅX°Êµ{¦¡¡AµM«á´N¥i¥H¥ÎGetPortVal¨ÓŪ¨ú°ð©ÎªÌ¥ÎSetPortVal¨Ó¼g¤J°ð¤F¡C ¦n¡AÅý§Ú­Ì¨Ó°µ¤@­ÓÅX°Ê¯ÅªºÁä½L¼ÒÀÀ§a¡C ¥ý§âwinioªº3­ÓÀÉ«þ¨©¨ì§Aªºµ{¦¡ªºÀɧ¨¤U¡AµM«á¦bVB¤¤·s«Ø¤@­Ó¤uµ{¡A²K¥[¤@­Ó¼Ò¶ô¡A¦b¼Ò¶ô¤¤¥[¤J¤U­±ªºwinio¨ç¼ÆÁn©ú:

 Declare Function MapPhysToLin Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysSize As Long, ByRef PhysMemHandle) As Long
 Declare Function UnmapPhysicalMemory Lib "WinIo.dll" (ByVal PhysMemHandle, ByVal LinAddr) As Boolean
 Declare Function GetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByRef PhysVal As Long) As Boolean
 Declare Function SetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysVal As Long) As Boolean
 Declare Function GetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByRef PortVal As Long, ByVal bSize As Byte) As Boolean
 Declare Function SetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByVal PortVal As Long, ByVal bSize As Byte) As Boolean
 Declare Function InitializeWinIo Lib "WinIo.dll" () As Boolean
 Declare Function ShutdownWinIo Lib "WinIo.dll" () As Boolean
 Declare Function InstallWinIoDriver Lib "WinIo.dll" (ByVal DriverPath As String, ByVal Mode As Integer) As Boolean
 Declare Function RemoveWinIoDriver Lib "WinIo.dll" () As Boolean

 ' ------------------------------------¥H¤W¬OWINIO¨ç¼ÆÁn©ú--------- ----------------------------------

 Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

 '-----------------------------------¥H¤W¬OWIN32 API¨ç¼ÆÁn©ú--------- --------------------------------

¦A²K¥[¤UÄѳo­Ó¹Lµ{¡G
 Sub KBCWait4IBE() 'µ¥«ÝÁä½L½w½Ä°Ï¬°ªÅ
 Dim dwVal As Long
 Do
 GetPortVal &H64, dwVal, 1
 '³o¥yªí¥Ü±q&H64°ðŪ¨ú¤@­Ó¦r¸`¨Ã§âŪ¥Xªº¼Æ¾Ú©ñ¨ìÅܶqdwVal¤¤
 'GetPortVal¨ç¼Æªº¥Îªk¬OGetPortVal°ð¸¹,¦s©ñŪ¥X¼Æ¾ÚªºÅܶq,Ū¤Jªºªø«×
 Loop While (dwVal And &H2)
 End Sub
¤W­±ªº¬O¤@­Ó®Ú¾ÚKBC³W½d¼gªº¹Lµ{¡A¥¦ªº§@¥Î¬O¦b¦VÁä½L°ð¼g¤J¼Æ¾Ú«eµ¥«Ý¤@¬q®É¶¡¡A«á­±±N·|¥Î¨ì¡C
µM«á¦A²K¥[¦p¤U¹Lµ{¡A³o2­Ó¹Lµ{¥Î¨Ó¼ÒÀÀ«öÁä¡G

 Public Const KBC_KEY_CMD = &H64 'Áä½L©R¥O°ð
 Public Const KBC_KEY_DATA = &H60 'Áä½L¼Æ¾Ú°ð

 Sub MyKeyDown(ByVal vKeyCoad As Long)
 '³o­Ó¥Î¨Ó¼ÒÀÀ«ö¤UÁä¡A°Ñ¼ÆvKeyCoad¶Ç¤J«öÁ䪺µêÀÀ½X
 Dim btScancode As Long
 btScancode = MapVirtualKey(vKeyCoad, 0)
  
 KBCWait4IBE 'µo°e¼Æ¾Ú«eÀ³¸Ó¥ýµ¥«ÝÁä½L½w½Ä°Ï¬°ªÅ
 SetPortVal KBC_KEY_CMD, &HD2, 1 'µo°eÁä½L¼g¤J©R¥O
 'SetPortVal¨ç¼Æ¥Î©ó¦V°ð¼g¤J¼Æ¾Ú¡A¥¦ªº¥Îªk¬OSetPortVal°ð¸¹,±ý¼g¤Jªº¼Æ¾Ú¡A¼g¤J¼Æ¾Úªºªø«×
 KBCWait4IBE
 SetPortVal KBC_KEY_DATA, btScancode, 1'¼g¤J«öÁä«H®§,«ö¤UÁä
   
 End Sub

 Sub MyKeyUp(ByVal vKeyCoad As Long)
 '³o­Ó¥Î¨Ó¼ÒÀÀÄÀ©ñÁä¡A°Ñ¼ÆvKeyCoad¶Ç¤J«öÁ䪺µêÀÀ½X
 Dim btScancode As Long
 btScancode = MapVirtualKey(vKeyCoad, 0)
  
 KBCWait4IBE 'µ¥«ÝÁä½L½w½Ä°Ï¬°ªÅ
 SetPortVal KBC_KEY_CMD, &HD2, 1'µo°eÁä½L¼g¤J©R¥O
 KBCWait4IBE
 SetPortVal KBC_KEY_DATA, (btScancode Or &H80), 1'¼g¤J«öÁä«H®§¡AÄÀ©ñÁä

 End Sub


©w¸q¤F¤W­±ªº¹Lµ{«á¡A´N¥i¥H¥Î¥¦¨Ó¼ÒÀÀÁä½L¿é¤J¤F¡C ¦bµ¡Åé¼Ò¶ô¤¤²K¥[¤@­Ó©w®É¾¹±±¨î¶µ¡AµM«á¥[¤J¥H¤U¥N½X¡G


 Private Sub Form_Load()

 If InitializeWinIo = False Then
 '¥ÎInitializeWinIo¨ç¼Æ¥[¸üÅX°Êµ{¦¡¡A¦pªG¦¨¥\·|ªð¦^true¡A§_«hªð¦^false
 MsgBox "ÅX°Êµ{¦¡¥[¸ü¥¢±Ñ!"
 Unload Me
 End If
Timer1.Interval=3000
Timer1.Enabled=True
 End Sub

 Private Sub Form_Unload(Cancel As Integer)
ShutdownWinIo 'µ{¦¡µ²§ô®É°O±o¥ÎShutdownWinIo¨ç¼Æ¨ø¸üÅX°Êµ{¦¡
End Sub

Private Sub Timer1_Timer()
Dim VK_A as Long = &H41
MyKeyDown VK_A   
MyKeyUp VK_A    '¼ÒÀÀ«ö¤U¨ÃÄÀ©ñAÁä
End Sub
[/QUOTE]
¹B¦æ¤W­±ªºµ{¦¡¡A´N·|¨C¹j3¬íÄÁ¼ÒÀÀ«ö¤U¤@¦¸AÁä¡A¸Õ¸Õ¬Ý¡A«ç»ò¼Ë¡A¬O¤£¬O¹ï©Ò¦³µ{¦¡³£¦³®ÄªG¤F¡H
»Ý­nª`·Nªº°ÝÃD¡G
­n¦bVBªº½Õ¸Õ¼Ò¦¡¤U¨Ï¥ÎWINIO¡A»Ý­n§â¨º3­ÓÀÉ«þ¨©¨ìVBªº¦w¸Ë¥Ø¿ý¤¤¡C
Áä½L¤W¦³¨ÇÁäÄÝ©óÂX®iÁä(¤ñ¦pÁä½L¤Wªº¤è¦VÁä´N¬OÂX®iÁä)¡A¹ï©óÂX®iÁ䤣À³¸Ó¥Î¤W­±ªºMyKeyDown©MMyKeyUp¹Lµ{¨Ó¼ÒÀÀ¡A¥i¥H¨Ï¥Î¤U­±ªº2­Ó¹Lµ{¨Ó·Ç½T¼ÒÀÀÂX®iÁä¡G
 
Sub MyKeyDownEx(ByVal vKeyCoad As Long)   '¼ÒÀÀÂX®iÁä«ö¤U¡A°Ñ¼ÆvKeyCoad¬OÂX®iÁ䪺µêÀÀ½X
Dim btScancode As Long
btScancode = MapVirtualKey(vKeyCoad, 0)

    KBCWait4IBE   'µ¥«ÝÁä½L½w½Ä°Ï¬°ªÅ
    SetPortVal KBC_KEY_CMD, &HD2, 1     'µo°eÁä½L¼g¤J©R¥O
    KBCWait4IBE
    SetPortVal KBC_KEY_DATA, &HE0, 1  '¼g¤JÂX®iÁä¼Ð»x¸ê°T
   
   
    KBCWait4IBE   'µ¥«ÝÁä½L½w½Ä°Ï¬°ªÅ
    SetPortVal KBC_KEY_CMD, &HD2, 1     'µo°eÁä½L¼g¤J©R¥O
    KBCWait4IBE
    SetPortVal KBC_KEY_DATA, btScancode, 1  '¼g¤J«öÁä¸ê°T,«ö¤UÁä
   
   
End Sub


Sub MyKeyUpEx(ByVal vKeyCoad As Long)   '¼ÒÀÀÂX®iÁä¼u°_
Dim btScancode As Long
btScancode = MapVirtualKey(vKeyCoad, 0)

    KBCWait4IBE   'µ¥«ÝÁä½L½w½Ä°Ï¬°ªÅ
    SetPortVal KBC_KEY_CMD, &HD2, 1     'µo°eÁä½L¼g¤J©R¥O
    KBCWait4IBE
    SetPortVal KBC_KEY_DATA, &HE0, 1  '¼g¤JÂX®iÁä¼Ð»x¸ê°T
   
   
    KBCWait4IBE   'µ¥«ÝÁä½L½w½Ä°Ï¬°ªÅ
    SetPortVal KBC_KEY_CMD, &HD2, 1     'µo°eÁä½L¼g¤J©R¥O
    KBCWait4IBE
    SetPortVal KBC_KEY_DATA, (btScancode Or &H80), 1  '¼g¤J«öÁä¸ê°T¡AÄÀ©ñÁä
   
End Sub
 
ÁÙÀ³¸Óª`·Nªº¬O¡A¦pªG­n±qÂX®iÁäÂà´«¨ì´¶³qÁä¡A¨º»ò´¶³qÁ䪺KeyDown¨Æ¥óÀ³¸Óµo°e¨â¦¸¡C¤]´N¬O»¡¡A¦pªG§Ú·Q¼ÒÀÀ¥ý«ö¤U¤@­ÓÂX®iÁä¡A¦A«ö¤U¤@­Ó´¶³qÁä¡A¨º»ò´NÀ³¸Ó¦V°ðµo°e¨â¦¸¸Ó´¶³qÁä³Q«ö¤Uªº¸ê°T¡C¤ñ¦p¡A§Ú·Q¼ÒÀÀ¥ý«ö¤U¥ª¤è¦VÁä¡A¦A«ö¤UªÅ¥ÕÁä³o­Ó¨Æ¥ó¡A¥Ñ©ó¥ª¤è¦VÁä¬OÂX®iÁä¡AªÅ¥ÕÁä¬O´¶³qÁä¡A¨º»ò¬yµ{´NÀ³¸Ó¬O³o¼Ëªº¡G
[QUOTE]MyKeyDownEx VK_LEFT   '«ö¤U¥ª¤è¦VÁä
Sleep 200             '©µ®É200²@¬í
MyKeyUpEx VK_LEFT     'ÄÀ©ñ¥ª¤è¦VÁä

Sleep 500
MyKeyDown VK_SPACE   '«ö¤UªÅ¥ÕÁä¡Aª`·N­nµo°e¨â¦¸
MyKeyDown VK_SPACE
Sleep 200
MyKeyUp VK_SPACE     'ÄÀ©ñªÅ¥ÕÁä
¦n¤F¡A¬Û«H¨ì³oùØ¡A§AªºÃþ¤ñ«öÁäµ{¦¡¤]´N®t¤£¦h¤F¡A´ú¸Õ¤@¤U¡A¬O¤£¬O«Ü¦³®Ä©O¡A¼K¼K~~~~
WINIO²Õ¥óªº¤U¸ü¦ì§}¡G http://www.114vip.com.cn/download/winio.zip
4.°©¦Ç¯Å¼ÒÀÀ
    ¤èªk3ºâ¬O«Ü©³¼hªºÃþ¤ñ¤F¡A§Ú²{¦bÁÙ¨S¦³µo²{¦³¥¦Ãþ¤ñµL®Äªºµ{¦¡¡C¦ý¬O¦pªG§A¥ÎºÉ¤W­±©Ò¦³ªº¤èªk¡A¤´µMµL®Äªº¸Ü¡A¨º»òÁÙ¦³³Ì«á¤@­Ó¤èªk¡Aµ´¹ï¹ï¥ô¦óµ{¦¡³£·|¦³®Ä¡A¨º´N¬O¡G§âÁä½L®³¥X¨Ó¡A¦Ñ¦Ñ¹ê¹ê¦a«ö¤U¥h§a¡C ~~~~

 


¡¹Kit¡û..

 [ ³X«È¯d¨¥(0) ] [ ½s¿è¤é»x ] [ ¤À¨É¦ÜFACEBOOK ]  
MySelf
¼ÊºÙ¡G Tikwal
©Ê§O¡G ¨k
°ê®a¡G ­»´ä
¦a°Ï¡G ¤¸®Ô°Ï
++¤ô´¹­µ¼Ö²°++
Mariage D'Amour
³Ìªñ³X«È
³Ìªñ¨S¦³³X«È
³X«È¯d¨¥
³Ìªñ¤T­Ó¤ë©|µL¥ô¦ó¯d¨¥
³Ì·s¤å³¹
Ũì½Ð¶¼³¥ lol
[VB.Net] ¤¤°ê¶H´Ñ
[.Net] Classes / Imp...
[Âà][API]4­Ókeybd ¼Ò...
[VB2010]±`ª±ªº, ±µ¤ô...
¤å³¹¤ÀÃþ
¥þ³¡ (32)
API (5)
Âø½Í (2)
DataBase (2)
M$ (9)
php (1)
VB.Net (5)
¯Âºé·d¯º (4)
ºô­¶ (5)
¥¼¤ÀÃþ (1)
¤é»x²Î­p
¤å³¹Á`¼Æ¡G 32
¯d¨¥Á`¼Æ¡G 28
¤µ¤é¤H®ð¡G 4
²Ö¿n¤H®ð¡G 1830