Áä½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 ³Ì«á¡An¬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®ø®§¤@©wn¥Î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§Anµo°e®ø®§ªº¥Ø¼Ðµ{¦¡¤W¬YÓ±±¨î¶µªº±±¨î½X¡A°Ñ¼ÆwMsg¬O®ø®§ªºÃþ«¬¡Aªí¥Ü§Anµo°e¤°»ò¼Ëªº®ø®§¡A³Ì«áwParam©MlParam³o¨âӰѼƬOÀH®ø®§ªþ¥[ªº¼Æ¾Ú¡A¨ãÅ餺®en¥Ñ®ø®§¨M©w¡C
¦A¨Ó¬Ý¬ÝwMsg³oӰѼơAn¼ÒÀÀ«öÁä´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©wnµo°e¥H¤W´XÓÁä½L®ø®§¡A¨º»ò¦A¨Ó¬Ý¬Ý¦p¦ó½T©wÁä½L®ø®§¤¤ªºwParam©MlParam³o¨âӰѼơC ¦b¤@ÓÁä½L®ø®§¤¤¡AwParam°Ñ¼Æªº§t¸q¸û²³æ¡A¥¦ªí¥Ü§Anµo°eªºÁä½L¨Æ¥óªº«öÁäµêÀÀ½X¡A¤ñ¦p§An¹ï¥Ø¼Ðµ{¦¡¼ÒÀÀ«ö¤UAÁä¡A¨º»òwParam°Ñ¼ÆªºÈ´N³]¬°VK_A ,¦Ü©ólParam³oӰѼƴN¤ñ¸û½ÆÂø¤F¡A¦]¬°¥¦¥]§t¤F¦hÓ¸ê°T¡A¤@¯ë¥i¥H§â¥¦³]¬°0¡A¦ý¬O¦pªG§A·Qn§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¶}©lp¼Æ)¡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ªGn¦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´Nn¬Ý¨ãÅ骺±¡ª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 ¤ñ¦pn¼ÒÀÀ«ö¤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ªGn¼ÒÀÀ«ö¤U¥\¯àÁä«ç»ò°µ©O¡H ¤ñ¦pn«ö¤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´Nn¥Î¤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 YnÀò±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§â§An¼ÒÀÀªºÁä½L®ø®§¸Ë¶i¥h¡AµM«á¶Çµ¹¥¦¡C ¬°¤F¤è«K°_¨£¡A§â¥¦°µ¦b¤@Ó¹Lµ{¸Ì±¡An¥Îªº®ÉÔª½±µ½Õ¥Î¦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¶Ç¤Jn¼ÒÀÀ«öÁ䪺µêÀÀ½X§Y¥i¼ÒÀÀ«ö¤U«ü©wÁä
Dim GInput(0 To 1) As GENERALINPUT
Dim KInput As KEYBDINPUT
KInput.wVk = bkey'§An¼ÒÀÀªº«öÁä
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§â§An¼ÒÀÀªº¨Æ¥ó¶Ç»¼µ¹¹_¤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À¸¡An¨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ªí¥Ü±Nn¦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ªí¥Ü±Nn¦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ªGn±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ª`·Nnµ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¡û..