| ²é¿´: 153 | »Ø¸´: 1 | |||
| µ±Ç°Ö÷ÌâÒѾ´æµµ¡£ | |||
zsgllyľ³æ (ÖøÃûдÊÖ)
|
[½»Á÷]
ÔÚDirectXϵ¯³ö¶Ô»°¿ò
|
||
|
½ðɽ¹«Ë¾³öÆ·µÄÓÎÏ·ÐÞ¸ÄÆ÷¡ª¡ª¡¶½ðɽÓÎÏÀ¡·£¬ÒÔÆä¶ÀÌØµÄ¡°DirectXÏÂÖÇÄܵ¯³ö¡±µÄ¹¦ÄÜÔÚÖÚ¶àµÄÓÎÏ·ÐÞ¸ÄÆ÷ÖжÀÊ÷Ò»ÖÄ£¬Ó®µÃÁËÖÚ¶àÍæ¼ÒµÄϲ°®¡£ ¡°DirectXÏÂÖÇÄܵ¯³ö¡±ÔÚץͼ¡¢ÓÎÏ·ÐÞ¸ÄÆ÷¡¢ÓÎÏ·µ÷ÊԵȷ½Ãæ¶¼·Ç³£ÓÐÓá£ÄÇô£¬ËüµÄÔÀíÊÇʲô£¿ÎÒÃÇÄÜÔÚ×Ô¼ºµÄÈí¼þÖÐʵÏÖËüÂð£¿ÎÒ¾¹ýÒ»·¬Å¬Á¦£¬ÖÕÓÚ½Ò¿ªÁË¡°DirectXÏÂÖÇÄܵ¯³ö¡±µÄÉñÃØÃæÉ´¡£ 1. Ô¤±¸ÖªÊ¶ ÔÚ¿ªÊ¼Ç°£¬ÓбØÒª½éÉÜÒ»µã¹ØÓÚHookÓëWindowsµÄ»ù´¡ÖªÊ¶¡£ ÖÚËùÖÜÖª£¬WindowsÊÇÒ»¸öÏûÏ¢Çý¶¯µÄ32λ²Ù×÷ϵͳ¡£ÔÚWindowsÖУ¬ËùÓÐÕýÔÚÔ˵Ľø³Ì¶¼ÓÐÒ»¸ö¶ÀÁ¢µÄ2GBµÄÐéÄâµØÖ·¿Õ¼ä£¬½ø³ÌÖ®¼äÏ໥²»¿É¼û¡£WindowsµÄ¾ø´ó¶àÊýAPIÓëÏûÏ¢ÊDz»ÄÜ¿çÔ½½ø³ÌµÄ¡£ ¡°Hook¡±ÔÚWindowsÖÐÖ÷ÒªÊÇÓÃÀ´½ØÈ¡ÏûÏ¢µÄ£¬ÐÎÏó˵£¬¾ÍÊÇÓÃÀ´¡°¹³¡± ÏûÏ¢µÄ¡£Hookʵ¼ÊÉÏÊÇÒ»¸ö´¦ÀíÏûÏ¢µÄ³ÌÐò¶Î£¬Ã¿µ±Ìض¨µÄÏûÏ¢·¢³ö£¬ÔÚûÓе½´ïÄ¿µÄ´°¿Úǰ£¬Hookº¯Êý¾ÍÏȲ¶»ñ¸ÃÏûÏ¢£¬¼´Hookº¯ÊýÏȵõ½´¦ÀíÏûÏ¢µÄ¿ØÖÆÈ¨¡£¶øÇÒÈç¹ûÄã°ÑHookʵÏÖÔÚDLLÎļþÖУ¬ÄÇôHookº¯Êý½«»á×Ô¶¯±»ÏµÍ³Ó³Éäµ½»á´¦ÀíÄǸöÌØ¶¨ÏûÏ¢µÄ´°¿ÚËùÔڵĽø³ÌÐéÄâµØÖ·¿Õ¼äÖС£ÀýÈ磬Äã¿ÉÒÔÓÃHookÀ´²¶»ñϵͳÖÐËùÓеļüÅÌÊäÈëÏûÏ¢£¨WM_KEYDOWN£©À´ÊµÏÖ¶ÔµçÄÔʹÓÃÕßµÄÊäÈë½øÐмǼ£¨¹ØÓÚWindows½ø³Ì¹ÜÀíÓëHook µÄÏêϸÓ÷¨£¬Çë²ÎÔÄMSDNÓëÏà¹Ø×ÊÁÏ£©¡£ 2. ÔÀí ΢ÈíµÄ DirectX ΪWindowsϵÄÓÎÏ·´øÀ´ÁË»ªÀöµÄÉù¹âЧ¹û¡£µ«ÊÇÓÉÓÚDirectX²ÉÓÃÖ±½Ó·ÃÎʲ¼þµÄ·½·¨Ìá¸ß¶àýÌåÓëÓÎÏ·³ÌÐòµÄËÙ¶È£¬Òò´Ëµ¼ÖÂÁËÈËÃÇÎóÒÔΪÔÚDirectX£¨È·ÇеØËµÊÇDirectDraw£©Ï²»ÄÜÏÔʾÆÕͨµÄWindows¶Ô»°¿ò¡£ µ«ÊÇDirectXÊÇÖ§³ÖGDIµÄ£¬Ò²¾ÍÊÇ˵ÓÎÏ·¿ÉÒÔÓ󣹿µÄ·½·¨ÔÚDirectXÏÂÏÔʾ¶Ô»°¿ò£¨ÔÚ΢Èí DirectX 8 SDK ÖÐÓÐÃûΪ¡°FullScreenDialog¡±µÄÀý×Ó£©¡£ÏÖÔÚÎÒÃǵÄÎÊÌâÊÇ£ºÈçÉÏËùÊö£¬µ÷ÓÃAPI½¨Á¢ÓëÏÔʾ¶Ô»°¿ò±ØÐëÒªÔڸýø³ÌµÄÄÚ²¿£¬¶øÎÒÃǵijÌÐòÊÇÔÚÓÎÏ·½ø³ÌµÄÍⲿ£¬ÕâÑù£¬ÄÇЩCreateDialog() ÓëDialogBox() Ö»»áÒýÆð¡°·Ç·¨²Ù×÷¡±»ò²»ÆðÈκÎ×÷Óᣠµ«ÊÇ£¬ÓÐÁËÉÏÃæËù½²µÄHookÇé¿ö¾Í²»Í¬ÁË¡£¼ÈÈ»Hook¿ÉÒÔÓ³Éäµ½±ðµÄ½ø³ÌÄÚ²¿£¬ÄÇôֻҪ½«ÏÔʾ¶Ô»°¿òµÄº¯ÊýÒÔ¼°¶Ô»°¿ò×ÊÔ´°üÀ¨ÔÚHook DLL Öв»¾Í¿ÉÒÔµ÷ÓÃDialogBox() ÁËÂð£¿ÍêÈ«ÕýÈ·£¡ÎÒÃÇÓà SetWindowsHookEx() ΪϵͳÉèÖÃÒ»¸ö¼üÅÌÏûÏ¢Hook£¬ÏµÍ³»á×Ô¶¯½«Õâ¸öDLLÓ³Éäµ½ÓÎÏ·µÄ½ø³ÌÖС£Ã¿µ±ÓмüÅÌÏûÏ¢£¬ÎÒÃÇÖ»ÒªÅжÏÊDz»ÊÇÎÒÃÇËùÉ趨µÄÈȼü£¬Èç¹ûÊǾ͵÷Óà DialogBox() ÏÔʾ¶Ô»°¿ò¼´¿É¡£ Óɴ˿ɼû£¬HookΪÎÒÃǽâ¾öÁËϵͳ¼¶ÈȼüÓë²åÈëDLLÁ½´óÄÑÌâ£¬ÕæÊÇÒ»¾ÙÁ½µÃ£¡Ò²´ÓÒ»¸ö·½ÃæËµÃ÷ÁËѧϰWindows»ù´¡ÖªÊ¶µÄÖØÒªÐÔ£¬Èç¹ûÄãÓÐ×êÑо«Éñ£¬ÓÖÓÐÏñ¡¶WindowsºËÐıà³Ì¡·ÕâÑùµÄºÃÊéÖ¸Òý£¬¾ÍÒ»¶¨ÄܳÉΪ¶¥¼â¸ßÊÖ¡£ 3£®Ê¾ÀýÔ´³ÌÐò ÏÞÓÚÆª·ù£¬Ö»ÄÜÕª³¼¸¶Î¹Ø¼üµÄ´úÂ룬³ÌÐòÖÐÓÐ×¢ÊÍ£¬×Ô¼ºÑо¿°É¡£ // TestPopup.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" #include "TestPopup.h" #define SHARD_SEG_NAME "SHARD_DATA" //¹²ÏíÊý¾Ý¶Î #pragma data_seg(SHARD_SEG_NAME) #pragma bss_seg(SHARD_SEG_NAME) static BOOL g_fIsInstalled = FALSE; static HHOOK g_hKeyHook; static HINSTANCE g_hInstance; static HWND g_hWnd; #pragma data_seg() BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { g_hInstance = (HINSTANCE)hModule; switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } //¼üÅÌÏûÏ¢´¦Àí³ÌÐò LRESULT TESTPOPUP_API CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { //if(((DWORD)lParam & 0x40000000) && (HC_ACTION == nCode)); WORD wKey = (WORD)wParam; //¼ü°´Ï if((HIWORD(lParam) & KF_UP) == 0 && HC_ACTION == nCode) { if(wKey == VK_ADD)//ÊÇÈȼü { //»ñȡǰ̨´°¿Ú£¨ÓÎÏ·´°¿Ú£© HWND hWnd = ::GetForegroundWindow(); //´´½¨²¢ÏÔʾģʽ¶Ô»°¿ò : ialogBox(g_hInstance, MAKEINTRESOURCE(IDD_MAIN_DIALOG), hWnd, DLGPROC(DialogProc)); } } LRESULT RetVal = CallNextHookEx(g_hKeyHook, nCode, wParam, lParam ); return RetVal; } BOOL TESTPOPUP_API InstallHotKey() { if(g_fIsInstalled)return FALSE; g_hKeyHook = ::SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc, g_hInstance, 0);//°²×° Hook g_fIsInstalled = TRUE; return TRUE; } BOOL TESTPOPUP_API UninstHotKey() { BOOL bRet; bRet = ::UnhookWindowsHookEx(g_hKeyHook); g_fIsInstalled = FALSE; g_hKeyHook = NULL; return bRet; } BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: switch( LOWORD(wParam) ) { case IDCANCEL: case IDOK: EndDialog( hwndDlg, TRUE ); return TRUE; } break; case WM_MOVE: break; case WM_DESTROY: g_hWnd = NULL; break; } return FALSE; } //TestPopupDemoDlg.C void CTestPopupDemoDlg::OnEnableHotkey() { // TODO: Add your control notification handler code here UpdateData(); if(m_fHotkeyEnabled) { ::InstallHotKey(); } else { ::UninstHotKey(); } UpdateData(FALSE); } ±¾³ÌÐòÔÚMicrosoft Visual C++¡¢Win97ϵ÷ÊÔͨ¹ý¡£ [ Last edited by »ÃÓ°ÎÞºÛ on 2006-11-27 at 10:23 ] |
» ²ÂÄãϲ»¶
ÉϺ£µçÁ¦´óѧ²ÄÁÏ·À»¤ÓëвÄÁÏÖØµãʵÑéÊÒÕÐÊÕµ÷¼ÁÑо¿Éú£¨²ÄÁÏ¡¢»¯Ñ§¡¢µç»¯Ñ§£¬»·¾³£©
ÒѾÓÐ4È˻ظ´
²ÄÁÏѧÇóµ÷¼Á
ÒѾÓÐ6È˻ظ´
303Çóµ÷¼Á
ÒѾÓÐ5È˻ظ´
Ò»Ö¾Ô¸ÎäÀí085500»úеרҵ×Ü·Ö300Çóµ÷¼Á
ÒѾÓÐ7È˻ظ´
¿¼Ñе÷¼Á
ÒѾÓÐ4È˻ظ´
281Çóµ÷¼Á
ÒѾÓÐ4È˻ظ´
0805 316Çóµ÷¼Á
ÒѾÓÐ6È˻ظ´
085601Çóµ÷¼Á×Ü·Ö293Ó¢Ò»Êý¶þ
ÒѾÓÐ3È˻ظ´
08¹¤Ñ§µ÷¼Á
ÒѾÓÐ17È˻ظ´
340Çóµ÷¼Á
ÒѾÓÐ4È˻ظ´

ÍÞ¹þ¹þ212
гæ (³õÈëÎÄ̳)
- Ó¦Öú: 0 (Ó×¶ùÔ°)
- ½ð±Ò: 4
- Ìû×Ó: 28
- ÔÚÏß:
- ³æºÅ: 141584
- ×¢²á: 2005-12-21
- רҵ: ÍøÂç
2Â¥2005-12-29 19:23:24













ialogBox(g_hInstance, MAKEINTRESOURCE(IDD_MAIN_DIALOG), hWnd, DLGPROC(DialogProc));
»Ø¸´´ËÂ¥
6