📄 pdatooldlg.cpp
字号:
// PdaToolDlg.cpp : implementation file
//
#include "stdafx.h"
#include "PdaTool.h"
#include "PdaToolDlg.h"
#include <winioctl.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPdaToolDlg dialog
void CPdaToolDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPdaToolDlg)
DDX_Control(pDX, IDC_Len, m_Len);
DDX_Control(pDX, IDC_EDIT5, m_CardID);
DDX_Control(pDX, IDC_EDIT4, m_KeyCode);
DDX_Control(pDX, IDC_EDIT2, m_ScreenW);
DDX_Control(pDX, IDC_EDIT3, m_ScreenH);
DDX_Control(pDX, IDC_Dir, m_Dir);
DDX_Text(pDX, IDC_EDIT6, m_comm);
DDX_LBString(pDX, IDC_MESSAGE, m_mess);
DDX_Text(pDX, IDC_EDIT7, m_iBaud);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPdaToolDlg, CDialog)
//{{AFX_MSG_MAP(CPdaToolDlg)
ON_WM_CLOSE()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_EN_CHANGE(IDC_Dir, OnChangeDir)
ON_EN_CHANGE(IDC_EDIT4, OnChangeEdit4)
ON_EN_CHANGE(IDC_EDIT6, OnChangeEdit6)
ON_EN_CHANGE(IDC_EDIT7, OnChangeEdit7)
ON_EN_CHANGE(IDC_Len, OnChangeLen)
ON_EN_CHANGE(IDC_EDIT3, OnChangeEdit3)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPdaToolDlg message handlers
BOOL CPdaToolDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CenterWindow(GetDesktopWindow()); // center to the hpc screen
// TODO: Add extra initialization here
this->SetWindowPos(&CWnd::wndTopMost, 0, 0, 320, 240,
SWP_NOMOVE|SWP_NOSIZE);
ShowWindow(SW_SHOWMAXIMIZED);
CString Dir,Screen_W,Screen_H,CardID;
//取得卡目录
if (GetCardDir(Dir)){
m_Dir.SetWindowText(Dir);
}
//取得屏幕尺寸
GetScreenWH(Screen_W, Screen_H);
m_ScreenW.SetWindowText(Screen_W);
m_ScreenH.SetWindowText(Screen_H);
//取得ID号
if (GetCardID(CardID)){
m_CardID.SetWindowText(CardID);
}
m_hCom = (HANDLE) -1;
m_Timer = SetTimer(1000,1000,NULL);
UpdateData ( false );
return TRUE; // return TRUE unless you set the focus to a control
}
bool CPdaToolDlg::GetCardDir(CString &Dir)
{
wchar_t name[128];
::GetModuleFileName( NULL, name, 126 );
wchar_t *pwTmpStr = wcsstr ( &name[1], _T("\\") );
for (int i=wcslen(name)-1; i>-1; i-- )
{
if ( name[i] == '\\' )
{
break;
}
}
name[i+1] = '\x0';
if ( !pwTmpStr )
{
return false;
}else
{
Dir = name;
wcscpy ( pwTmpStr+1, _T("Vol:") );
return TRUE;
}
}
void CPdaToolDlg::GetScreenWH(CString &W, CString &H)
{
int m_iSysWidth= GetSystemMetrics( SM_CXSCREEN );
int m_iSysHeight= GetSystemMetrics( SM_CYSCREEN );
W.Format(_T("%d"),m_iSysWidth);
H.Format(_T("%d"),m_iSysHeight);
}
typedef struct _STORAGE_IDENTIFICATION {
DWORD dwSize;
DWORD dwFlags;
DWORD dwManufactureIDOffset;
DWORD dwSerialNumOffset;
} STORAGE_IDENTIFICATION, *PSTORAGE_IDENTIFICATION;
#define IOCTL_DISK_BASE FILE_DEVICE_DISK
#define IOCTL_DISK_GET_STORAGEID CTL_CODE(IOCTL_DISK_BASE, 0x709, METHOD_BUFFERED, FILE_ANY_ACCESS)
bool CPdaToolDlg::GetCardID(CString &ID)
{
wchar_t name[128];
char TmpStr[128];
::GetModuleFileName( NULL, name, 126 );
wchar_t *pwTmpStr = wcsstr ( &name[1], _T("\\") );
if ( !pwTmpStr ) {
return TRUE;
}
wcscpy ( pwTmpStr+1, _T("Vol:") );
HANDLE hDsk= CreateFile( name, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 );
if (hDsk==NULL || hDsk==INVALID_HANDLE_VALUE) {
return false;
}
DWORD dBufLen = sizeof(STORAGE_IDENTIFICATION) + 256;
char buf[sizeof(STORAGE_IDENTIFICATION) + 256];
STORAGE_IDENTIFICATION *si= (STORAGE_IDENTIFICATION *) buf;
si->dwSize= dBufLen;
DWORD nReturned;
if (!DeviceIoControl(hDsk, IOCTL_DISK_GET_STORAGEID, NULL, 0, buf, dBufLen, &nReturned, NULL)) {
AfxMessageBox ( _T("DeviceIoControl不正确") );
return false;
}
sprintf ( TmpStr, ("%s"), &buf[si->dwSerialNumOffset]);
CString m_ExecPath = AfxGetApp()->m_pszHelpFilePath;
m_ExecPath = m_ExecPath.Left ( m_ExecPath.ReverseFind ( '\\' ) + 1 )+"CFID.txt";
//AfxMessageBox ( m_ExecPath );
HANDLE hwd;
DWORD dLen;
hwd = ::CreateFile(m_ExecPath,GENERIC_WRITE,0,0,CREATE_ALWAYS,0,0);
if (hwd==(HANDLE) -1) {
AfxMessageBox ( _T("CreateFile Error!") );
return false;
}
WriteFile(hwd, TmpStr, strlen(TmpStr), &dLen, NULL);
CloseHandle(hwd);
ID = TmpStr;
return TRUE;
}
void CPdaToolDlg::OnChangeEdit3()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -