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

📄 createnamedata.cpp

📁 通信测试应用中
💻 CPP
字号:
///////////////////////////////////////////////////////////////////////////////
//
// Create data for loadrunner scripts
// Rivulet 2005.4.6
//
///////////////////////////////////////////////////////////////////////////////
#define _WIN32_DCOM		// for using CoInitializeEx()

#include <windowsx.h>
#include <windows.h>
#include <TCHAR.H>
#include <shlobj.h>
#include <objbase.h>
#include <stdio.h>
#include "resource.h"

#define RIVULET_ERROR_SUCCESS				0
#define RIVULET_ERROR_CREATEFILEFAIL	    1
#define RIVULET_ERROR_ALLOCMEMFAIL			2
#define RIVULET_ERROR_GETTIMEFAIL			3
#define RIVULET_ERROR_RESELECT				4

// Set the CREATE and CLEAR button's states
#define SetBtnState(hDlg, wParam, lParam, offset) \
	if (HIWORD(wParam) == EN_CHANGE) \
	{ \
		BOOL bFlag = GetWindowTextLength((HWND)(lParam)) ? TRUE : FALSE; \
		if (bFlag) \
			byte |= (1 << (offset)); \
		else \
			byte &= ~(1 << (offset)); \
		EnableWindow(GetDlgItem((hDlg), IDC_CLEAR), byte); \
		EnableWindow(GetDlgItem((hDlg), IDOK), !(byte ^ 7)); \
	}


///////////////////////////////////////////////////////////////////////////////


HINSTANCE g_hInstance;	// global variable


///////////////////////////////////////////////////////////////////////////////


// The core codes of CreateUniqueData() function which implements the creations of 
// unique data.
int DoCreateUniqueData(HANDLE hFile, int iLines, LPCTSTR szFileName)
{
	int i = 0, j;
	DWORD dwLength;	// bytes of one line data
	DWORD dwBytesWritten;
	TCHAR szTemp[1024];
	LPTSTR lpszBuffer = NULL;
	FILETIME ftUTC;
	SYSTEMTIME stUTC, stLocal;

	ZeroMemory(szTemp, sizeof(szTemp));

	// Firstly, write the file name to the file at the first line
	lstrcpy(szTemp, szFileName);
	lstrcat(szTemp, TEXT("\r\n"));
	WriteFile(hFile, szTemp, lstrlen(szTemp) * sizeof(TCHAR),
		&dwBytesWritten, NULL);

	// Get the system time in the UTC format, then translate it into local time
	GetSystemTimeAsFileTime(&ftUTC);
	if (FileTimeToSystemTime(&ftUTC, &stUTC) == 0)
		return RIVULET_ERROR_GETTIMEFAIL;
	SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);

	// Calculate how long one line data is
	dwLength = wsprintf(szTemp, TEXT("GXLU - %02d/%02d/%04d %02d:%02d:%02d:%03d - %5d\r\n"),
		stLocal.wDay, stLocal.wMonth, stLocal.wYear, stLocal.wHour, stLocal.wMinute,
		stLocal.wSecond, stLocal.wMilliseconds, i);

	dwLength += 1;//我添加的,应该含有一个结束符的长度
	//引用MSDN:If the function succeeds, 
	//the return value is the number of characters stored in the output buffer, 
	//	not counting the terminating null character. 

	// If the parameter "iLines" exceeds 1000, divide into several "1000"s to write into file
	if (iLines <= 1000)
	{
		// Allocate memory to store data
		lpszBuffer = (LPTSTR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 
			(dwLength * iLines) * sizeof(TCHAR));
		if (lpszBuffer == NULL)
			return RIVULET_ERROR_ALLOCMEMFAIL;

		for (i = 0; i < iLines; i++)
		{
			wsprintf(lpszBuffer + i * dwLength, 
				TEXT("GXLU - %02d/%02d/%04d %02d:%02d:%02d:%03d - %5d\r\n"),
				stLocal.wDay, stLocal.wMonth, stLocal.wYear, stLocal.wHour, 
				stLocal.wMinute, stLocal.wSecond, stLocal.wMilliseconds, i);
		}
		WriteFile(hFile, lpszBuffer, (dwLength * iLines) * sizeof(TCHAR),
			&dwBytesWritten, NULL);

		HeapFree(GetProcessHeap(), 0, (LPVOID)lpszBuffer);	// Free the allocated memory
		lpszBuffer = NULL;
	}
	else
	{
		lpszBuffer = (LPTSTR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 
			dwLength * 1000 * sizeof(TCHAR));
		if (lpszBuffer == NULL)
			return RIVULET_ERROR_ALLOCMEMFAIL;

		for (j = 0; j < iLines / 1000; j++)
		{
			for (i = 0; i < 1000; i++)
			{
				wsprintf(lpszBuffer + i * dwLength, 
					TEXT("GXLU - %02d/%02d/%04d %02d:%02d:%02d:%03d - %5d\r\n"),
					stLocal.wDay, stLocal.wMonth, stLocal.wYear, stLocal.wHour, 
					stLocal.wMinute, stLocal.wSecond, stLocal.wMilliseconds, i + j * 1000);
			}
			WriteFile(hFile, lpszBuffer, dwLength * 1000 * sizeof(TCHAR),
				&dwBytesWritten, NULL);
		}

		int k = iLines - j * 1000;
		for (i = 0; i < k; i++)
		{
			wsprintf(lpszBuffer + i * dwLength,
				TEXT("GXLU - %02d/%02d/%04d %02d:%02d:%02d:%03d - %5d\r\n"),
				stLocal.wDay, stLocal.wMonth, stLocal.wYear, stLocal.wHour, 
				stLocal.wMinute, stLocal.wSecond, stLocal.wMilliseconds, i + j * 1000);
		}
		WriteFile(hFile, lpszBuffer, dwLength * i * sizeof(TCHAR), &dwBytesWritten, NULL);

		HeapFree(GetProcessHeap(), 0, (LPVOID)lpszBuffer);	
		lpszBuffer = NULL;
	}
	return RIVULET_ERROR_SUCCESS;
}


///////////////////////////////////////////////////////////////////////////////


// Create the unique data. Every line data is composed of the current time
// and the value of "i"
VOID CreateUniqueData(HWND hwnd, LPCTSTR lpszFileName, LPCTSTR lpszPath, int iLines)
{
	TCHAR szPathName[MAX_PATH];
	TCHAR szTemp[1024];
	HANDLE hFile;

	ZeroMemory(szPathName, sizeof(szPathName));
	ZeroMemory(szTemp, sizeof(szTemp));

	lstrcpy(szPathName, lpszPath);
	lstrcat(szPathName, lpszFileName);
	lstrcat(szPathName, TEXT(".dat"));

	hFile = CreateFile(szPathName, GENERIC_WRITE, 0, NULL, 
		CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
	if (hFile == INVALID_HANDLE_VALUE)
	{
		wsprintf(szTemp, TEXT("The file \" %s \" is already exists.\n")
			     TEXT("Do you want to overwrite it?"), szPathName);
		if (MessageBox(hwnd, szTemp, TEXT("Warning"), MB_YESNO | MB_ICONWARNING)
				== IDYES)
		{
			if ((hFile = CreateFile(szPathName, 
									GENERIC_WRITE, 0, NULL, 
									CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) 
					== INVALID_HANDLE_VALUE)
			{
				MessageBox(hwnd, 
						   TEXT("Initialize file error.\nTrys again.")
						   TEXT("If you still have problems, please contact Xi Minggao."),
						   TEXT("Error"),
						   MB_OK | MB_ICONERROR);
				return;
			}
		}
		else
		{
			SetFocus(GetDlgItem(hwnd, IDC_FILENAME));
			return;
		}
	}

	int iReturnValue = DoCreateUniqueData(hFile, iLines, lpszFileName);
	if (iReturnValue == RIVULET_ERROR_GETTIMEFAIL)
		MessageBox(hwnd, 
				   TEXT("Get current time error.\nTrys again. ")
				   TEXT("If you still have problems, please contact Xi Minggao."),
				   TEXT("Error"),
				   MB_OK | MB_ICONERROR);
	else if (iReturnValue == RIVULET_ERROR_ALLOCMEMFAIL)
		MessageBox(hwnd, 
				   TEXT("Allocate memory error.\nTrys again.")
				   TEXT("If you still have problems, please contact Xi Minggao."),
				   TEXT("Error"),
				   MB_OK | MB_ICONERROR);
	else 
		MessageBox(hwnd, 
				   TEXT("Congratulations. Create successfully."),
				   TEXT("Success"),
				   MB_OK | MB_ICONINFORMATION);

	CloseHandle(hFile);
}


///////////////////////////////////////////////////////////////////////////////


VOID SelectPath(HWND hwnd)
{
	BROWSEINFO bi = { 0 };
	LPMALLOC pMlc;
	TCHAR szDisplayName[MAX_PATH];
	TCHAR szPath[MAX_PATH];

	ZeroMemory(szDisplayName, sizeof(szDisplayName));	// Clear memory
	ZeroMemory(szPath, sizeof(szPath));

	if (SHGetMalloc(&pMlc) == E_FAIL)
	{
		MessageBox(hwnd, 
			TEXT("Call to SHGetMalloc() failed."),
			TEXT("Error"),
			MB_OK | MB_ICONERROR);
		return;
	}

	bi.hwndOwner = hwnd;
	bi.pidlRoot = NULL;
	bi.pszDisplayName = szDisplayName;
	bi.lpszTitle = TEXT("Please select the path to create the file:");
	bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS;

	LPITEMIDLIST pIdl = SHBrowseForFolder(&bi);
	if (pIdl == NULL)
	{		
		pMlc->Release();
		return;
	}
	
	SHGetPathFromIDList(pIdl, szPath);
	if (szPath[lstrlen(szPath) - 1] != TEXT('\\'))
		lstrcat(szPath, TEXT("\\"));
	SetWindowText(GetDlgItem(hwnd, IDC_PATH), szPath);
//	GlobalFreePtr(pIdl);
	pMlc->Free(pIdl);
	pMlc->Release();
}


///////////////////////////////////////////////////////////////////////////////


INT_PTR CALLBACK AboutDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
		case IDCANCEL:
			EndDialog(hDlg, IDCANCEL);
			break;
		}
		return TRUE;
	}
	return FALSE;
}


///////////////////////////////////////////////////////////////////////////////


INT_PTR CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{	
	static int iLines;
	TCHAR szFileName[80];
	TCHAR szPath[MAX_PATH];
	TCHAR szLines[20];
	static BYTE byte = 0x00;	// Denote the CREATE and CLEAR button's state, 
								// if byte == 0x07, the CREATE button is enabled
								// if any one bit of "byte" is 1, the CLEAR button is enabled
	switch (uMsg)
	{
	case WM_INITDIALOG:
		SetFocus(GetDlgItem(hDlg, IDC_FILENAME));		
		return FALSE;

	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDC_FILENAME:
			SetBtnState(hDlg, wParam, lParam, 0);
			break;

		case IDC_LINES:
			SetBtnState(hDlg, wParam, lParam, 1);			
			break;

		case IDC_PATH:
			SetBtnState(hDlg, wParam, lParam, 2);
			break;

		case IDC_SELECTPATH:
			SelectPath(hDlg);
			break;

		case IDOK:
			ZeroMemory(szFileName, sizeof(szFileName));
			ZeroMemory(szPath, sizeof(szPath));
			ZeroMemory(szLines, sizeof(szLines));
			GetWindowText(GetDlgItem(hDlg, IDC_FILENAME), szFileName, 80);
			GetWindowText(GetDlgItem(hDlg, IDC_PATH), szPath, MAX_PATH);
			if (GetWindowText(GetDlgItem(hDlg, IDC_LINES), szLines, 20) != 0)
				iLines = _ttoi(szLines);
			CreateUniqueData(hDlg, szFileName, szPath, iLines);
			break;

		case IDC_CLEAR:
			SetWindowText(GetDlgItem(hDlg, IDC_FILENAME), TEXT(""));
			SetWindowText(GetDlgItem(hDlg, IDC_LINES), TEXT(""));
			SetWindowText(GetDlgItem(hDlg, IDC_PATH), TEXT(""));
			SetFocus(GetDlgItem(hDlg, IDC_FILENAME));
			break;

		case IDC_ABOUT:
			DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_ABOUTDLG), hDlg, AboutDlgProc);
			break;

		case IDCANCEL:
			EndDialog(hDlg, IDCANCEL);			
			break;
		}
		return TRUE;
	}
	return FALSE;
}


///////////////////////////////////////////////////////////////////////////////


int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
				   LPTSTR lpCmdLine, int nShowCmd)
{
	LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPICON));
	if (CoInitializeEx(NULL, COINIT_APARTMENTTHREADED) == RPC_E_CHANGED_MODE)
	{
		MessageBox(NULL, 
			TEXT("Call to CoInitialize() failed because of the specified concurrency mode."),
			TEXT("Error"),
			MB_OK | MB_ICONERROR);
	}

	g_hInstance = hInstance;

	DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAINDLG), NULL, MainDlgProc);

	CoUninitialize();	// Close the COM library
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -