锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鐢╓in32 Dynamic-Link Library
鍒涘緩
Non-MFC DLL
鍔ㄦ侀摼鎺ュ簱
嫻嬭瘯鐢ㄤ緥->
鏂規(guī)硶涓錛?br />Test_NonMFCDLL.h錛?br />extern "C" _declspec(dllexport)聽double Add(double a, double b);
extern "C" _declspec(dllexport) double Mult(double a, double b);
Test_NonMFCDLL.cpp錛?br />#include"Test_NonMFCDLL.h"
double聽 Add(double a, double b)
{
聽聽聽聽聽聽聽return (a+b);
聽}
double聽 Mult(double a, double b)
{
聽聽聽聽聽聽聽return (a*b);
}
緙栬瘧鎴愬姛鍚庣敓鎴?/font>Test_NonMFCDLL.dll,Test_NonMFCDLL.lib
鏂規(guī)硶浜岋細(xì)
鍒犻櫎涓婁釜渚嬪瓙宸ョ▼涓殑Test_NonMFCDLL.h鏂囦歡錛屾柊寤烘枃鏈枃浠?font face="Verdana">Test_NonMFCDLL.def
LIBRARY Test_NonMFCDLL
EXPORTS
Add聽聽@1聽聽聽聽 //涓棿瑕佹湁涓┖鏍?br />Mult聽 @2
鐜板湪灝辨祴璇曚竴涓嬩綘鎵鍐欑殑dll,鍏堝皢Test_NonMFCDLL.dll,Test_NonMFCDLL.lib鎷瘋礉鍒板綋鍓嶅伐紼嬫墍鍦ㄧ殑鐩綍涓嬮潰
1.闅愬紡閾炬帴
UseDLL.h錛?br />
#pragma comment(lib,"Test_NonMFCDLL.lib")
extern "C"_declspec(dllimport) double Add(double a,double b);
extern "C"_declspec(dllimport)聽double Mult(double a,double b);
UseDLL.cpp:
#include"TestUseDLL.h"
#include<stdio.h>
void main()
{
聽聽聽聽double res=Add(1.0,2.0);
聽聽聽聽printf("%f\n",res);
}
2 .鏄懼紡閾炬帴
UseDLL.cpp:
#include<stdio.h>
#include<windows.h>
void main(void)
{
聽聽聽聽typedef聽 double (*p)聽聽聽 (double a,double b);
聽聽聽聽p Add;
聽聽聽聽HINSTANCE hDLL;
聽聽聽聽hDLL=LoadLibrary("Test_NonMFCDLL.dll");// 鍔犺澆鍔ㄦ侀摼鎺ュ簱dll 鏂囦歡錛浡?br />聽聽聽聽Add=(p)GetProcAddress(hDLL,"Add");
聽聽聽 /*鎴栦嬌鐢℅etProcAddress(hDLL,MAKEINTRESOURCE(1))聽錛岀湅涓婇潰鐨凙dd聽聽@1*/
聽聽聽聽double res=Add(1.0,2.0);
聽聽聽聽printf("%f\n",res);
聽聽聽聽FreeLibrary(hDLL);// 鍗歌澆dll 鏂囦歡錛?
}
#define _WIN32_WINNT 0x0400
#include
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,
聽聽聽聽聽聽聽聽聽聽 WPARAM wParam, LPARAM lParam)
{
聽BOOL fEatKeystroke = FALSE;
聽
聽if (nCode == HC_ACTION) {
聽 switch (wParam) {
聽 case WM_KEYDOWN:聽
聽 case WM_SYSKEYDOWN:
聽 case WM_KEYUP:聽聽聽
聽 case WM_SYSKEYUP:
聽聽 PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
聽聽 fEatKeystroke =
聽聽聽 ((p->vkCode == VK_TAB)聽聽聽 &&聽 ((p->flags & LLKHF_ALTDOWN) != 0)) ||
聽聽聽 ((p->vkCode == VK_ESCAPE) &&聽 ((p->flags & LLKHF_ALTDOWN) != 0)) ||
聽聽聽 ((p->vkCode == VK_ESCAPE) &&聽 ((GetKeyState(VK_CONTROL)&0x8000) != 0))||
聽聽聽 ( p->vkCode == VK_LWIN)聽聽 ||聽 ( p->vkCode==VK_RWIN )
聽聽聽 ;
聽聽 break;
聽 }
聽}
聽return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam,
聽 lParam));
}
int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int)
{
聽聽聽聽聽聽
聽聽聽聽聽聽聽 // Install the low-level keyboard & mouse hooks
聽聽聽聽聽聽聽 HHOOK hhkLowLevelKybd聽 = SetWindowsHookEx(WH_KEYBOARD_LL,
聽聽聽聽聽聽聽 LowLevelKeyboardProc, hinstExe, 0);
聽
聽聽聽聽聽聽 // Keep this app running until we're told to stop
聽聽聽聽聽聽聽聽 MessageBox(NULL,
聽聽聽聽聽聽聽聽聽聽聽聽 TEXT("Alt+Esc, Ctrl+Esc, Alt+Tab, LWIN and RWIN are now disabled.\n")聽
聽聽聽聽聽聽聽聽聽 TEXT("Click \"Ok\" to terminate this application and re-enable these keys."),
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 TEXT("Disable Low-Level Keys"),
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 MB_OK);
聽
聽聽聽聽聽聽聽聽聽聽聽聽 UnhookWindowsHookEx(hhkLowLevelKybd);
聽聽聽聽聽聽聽聽聽聽聽聽 return(0);
}
1.2 緋葷粺鐑敭
聽聽聽聽聽聽聽 1.灞忚斀:SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,true錛?, SPIF_UPDATEINIFILE);
聽聽聽聽聽聽聽 2.鎭㈠:SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,false,聽 0, SPIF_UPDATEINIFILE);
1.3 妯℃嫙鎸夐敭
聽 璁╃郴緇熸ā鎷熶竴嬈℃寜涓媁IN+D閿?
聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 keybd_event(VK_LWIN,0,0,0);聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 keybd_event('D',0,0,0);聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 keybd_event(VK_LWIN,0,KEYEVENTF_KEYUP,0);聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 keybd_event('D',0,KEYEVENTF_KEYUP,0);
1.4 鍒囨崲鍒板綋鍓嶆闈?/p>
妯℃嫙鏈灝忓寲灞忓箷蹇嵎閿甒indow+D聽
聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 keybd_event(VK_LWIN,0,0,0);聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 keybd_event('D',0,0,0);聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 keybd_event(VK_LWIN,0,KEYEVENTF_KEYUP,0);聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 keybd_event('D',0,KEYEVENTF_KEYUP,0);聽
---------------------------------------------------------------聽
聽
姝g粺鐨勫姙娉曞涓嬶細(xì)聽
聽
#include聽聽聽
#include聽聽聽
聽
int聽 main聽 ()聽
聽聽聽聽聽聽 {聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 CoInitialize聽 (0);聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 IShellDispatch4聽 *pdisp聽 =聽 NULL;聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 CoCreateInstance聽 (CLSID_Shell,聽 NULL,聽 CLSCTX_ALL,聽 __uuidof聽 (IShellDispatch4),聽 (void聽 **)&pdisp);聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 pdisp->ToggleDesktop聽 ();聽 //聽 榪欏彞鏄敤鏉ュ垏鎹㈡闈㈢殑聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 pdisp->Release聽 ();聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 CoUninitialize聽 ();聽
聽聽聽聽聽聽 };
1.5 璋冨嚭鍏蟲満閫夋嫨鐢婚潰
////////璋冨嚭鍏蟲満閫夋嫨鐢婚潰錛氾紙閲嶅惎銆佸叧鏈恒佷紤鐪犮佸緟鏈猴級(jí)聽
typedef聽 int聽 (CALLBACK聽 *SHUTDOWNDLG)(int);聽 //鏄劇ず鍏蟲満瀵硅瘽妗嗗嚱鏁扮殑鎸囬拡聽
HINSTANCE聽 hInst聽 =聽 LoadLibrary("shell32.dll");聽 //瑁呭叆shell32.dll聽
SHUTDOWNDLG聽 ShutDownDialog;聽 //鎸囧悜shell32.dll搴撲腑鏄劇ず鍏蟲満瀵硅瘽妗嗗嚱鏁扮殑鎸囬拡聽
if(hInst聽 !=聽 NULL)聽
{聽
聽聽聽聽聽聽 //鑾峰緱鍑芥暟鐨勫湴鍧騫惰皟鐢ㄤ箣聽
聽聽聽聽聽聽 ShutDownDialog聽 =聽 (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);聽
聽聽聽聽聽聽 (*ShutDownDialog)(0);聽
}聽
浜?榧犳爣
2.1聽聽 ::ClipCursor(&rect);
聽聽聽聽聽聽聽 ::ClipCursor(NULL);
2.2 涓涓湭鍏紑鐨凙PI鍑芥暟BlockInput錛屽湪user32.dll涓紝鐢ㄥ畠鍙互
杞繪槗鐨勯攣瀹氶敭鐩樺拰榧犳爣銆?/p>
BOOL __stdcall (*BlockInput)(BOOL Flag);
(FARPROC)BlockInput = GetProcAddress(GetModuleHandle(
聽聽聽 "user32.dll"), "BlockInput");
if (BlockInput) BlockInput(TRUE); //榪欐牱灝卞彲浠ヤ簡(jiǎn)
涓?鏄劇ず鍣?/p>
聽聽 3.1 鍏抽棴鏄劇ず鍣?br />聽聽聽聽聽聽聽 1. SendMessage( WM_SYSCOMMAND, SC_MONITORPOWER, 2);//鍏蟲樉紺哄櫒
聽聽聽聽聽聽聽聽聽聽 SendMessage( WM_SYSCOMMAND, SC_SCREENSAVE, 0);//榪愯灞忎繚
聽聽聽聽聽聽聽 2. ::SendMessage(GetSafeHwnd(), WM_SYSCOMMAND, SC_MONITORPOWER, 2);
聽
聽聽聽聽聽聽聽 3. SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,2);
聽聽 3.2 鍚姩灞忎繚
聽聽聽聽聽聽聽聽 PostMessage(WM_SYSCOMMAND,SC_SCREENSAVE,0);
鍥?緋葷粺妗岄潰
聽 4.1 闅愯棌浠誨姟鏍?
聽聽聽聽聽聽 闅愯棌 ::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_HIDE);
聽聽聽聽聽聽聽聽聽聽聽 or ::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_HIDE);
聽聽聽聽聽聽 鏄劇ず ::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_SHOW);
聽聽聽聽聽聽聽聽聽聽聽 or ::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_SHOW);
聽聽 4.2 鍦ㄤ換鍔℃爮闅愯棌
聽聽聽聽聽聽 SetWindowLong(Application,Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
聽聽 4.3鍦ㄤ換鍔$鐞嗗櫒涓殣钘?br />//瀹氫箟RegisterServiceProcess鍑芥暟鐨勫師鍨?
typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);
//娉ㄥ唽搴旂敤紼嬪簭鐨勮繘紼?
//鍏朵腑i = 0錛屽皢榪涚▼娉ㄥ唽鎴愰潪鏈嶅姟榪涚▼錛岃繖鏍鳳紝鍦╓indows鐨勫叧闂▼搴忕獥鍙d腑灝變笉浼?xì)鍑虹幇搴旂敤绋嬪?
//鐨勫悕縐頒簡(jiǎn)銆?
// i = 1錛屽皢榪涚▼娉ㄥ唽鎴愭湇鍔¤繘紼嬶紝榪欐槸涓鑸簲鐢ㄧ▼搴忚繍琛屾椂鎵閲囩敤鐨勭姸鎬併?
void RegisterProcess(int i)
{
聽聽聽聽聽聽聽聽聽聽聽 HINSTANCE hDLL;
聽聽聽聽聽聽聽聽聽聽聽 LPREGISTERSERVICEPROCESS lpRegisterServiceProcess;
聽聽聽聽聽聽聽聽聽聽聽 //鍔犺澆RegisterServiceProcess鍑芥暟鎵鍦ㄧ殑閾炬帴搴?
聽聽聽聽聽聽聽聽聽聽聽 hDLL = LoadLibrary("KERNEL32");
聽聽聽聽聽聽聽聽聽聽聽 //寰楀埌RegisterServiceProcess鍑芥暟鐨勫湴鍧
聽聽聽聽聽聽聽聽聽聽聽 lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS)GetProcAddress(hDLL, "RegisterServiceProcess");
聽聽聽聽聽聽聽聽聽聽聽 //鎵цRegisterServiceProcess鍑芥暟
聽聽聽聽聽聽聽聽聽聽聽 lpRegisterServiceProcess(GetCurrentProcessId(),i);
聽聽聽聽聽聽聽聽聽聽 //鍗歌澆閾炬帴搴?
聽聽聽聽聽聽聽聽聽聽 FreeLibrary(hDLL);
}
聽
4.4鍚姩灞忎繚
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,"C:\\*.BMP",WM_WININICHANGE);
涓涓彞鏌勬爣璇嗕竴涓猈indows浣跨敤鐨勫敮涓鏁存暟鏁板鹼紝鐢ㄦ潵鏍囪瘑搴旂敤紼嬪簭涓笉鍚屽璞″拰鍚岀被瀵硅薄涓殑涓嶅悓鐨勫疄渚嬶紝搴旂敤紼嬪簭閫氳繃鍙ユ焺鏉ヨ闂浉搴旂殑瀵硅薄淇℃伅
HWND聽 紿楀彛鍙ユ焺
HDC聽聽 璁懼鐜鍙ユ焺
HINSTANCE聽聽 褰撳墠瀹炰緥鍙ユ焺
HBITMAP聽聽 浣嶅浘鍙ユ焺
HCURSOR聽聽 鍏夋爣鍙ユ焺
HICON聽聽聽聽 鍥炬爣鍙ユ焺
HFONT聽聽聽聽 瀛椾綋鍙ユ焺
HBRUSH聽聽聽 絎斿埛鍙ユ焺
HMENU聽聽聽聽 鑿滃崟鍙ユ焺
HFILE聽聽聽聽 鏂囦歡鍙ユ焺
SDK甯哥敤鐨勬暟鎹粨鏋勶細(xì)
聽 MSG:鍖呭惈涓涓秷鎭殑鍏ㄩ儴淇℃伅
聽 WNDCLASS錛氬寘鍚獥鍙g被鐨勫叏閮ㄤ俊鎭?br />聽 RECT:鐭╁艦鍖哄煙
聽 PAINTSTRUCT:涓烘瘡涓涓獥鍙d繚瀛樹竴涓?緇樺浘淇℃伅緇撴瀯"
聽 TEXTMETRIC :瀛椾綋緇撴瀯
InvalidateRect鍜孶pdateWindow鐨勫尯鍒?
InvalidateRect鏄皢瀹㈡埛鍖烘爣璁頒負(fù)鏃犳晥錛屽茍浜х敓WM_PAINT娑堟伅錛學(xué)indows浼?xì)灏哤M_PAINT娑堟伅鏀懼叆闃熷垪錛岀瓑寰呯獥鍙h繃紼嬬殑澶勭悊錛岀劧鍚庢搷浣滅郴緇熷皢WM_PAINT褰撲綔鏄綆浼樺厛綰ф秷鎭紝濡傛灉鍚庨潰鏈夊叾浠栫殑鍔ㄤ綔瑕佸鐞嗭紝鍒欏彲鑳戒細(xì)鍑虹幇絀虹櫧鐨勫尯鍩熼渶瑕佺瓑寰呬竴孌墊椂闂存墠琚埛鏂般?br />UpdateWindow鍒欏皢瀵艱嚧鎿嶄綔緋葷粺绔嬪嵆鐢╓M_PAINT璋冪敤紿楀彛榪囩▼錛岃屼笉榪涘叆闃熷垪錛屼嬌紿楀彛寰楀埌绔嬪嵆鐨勫埛鏂般傜獥鍙h繃紼嬪畬鎴愬埛鏂板悗绔嬪嵆閫鍑猴紝W(xué)indows灝嗘帶鍒惰繑鍥炵粰UpdateWindow涔嬪悗鐨勮鍙ャ?/
if(!TranslateAccelerator(hwnd,hAccel,&msg))
鍦ㄦ秷鎭驚鐜腑錛屾埅鑾峰姞閫熼敭娑堟伅TranslateAccelerator瀵繪壘W(wǎng)M_KEYDOWN錛學(xué)M_CHAR錛學(xué)M_KEYUP搴忓垪涓庤〃涓敭鍊煎尮閰嶇殑瀛楃錛屽鏋滄壘鍒幫紝瀹冩彃鍏ヤ竴鏉M_COMMAND鍒版秷鎭槦鍒楋紝鍦ㄦ秷鎭槦鍒椾腑鐨勫懡浠D鍙互鏄姞閫熼敭琛ㄥ畾涔夌殑浠諱綍鍏ュ彛
PostQuitMessage鍑芥暟鎶曢掍竴涓猈M_QUIT娑堟伅鍒扮嚎紼嬫秷鎭槦鍒楀茍涓旂珛鍗寵繑鍥?璇ュ嚱鏁扮畝鍗曠殑閫氱煡緋葷粺綰跨▼璇鋒眰椹笂閫鍑?褰撶嚎紼嬩粠瀹冪殑娑堟伅闃熷垪鏀跺埌WM_QUIT娑堟伅鏃?灝嗛鍑?guó)檱w秷鎭驚鐜茍涓斾氦榪樻帶鍒剁粰鎿嶄綔緋葷粺.WM_QUIT娑堟伅鐨剋Param鍙傛暟浣滀負(fù)紼嬪簭閫鍑虹爜榪斿洖緇欑郴緇熷鐞?
PtInRect(&rect, point)//鍒ゆ柇鐐規(guī)槸鍚﹀湪鐭╁艦鍐?br />wsprintf(char szTitle[],"%d",i)//鎶婅緭鍑烘牸寮忓拰杈撳嚭鍙橀噺閫佸埌szTitle鏁扮粍
聽
聽
聽