📄 如何编写控制面板程序.htm
字号:
lang=EN-US> <br>
<br>
<br>
<br>
</span>程序清单:<span lang=EN-US> <br>
<br>
// CPL.cpp : Defines the initialization routines for the DLL. <br>
<br>
// <br>
<br>
#include "stdafx.h" <br>
<br>
#include <br>
<br>
#include <br>
<br>
#include <br>
<br>
#include "resource.h" <br>
<br>
#ifdef _DEBUG <br>
<br>
#define new DEBUG_NEW <br>
<br>
#undef THIS_FILE <br>
<br>
static char THIS_FILE[] = __FILE__; <br>
<br>
#endif <br>
<br>
<br>
<br>
static AFX_EXTENSION_MODULE CPLDLL = { NULL, NULL }; <br>
<br>
HINSTANCE hinst = NULL; <br>
<br>
BOOL FAR PASCAL CPLDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM
lParam); <br>
<br>
//</span>控制面板接口函数<span lang=EN-US>CPlApplet <br>
<br>
extern "C" int APIENTRY CPlApplet(HWND hwndCPL, UINT uMsg, LPARAM
lParam1, LPARAM lParam2); <br>
<br>
extern "C" int APIENTRY <br>
<br>
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) <br>
<br>
{ <br>
<br>
// Remove this if you use lpReserved <br>
<br>
UNREFERENCED_PARAMETER(lpReserved); <br>
<br>
if (dwReason == DLL_PROCESS_ATTACH) <br>
<br>
{ <br>
<br>
TRACE0("CPL.DLL Initializing!"); <br>
<br>
// Extension DLL one-time initialization <br>
<br>
if (!AfxInitExtensionModule(CPLDLL, hInstance)) <br>
<br>
return 0; <br>
<br>
// Insert this DLL into the resource chain <br>
<br>
// NOTE: If this Extension DLL is being implicitly linked to by <br>
<br>
// an MFC Regular DLL (such as an ActiveX Control) <br>
<br>
// instead of an MFC application, then you will want to <br>
<br>
// remove this line from DllMain and put it in a separate <br>
<br>
// function exported from this Extension DLL. The Regular DLL <br>
<br>
// that uses this Extension DLL should then explicitly call that <br>
<br>
// function to initialize this Extension DLL. Otherwise, <br>
<br>
// the CDynLinkLibrary object will not be attached to the <br>
<br>
// Regular DLL's resource chain, and serious problems will <br>
<br>
// result. <br>
<br>
new CDynLinkLibrary(CPLDLL); <br>
<br>
} <br>
<br>
else if (dwReason == DLL_PROCESS_DETACH) <br>
<br>
{ <br>
<br>
TRACE0("CPL.DLL Terminating!"); <br>
<br>
// Terminate the library before destructors are called <br>
<br>
AfxTermExtensionModule(CPLDLL); <br>
<br>
} <br>
<br>
hinst = hInstance; <br>
<br>
return 1; // ok <br>
<br>
} <br>
<br>
int APIENTRY CPlApplet(HWND hwndCPL, UINT uMsg, LPARAM lParam1, LPARAM
lParam2) <br>
<br>
{ <br>
<br>
int i; <br>
<br>
LPCPLINFO lpCPlInfo; <br>
<br>
i = (int) lParam1; <br>
<br>
switch (uMsg) { <br>
<br>
case CPL_INIT: // first message, sent once <br>
<br>
return TRUE; <br>
<br>
case CPL_GETCOUNT: // second message, sent once <br>
<br>
return 1; <br>
<br>
break; <br>
<br>
case CPL_INQUIRE: // third message, sent once per application <br>
<br>
lpCPlInfo = (LPCPLINFO) lParam2; <br>
<br>
lpCPlInfo->lData = 0; <br>
<br>
lpCPlInfo->idIcon =IDI_ICON1; <br>
<br>
lpCPlInfo->idName = IDS_STRING1; <br>
<br>
lpCPlInfo->idInfo = IDS_STRING1; <br>
<br>
break; <br>
<br>
case CPL_DBLCLK: // application icon double-clicked <br>
<br>
FARPROC lpProcDlg; <br>
<br>
lpProcDlg = (FARPROC)MakeProcInstance(CPLDlg,hinst); <br>
<br>
DialogBox(hinst,MAKEINTRESOURCE(IDD_DIALOG1),hwndCPL,(DLGPROC)lpProcDlg); <br>
<br>
FreeProcInstance(lpProcDlg); <br>
<br>
break; <br>
<br>
case CPL_STOP: // sent once per application before CPL_EXIT <br>
<br>
break; <br>
<br>
case CPL_EXIT: // sent once before FreeLibrary is called <br>
<br>
break; <br>
<br>
default: <br>
<br>
break; <br>
<br>
} <br>
<br>
return 0; <br>
<br>
} <br>
<br>
<br>
<br>
BOOL FAR PASCAL CPLDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
<br>
<br>
{ <br>
<br>
DWORD dataType; <br>
<br>
BYTE data[100]; <br>
<br>
DWORD reserved; <br>
<br>
DWORD size; <br>
<br>
HKEY hKey = HKEY_CURRENT_USER; <br>
<br>
char
ValueName[]="Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDriveTypeAutoRun";
<br>
<br>
switch(message) <br>
<br>
{ <br>
<br>
case WM_INITDIALOG: <br>
<br>
size = 4; <br>
<br>
if(RegQueryValueEx(HKEY_CURRENT_USER,ValueName,&reserved,&dataType,data,&size)
<br>
<br>
== ERROR_SUCCESS ) <br>
<br>
{ <br>
<br>
if( data[0] == 0x95 ) <br>
<br>
SendDlgItemMessage(hDlg,IDC_CHECK1,BM_SETCHECK,1,0L); <br>
<br>
else <br>
<br>
SendDlgItemMessage(hDlg,IDC_CHECK1,BM_SETCHECK,0,0L); <br>
<br>
} <br>
<br>
return TRUE; <br>
<br>
case WM_COMMAND: <br>
<br>
switch(wParam) <br>
<br>
{ <br>
<br>
case IDOK: <br>
<br>
if(SendDlgItemMessage(hDlg,IDC_CHECK1,BM_GETCHECK,0,0L) == BST_CHECKED) <br>
<br>
data[0] = 0x95; <br>
<br>
else <br>
<br>
data[0] = 0xb5; <br>
<br>
data[1] =data[2] = data[3] = 0; <br>
<br>
size =4; <br>
<br>
reserved = 0; <br>
<br>
dataType = REG_BINARY; <br>
<br>
RegSetValueEx(HKEY_CURRENT_USER,ValueName,reserved,dataType,(BYTE*)data,size);
<br>
<br>
EndDialog(hDlg,TRUE); <br>
<br>
break; <br>
<br>
case IDCANCEL: <br>
<br>
EndDialog(hDlg,FALSE); <br>
<br>
break; <br>
<br>
} <br>
<br>
break; <br>
<br>
} <br>
<br>
return FALSE; <br>
<br>
}<o:p></o:p></span></span></p>
</td>
<td style='padding:0cm 0cm 0cm 0cm'>
<p class=MsoNormal align=left style='text-align:left;mso-pagination:widow-orphan'><span
lang=EN-US style='font-size:10.0pt;mso-font-kerning:0pt'><o:p> </o:p></span></p>
</td>
<td style='padding:0cm 0cm 0cm 0cm'>
<p class=MsoNormal align=left style='text-align:left;mso-pagination:widow-orphan'><span
lang=EN-US style='font-size:10.0pt;mso-font-kerning:0pt'><o:p> </o:p></span></p>
</td>
</tr>
</table>
</div>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -