⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdatooldlg.cpp

📁 如何得到屏幕的分辨率,但是删减了其他部分的代码,所以还需要小修下就才能通过
💻 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 + -