?? menulib.cpp
字號:
/*-------------------------------------------------
MenuLib.dll -- 《加密與解密》
(c)www.pediy.com (段鋼) 2002/11
-------------------------------------------------*/
#include <windows.h>
#include "MenuLib.h"
#include "commdlg.h"
int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE ;
}
EXPORT BOOL CALLBACK MenuOpen(HWND hWnd) // 打開文件功能
{
HANDLE hFile;
DWORD szTemp;
long FileSize;
static OPENFILENAME ofn ;
TCHAR *pBuffer = new TCHAR [0x10000]; // 申請64K內存
TCHAR szFileName[MAX_PATH ], szTitleName[MAX_PATH ] ;
static TCHAR szFilter[] =TEXT ("TXT Files (*.TXT)\0*.txt\0") \
TEXT ("All Files (*.*)\0*.*\0\0") ;
szFileName[0] = '\0';
ZeroMemory(&ofn, sizeof(ofn)); // 初始化OPENFILENAME結構
ofn.lStructSize = sizeof (OPENFILENAME) ;
ofn.hwndOwner = hWnd ;
ofn.lpstrFilter = szFilter ;
ofn.lpstrFile = szFileName ;
ofn.nMaxFile = MAX_PATH ;
ofn.lpstrFileTitle = szTitleName ;
ofn.nMaxFileTitle = MAX_PATH ;
ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
if(GetOpenFileName (&ofn))
{
HWND hwndEdit = GetDlgItem(hWnd, 1);
if (hwndEdit )
{
hFile = CreateFile( szFileName,
GENERIC_READ ,
NULL,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL ,
NULL);
if( hFile != INVALID_HANDLE_VALUE )
{
FileSize=GetFileSize(hFile,&szTemp); // 獲取文件大小
if(FileSize<0x10000) // 如文件小于64K則讀取
{
if(ReadFile(hFile, pBuffer, FileSize, &szTemp, NULL)!=NULL) // 讀取數據
{
SetWindowText( hWnd,szFileName); // 在窗口標題欄顯示打開的文件名
SetWindowText(hwndEdit,pBuffer); // 將內存中的數據顯示在文本編輯框中
CloseHandle(hFile);
delete pBuffer; // 釋放內存
return TRUE; // 退出函數
}
}
CloseHandle(hFile);
}
}
_asm NOP // 嵌入匯編語句,NOP指令,預留點空間以補丁該處代碼
_asm NOP
_asm NOP
_asm NOP
_asm NOP
_asm NOP
MessageBoxA (NULL, NULL, NULL, NULL) ;
}
delete pBuffer;
return FALSE;
}
EXPORT BOOL CALLBACK MenuSave(HWND hWnd) // 保存功能
{
TCHAR szFileName[MAX_PATH ], szTitleName[MAX_PATH ] ;
HANDLE hFile;
TCHAR *pBuffer = new TCHAR [0x10000]; // 申請64內存
DWORD dwLen;
DWORD NumberOfBytesRW;
static OPENFILENAME ofn ;
static TCHAR szFilter[] =TEXT ("TXT Files (*.TXT)\0*.txt\0") \
TEXT ("All Files (*.*)\0*.*\0\0") ;
szFileName[0] = '\0';
ZeroMemory(&ofn, sizeof(ofn)); // 初始化OPENFILENAME結構
ofn.lStructSize = sizeof (OPENFILENAME) ;
ofn.hwndOwner = hWnd ;
ofn.lpstrFilter = szFilter ;
ofn.lpstrFile = szFileName ;
ofn.nMaxFile = MAX_PATH ;
ofn.lpstrFileTitle = szTitleName ;
ofn.nMaxFileTitle = MAX_PATH ;
ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
ofn.lpstrDefExt = TEXT("txt"); // 保存的默認擴展名
if(GetSaveFileName (&ofn))
{
HWND hwndEdit = GetDlgItem(hWnd, 1);
if (hwndEdit)
{
dwLen = GetWindowText(hwndEdit, pBuffer, 0xFFFF); // 注意這里是0xFFFF=0x10000-0x1
if (dwLen<0x10000 && dwLen>0 )
{
hFile = CreateFile( szFileName,
GENERIC_WRITE,
NULL,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
if( hFile != INVALID_HANDLE_VALUE )
{
if(WriteFile (hFile,pBuffer,dwLen,&NumberOfBytesRW, NULL))
{
SetWindowText( hWnd,szFileName);
CloseHandle(hFile);
delete pBuffer;
return TRUE;
}
CloseHandle(hFile);
}
}
}
MessageBoxA (NULL, TEXT ("可能是文件太大或文件無內容!"), TEXT ("保存文件失敗!"), 0) ;
}
delete pBuffer;
return FALSE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -