°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡
API¡¡º¯Êý¶¼Ð´³É¶ÔÓ¦Java¡¡ÐÎʽ¡£Î¢Èí¿¼Âǵ½ÁËÕâ¸öÎÊÌ⣬·¢ÐÐÁËÒ»¸öJava¡¡°ü£¬¿Éͨ¹ý¡¡J/Direct¡¡½«¡¡Win32¡¡¡¡
API¡¡Ó³Éä³É¡¡Java¡¡Àà¡£Õâ¸ö°üµÄÃû×Ö½Ð×÷¡¡¡£ms¡£win32¡£°²×°Java¡¡SDK¡¡2¡£0¡¡Ê±£¬ÈôÔÚ°²×°Ñ¡ÏîÖнøÐÐÁËÏàÓ¦¡¡
µÄÉèÖã¬Õâ¸ö°ü¾Í»á°²×°µ½ÎÒÃǵÄÀà·¾¶ÖС£Õâ¸ö°üÓÉ´óÁ¿Java¡¡À๹³É£¬ËüÃÇÍêÕûÔÙÏÖÁË¡¡Win32¡¡API¡¡µÄ³£¡¡
Êý¡¢Êý¾ÝÀàÐÍÒÔ¼°º¯Êý¡£°üÈÝÄÜÁ¦×î´óµÄÈý¸öÀàÊÇ¡¡User32¡£class£¬Kernel¡£class¡¡ÒÔ¼°Gdi32¡£class¡£ËüÃǰü¡¡
º¬µÄÊÇWin32¡¡API¡¡µÄºËÐÄÄÚÈÝ¡£ÎªÊ¹ÓÃËüÃÇ£¬Ö»ÐèÔÚ×Ô¼ºµÄ¡¡Java¡¡´úÂëÀïµ¼Èë¼´¿É¡£Ç°ÃæµÄShowMsgBox¡¡Ê¾Àý¡¡
¿ÉÓá£ms¡£win32¡¡¸Äд³ÉÏÂÃæÕâ¸öÑù×Ó£¨ÕâÀïÒ²¿¼Âǵ½ÁËÓøüÇ¡µ±µÄ·½Ê½Ê¹ÓÃUnsatisfiedLinkError£©£º¡¡¡¡
¡¡¡¡
import¡¡¡£ms¡£win32¡£*£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡657¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡659¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡
public¡¡class¡¡UseWin32Package¡¡£û¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String¡¡args£§£§£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡try¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡User32¡£MessageBeep£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡winm¡£MB_ICONEXCLAMATION£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡User32¡£MessageBox£¨0£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¨Created¡¡by¡¡the¡¡MessageBox£¨£©¡¡Win32¡¡func¡¨£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¨Thinking¡¡in¡¡Java¡¨£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡winm¡£MB_OKCANCEL¡¡£ü¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡winm¡£MB_ICONEXCLAMATION£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡catch£¨UnsatisfiedLinkError¡¡e£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Can¡¯t¡¡link¡¡Win32¡¡API¡¨£©£»¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨e£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
Java¡¡°üÊÇÔÚµÚÒ»Ðе¼ÈëµÄ¡£ÏÖÔÚ£¬¿ÉÔÚ²»½øÐÐÆäËûÉùÃ÷µÄǰÌáϵ÷ÓÃMessageBeep£¨£©ºÍ¡¡MessageBox£¨£©º¯Êý¡£¡¡
ÔÚMessageBeep£¨£©ÀÎÒÃǿɿ´µ½°üµ¼ÈëʱҲÉùÃ÷ÁË¡¡Win32¡¡³£Êý¡£ÕâЩ³£ÊýÊÇÔÚ´óÁ¿Java¡¡½Ó¿ÚÀﶨÒåµÄ£¬È«¡¡
²¿ÃüÃûΪwinx¡¡£¨x¡¡´ú±íÓûʹÓÃÖ®³£ÊýµÄÊ××Öĸ£©¡£¡¡¡¡
д×÷±¾Êéʱ£¬¡£ms¡£win32¡¡°üµÄ¿ª·¢ÈÔδÕýʽÍê³É£¬µ«Òѿɿ°Ê¹Óᣡ¡¡¡
A¡£3¡£3¡¡¡¡»ã¼¯¡¡¡¡
¡¡¡°»ã¼¯¡±£¨Marshaling£©ÊÇÖ¸½«Ò»¸öº¯Êý×Ô±äÁ¿´ÓËüÔʼµÄ¶þ½øÖÆÐÎʽת»»³ÉÓëÓïÑÔÎ޹صÄijÖÖÐÎʽ£¬ÔÙ½«¡¡
ÕâÖÖͨÓÃÐÎʽת»»³ÉÊʺϵ÷Óú¯Êý²ÉÓõĶþ½øÖƸñʽ¡£ÔÚÇ°ÃæµÄÀý×ÓÖУ¬ÎÒÃǵ÷ÓÃÁËMessageBox£¨£©º¯Êý£¬²¢¡¡
ÏòËü´«µÝÁËÁ½¸ö×Ö´®¡£MessageBox£¨£©ÊǸöC¡¡º¯Êý£¬¶øÇÒ¡¡Java¡¡×Ö´®µÄ¶þ½øÖƲ¼¾ÖÓëC¡¡×Ö´®²¢²»Ïàͬ¡£µ«¾¡¹ÜÈç¡¡
´Ë£¬×Ô±äÁ¿ÈÔ»ñµÃÁËÕýÈ·µÄ´«µÝ¡£ÕâÊÇÓÉÓÚÔÚµ÷Óá¡C¡¡´úÂëǰ£¬J/Direct¡¡ÒѰïÎÒÃÇ¿¼Âǵ½Á˽«Java¡¡×Ö´®×ª»»¡¡
³ÉC¡¡×Ö´®µÄÎÊÌâ¡£ÕâÖÖÇé¿öÊʺÏËùÓбê×¼µÄJava¡¡ÀàÐÍ¡£ÏÂÃæÕâÕűí¸ñ×ܽáÁ˼òµ¥Êý¾ÝÀàÐ͵ÄĬÈ϶ÔÓ¦¹ØÏµ£º¡¡¡¡
¡¡¡¡
Java¡¡C¡¡¡¡
¡¡¡¡
byte¡¡BYTE¡¡»òCHAR¡¡¡¡
short¡¡SHORT»ò¡¡WORD¡¡¡¡
int¡¡INT£¬UINT¡¡£¬LONG£¬ULONG¡¡»ò¡¡DWORD¡¡¡¡
char¡¡TCHAR¡¡¡¡
long¡¡__int64¡¡¡¡
float¡¡Float¡¡¡¡
double¡¡Double¡¡¡¡
boolean¡¡BOOL¡¡¡¡
String¡¡LPCTSTR¡¡£¨Ö»ÔÊÐíÔÚOLE¡¡Ä£Ê½ÖÐ×÷Ϊ·µ»ØÖµ£©¡¡¡¡
byte£§£§¡¡BYTE¡¡*¡¡¡¡
short£§£§¡¡WORD¡¡*¡¡¡¡
char£§£§¡¡TCHAR¡¡*¡¡¡¡
int£§£§¡¡DWORD¡¡*¡¡¡¡
¡¡¡¡
Õâ¸öÁÐ±í»¹¿É¼ÌÐøÏÂÈ¥£¬µ«ÒѺÜÄÜ˵Ã÷ÎÊÌâÁË¡£´ó¶àÊýÇé¿öÏ£¬ÎÒÃDz»±Ø¹ØÐÄÓë¼òµ¥Êý¾ÝÀàÐÍÖ®¼äµÄת»»ÎÊ¡¡
Ìâ¡£µ«Ò»µ©±ØÐë´«µÝÓû§×Ô¶¨ÒåÀàÐ͵Ä×Ô±äÁ¿£¬Çé¿ö¾ÍÁ¢¼´±äµÃ²»Í¬ÁË¡£ÀýÈ磬¿ÉÄÜÐèÒª´«µÝÒ»¸ö½á¹¹»¯¡¡
µÄ¡¢Óû§×Ô¶¨ÒåµÄÊý¾ÝÀàÐÍ£¬»òÕßÐèÒª°ÑÒ»¸öÖ¸Õë´«¸øÔʼÄÚ´æÇøÓò¡£ÔÚÕâЩÇé¿öÏ£¬ÓÐÒ»Ð©ÌØÊâµÄ±àÒëÒý¡¡
µ¼ÃüÁî±ê¼ÇÒ»¸öJava¡¡À࣬ʹÆäÄÜ×÷Ϊһ¸öÖ¸Õë´«¸ø½á¹¹£¨@dll¡£struct¡¡Òýµ¼ÃüÁ¡£Óû֪ʹÓÃÕâЩ¹Ø¼ü×ֵġ¡
ϸ½Ú£¬Çë²Î¿¼²úÆ·Îĵµ¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡658¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡660¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
A¡£3¡£4¡¡¡¡±àд»Øµ÷º¯Êý¡¡¡¡
ÓÐЩWin32¡¡API¡¡º¯ÊýÒªÇó½«Ò»¸öº¯ÊýÖ¸Õë×÷Ϊ×Ô¼ºµÄ²ÎÊýʹÓá£Windows¡¡API¡¡º¯ÊýËæºó¾Í¿ÉÒÔµ÷ÓÃ×Ô±äÁ¿º¯¡¡
Êý£¨Í¨³£ÊÇÔÚÒÔºó·¢ÉúÌØ¶¨µÄʼþʱ£©¡£ÕâÒ»¼¼Êõ¾Í½Ð×÷¡°»Øµ÷º¯Êý¡±¡£»Øµ÷º¯ÊýµÄÀý×Ó°üÀ¨´°¿Ú½ø³ÌÒÔ¼°¡¡
ÎÒÃÇÔÚ´òÓ¡¹ý³ÌÖÐÉèÖõĻص÷£¨Îªºǫ́´òÓ¡³ÌÐòÌṩ»Øµ÷º¯ÊýµÄµØÖ·£¬Ê¹ÆäÄܸüÐÂ״̬£¬²¢ÔÚ±ØÒªµÄʱºòÖС¡
Ö¹´òÓ¡£©¡£¡¡¡¡
ÁíÒ»¸öÀý×ÓÊÇAPI¡¡º¯ÊýEnumWindows£¨£©¡¡£¬ËüÄÜö¾ÙĿǰϵͳÄÚËùÓж¥¼¶´°¿Ú¡£EnumWindows£¨£©ÒªÇó»ñȡһ¸öº¯¡¡
ÊýÖ¸Õë×÷Ϊ×Ô¼ºµÄ²ÎÊý£¬È»ºóËÑË÷ÓÉWindows¡¡ÄÚ²¿Î¬»¤µÄÒ»¸öÁÐ±í¡£¶ÔÓÚÁбíÄÚµÄÿ¸ö´°¿Ú£¬Ëü¶¼»áµ÷Óûء¡
µ÷º¯Êý£¬½«´°¿Ú¾ä±ú×÷Ϊһ¸ö×Ô±äÁ¿´«¸ø»Øµ÷¡£¡¡¡¡
ΪÁËÔÚJava¡¡Àï´ïµ½Í¬ÑùµÄÄ¿µÄ£¬±ØÐëʹÓá¡¡£ms¡£dll¡¡°üÀïµÄ¡¡Callback¡¡Àà¡£ÎÒÃÇ´Ó¡¡Callback¡¡Àï¼Ì³Ð£¬²¢È¡¡¡
Ïûcallback£¨£©¡£Õâ¸ö·½·¨Ö»Äܽӽüint¡¡²ÎÊý£¬²¢»á·µ»Ø¡¡int»òvoid¡£·½·¨Ç©ÃûºÍ¾ßÌåµÄʵʩȡ¾öÓÚʹÓÃÕâ¸ö¡¡
»Øµ÷µÄWindows¡¡API¡¡º¯Êý¡£¡¡¡¡
ÏÖÔÚ£¬ÎÒÃÇÒª½øÐеÄÈ«²¿¹¤×÷¾ÍÊÇ´´½¨Õâ¸öCallback¡¡ÑÜÉúÀàµÄÒ»¸öʵÀý£¬²¢½«Æä×÷Ϊº¯ÊýÖ¸Õë´«µÝ¸øAPI¡¡º¯¡¡
Êý¡£Ëæºó£¬J/Direct¡¡»á°ïÖúÎÒÃÇ×Ô¶¯Íê³ÉÊ£ÓàµÄ¹¤×÷¡£¡¡¡¡
ÏÂÃæÕâ¸öÀý×Óµ÷ÓÃÁËWin32¡¡API¡¡º¯ÊýEnumWindows£¨£©¡¡£»EnumWindowsProc¡¡ÀàÀïµÄ¡¡callback£¨£©·½·¨»á»ñȡÿ¸ö¡¡
¶¥¼¶´°¿ÚµÄ¾ä±ú£¬»ñÈ¡±êÌâÎÄ×Ö£¬²¢½«Æä´òÓ¡µ½¿ØÖÆÌ¨´°¿Ú¡£¡¡¡¡
¡¡¡¡
import¡¡¡£ms¡£dll¡£*£»¡¡¡¡
import¡¡¡£ms¡£win32¡£*£»¡¡¡¡
¡¡¡¡
class¡¡EnumWindowsProc¡¡extends¡¡Callback¡¡£û¡¡¡¡
¡¡¡¡public¡¡boolean¡¡callback£¨int¡¡hwnd£»¡¡int¡¡lparam£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡StringBuffer¡¡text¡¡=¡¡new¡¡StringBuffer£¨50£©£»¡¡¡¡
¡¡¡¡¡¡¡¡User32¡£GetWindowText£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡hwnd£»¡¡text£»¡¡text¡£capacity£¨£©£«1£©£»¡¡¡¡
¡¡¡¡¡¡¡¡if£¨text¡£length£¨£©¡¡£¡=¡¡0£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨text£©£»¡¡¡¡
¡¡¡¡¡¡¡¡return¡¡true£»¡¡¡¡//¡¡to¡¡continue¡¡enumeration¡£¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
public¡¡class¡¡ShowCallback¡¡£û¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String¡¡args£§£§£©¡¡¡¡
¡¡¡¡throws¡¡InterruptedException¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡boolean¡¡ok¡¡=¡¡User32¡£EnumWindows£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡new¡¡EnumWindowsProc£¨£©£»¡¡0£©£»¡¡¡¡
¡¡¡¡¡¡¡¡if£¨£¡ok£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£err¡£println£¨¡¨EnumWindows¡¡failed¡£¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡Thread¡£currentThread£¨£©¡£sleep£¨3000£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
¶Ô¡¡sleep£¨£©µÄµ÷ÓÃÔÊÐí´°¿Ú½ø³ÌÔÚmain£¨£©Í˳öǰÍê³É¡£¡¡¡¡
A¡£3¡£5¡¡¡¡ÆäËû¡¡J/Direct¡¡ÌØÐÔ¡¡¡¡
ͨ¹ý@dll¡£import¡¡Òýµ¼ÃüÁîÄÚµÄÐ޸ķû£¨±ê¼Ç£©£¬»¹¿ÉÓõ½¡¡J/Direct¡¡µÄÁíÁ½ÏîÌØÐÔ¡£µÚÒ»ÏîÊǶÔOLE¡¡º¯ÊýµÄ¡¡
¼ò»¯·ÃÎÊ£¬µÚ¶þÏîÊÇÑ¡ÔñAPI¡¡º¯ÊýµÄANSI¡¡¼°¡¡Unicode¡¡°æ±¾¡£¡¡¡¡
¸ù¾ÝÔ¼¶¨£¬ËùÓÐOLE¡¡º¯Êý¶¼»á·µ»ØÀàÐÍΪHRESULT¡¡µÄÒ»¸öÖµ£¬ËüÊÇÓÉ¡¡¡¡¶¨ÒåµÄÒ»¸ö½á¹¹»¯ÕûÊýÖµ¡£ÈôÔÚ¡¡
¡¡ÄÇÒ»¼¶±àд³ÌÐò£¬²¢Ï£Íû´ÓÒ»¸öOLE¡¡º¯ÊýÀï·µ»ØÄ³Ð©²»Í¬µÄ¶«Î÷£¬¾Í±ØÐ뽫һ¸öÌØÊâµÄÖ¸Õë´«µÝ¸øËü¡ª¡¡
¡ª¸ÃÖ¸ÕëÖ¸Ïòº¯Êý¼´½«ÔÚÆäÖÐÌî³äÊý¾ÝµÄÄǸöÄÚ´æÇøÓò¡£µ«ÔÚ¡¡Java¡¡ÖУ¬ÎÒÃÇûÓÐÖ¸Õë¿ÉÓã»´ËÍ⣬ÕâÖÖ·½·¨¡¡
²¢²»¼òÁ·¡£ÀûÓÃJ/Direct£¬ÎÒÃÇ¿ÉÔÚ@dll¡£import¡¡Òýµ¼ÃüÁîÀïʹÓÃole¡¡Ð޸ķû£¬´Ó¶ø·½±ãµØµ÷ÓÃOLE¡¡º¯Êý¡£¡¡
±ê¼ÇΪ¡¡ole¡¡º¯ÊýµÄÒ»¸ö¹ÌÓз½·¨»á´ÓJava¡¡ÐÎʽµÄ·½·¨Ç©Ãû£¨Í¨¹ýËü¾ö¶¨·µ»ØÀàÐÍ£©×Ô¶¯×ª»»³É¡¡¡¡ÐÎʽµÄº¯¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡659¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡661¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
Êý¡£¡¡¡¡
µÚ¶þÏîÌØÐÔÊÇÑ¡ÔñANSI¡¡»òÕß¡¡Unicode¡¡×Ö´®¿ØÖÆ·½·¨¡£¶Ô×Ö´®½øÐпØÖƵĴó¶àÊý¡¡Win32¡¡API¡¡º¯Êý¶¼ÌṩÁËÁ½¸ö¡¡
°æ±¾¡£ÀýÈ磬¼ÙÉèÎÒÃǹ۲ìÓÉ¡¡USER32¡£DLL¡¡µ¼³öµÄ·ûºÅ£¬ÄÇô²»»áÕÒµ½Ò»¸öMessageBox£¨£©º¯Êý£¬Ïà·´»á¿´µ½¡¡
MessageBoxA£¨£©ºÍMessageBoxW£¨£©¡¡º¯Êý¡ª¡ª·Ö±ðÊǸú¯ÊýµÄANSI¡¡ºÍ¡¡Unicode¡¡°æ±¾¡£Èç¹ûÔÚ@dll¡£import¡¡Òýµ¼Ãü¡¡
ÁîÀï²»¹æ¶¨Ïëµ÷ÓÃÄĸö°æ±¾£¬JVM¡¡¾Í»áÊÔ×Å×ÔÐÐÅжϡ£µ