可以在VC++中使用;非哥所作;哥整理并作说明;

1 弹出窗口类

CPopupTipWnd,封装了MFC CWnd类,创建窗口、显示窗口、隐藏窗口操作;

#include "stdafx.h"
#include "PwdSpy.h"
#include "PopupTipWnd.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif#define BORDER_X  5
#define BORDER_Y    5//***********************************************
CPopupTipWnd::CPopupTipWnd()
{m_pParentWnd = NULL;
}//***********************************************
CPopupTipWnd::~CPopupTipWnd()
{
}BEGIN_MESSAGE_MAP(CPopupTipWnd, CWnd)//{{AFX_MSG_MAP(CPopupTipWnd)//}}AFX_MSG_MAP
END_MESSAGE_MAP()//***********************************************
BOOL CPopupTipWnd::Create(CWnd *pParentWnd)
{_ASSERTE(pParentWnd);m_pParentWnd = pParentWnd;DWORD dwStyle = WS_BORDER | WS_POPUP;DWORD dwExStyle = WS_EX_TOOLWINDOW | WS_EX_TOPMOST;CString strWndClass = AfxRegisterWndClass(CS_SAVEBITS, 0, (HBRUSH)(COLOR_INFOBK + 1));BOOL bCreated = CreateEx(dwExStyle,strWndClass,NULL,dwStyle,0, 0, 0, 0,NULL, NULL, NULL);return bCreated;
}//***********************************************
void CPopupTipWnd::ShowPopupWindow(CString strText, CPoint point, CRect rect)
{// If there is no password, instead hide the window and be done with itif(strText.IsEmpty()){HidePopupWindow();return;}CClientDC dc(this);// Use same font as parent windowCFont *pOldFont = dc.SelectObject(m_pParentWnd->GetFont());// Calculate the window size.CSize sizeText = dc.GetTextExtent(strText);CSize sizeWindow;sizeWindow.cx = sizeText.cx + 2 * BORDER_X;sizeWindow.cy = sizeText.cy + 2 * BORDER_Y;// Draw information in windowdc.SetBkMode(TRANSPARENT);dc.DrawText(strText, CRect(0, 0, sizeWindow.cx, sizeWindow.cy), DT_CENTER | DT_VCENTER | DT_SINGLELINE);dc.SelectObject(pOldFont);// Calculate window rectangle position on screenCRect rectWindow;rectWindow.left = rect.left;rectWindow.right = rectWindow.left + sizeWindow.cx;rectWindow.top = rect.top - (sizeWindow.cy + 20);if(rectWindow.top <= 0)rectWindow.top = rect.bottom + 20;rectWindow.bottom = rectWindow.top + sizeWindow.cy;// Display windowSetWindowPos(&wndTop,rectWindow.left,rectWindow.top,rectWindow.Width(),rectWindow.Height(),SWP_SHOWWINDOW | SWP_NOACTIVATE);
}//***********************************************
void CPopupTipWnd::HidePopupWindow(void)
{ShowWindow(SW_HIDE);
}//.h
#pragma onceclass CPopupTipWnd : public CWnd
{
// Construction
public:CPopupTipWnd();virtual ~CPopupTipWnd();virtual BOOL Create(CWnd *pParentWnd);void ShowPopupWindow(CString strText, CPoint point, CRect rect);void HidePopupWindow(void);// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CPopupTipWnd)//}}AFX_VIRTUAL// Generated message map functions
protected:CRect m_rectPos;CWnd *m_pParentWnd;//{{AFX_MSG(CPopupTipWnd)//}}AFX_MSGDECLARE_MESSAGE_MAP()
};//{{AFX_INSERT_LOCATION}}

2 操作系统信息类

COSInfo,封装了Win32 API 操作系统信息相关API;

#include "stdafx.h"
#include "OSInfo.h"//***********************************************
COSInfo::COSInfo()
{ZeroMemory(&m_osvi, sizeof(OSVERSIONINFO));m_osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);if(!GetVersionEx(&m_osvi))ZeroMemory(&m_osvi, sizeof(OSVERSIONINFO));
}//***********************************************
COSInfo::~COSInfo()
{
}//***********************************************
EOSType COSInfo::GetOSType(void) const
{EOSType eOSType = eUnknown;if(IsWindowsNT())eOSType = eWinNT;else if(IsWindows2000())eOSType = eWin2000;else if(IsWindowsXP())eOSType = eWinXP;else if(IsWindows2003())eOSType = eWin2003;else if(IsWindows95())eOSType = eWin95;else if(IsWindows98())eOSType = eWin98;else if(IsWindowsME())eOSType = eWinME;return eOSType;
}//***********************************************
LPCTSTR COSInfo::GetOSString(void) const
{struct OSTypeTableEntry{EOSType eOSType;LPCTSTR szOSName;}static const OSLookupTable[] ={{eUnknown, _T("")},                // Undefined{eWin95, _T("Windows 95")},       // Windows 95{eWin98, _T("Windows 98")},      // Windows 98{eWinME, _T("Windows ME")},      // Windows ME{eWinNT, _T("Windows NT")},      // Windows NT{eWin2000, _T("Windows 2000")},  // Windows 2000{eWinXP, _T("Windows XP")},        // Windows XP{eWin2003, _T("Windows 2003")}   // Windows 2003};EOSType eOSType = GetOSType();_ASSERTE(eOSType < sizeof(OSLookupTable) / sizeof(OSLookupTable[0]));return OSLookupTable[eOSType].szOSName;
}//***********************************************
bool COSInfo::IsWindows95(void) const
{// Windows95 if:// Major == 4 and Minor == 0 and PlatformId != NTreturn (m_osvi.dwMajorVersion == 4 &&m_osvi.dwMinorVersion == 0 &&m_osvi.dwPlatformId != VER_PLATFORM_WIN32_NT) ? true : false;
}//***********************************************
bool COSInfo::IsWindows98(void) const
{// Windows98 if:// Major >= 4 and Minor > 0 and PlatformId != NT// (except Major == 4 and Minor == 90 which is ME)// (note:  Major == 4 and Minor == 0 is 95)return (m_osvi.dwMajorVersion >= 4 &&m_osvi.dwMinorVersion > 0 &&m_osvi.dwPlatformId != VER_PLATFORM_WIN32_NT &&!(m_osvi.dwMajorVersion == 4 && m_osvi.dwMinorVersion == 90)) ? true : false;
}//***********************************************
bool COSInfo::IsWindowsME(void) const
{// WindowsME if:// Major == 4 and Minor == 90 and PlatformId != NTreturn (m_osvi.dwMajorVersion == 4 &&m_osvi.dwMinorVersion == 90 &&m_osvi.dwPlatformId != VER_PLATFORM_WIN32_NT) ? true : false;
}//***********************************************
bool COSInfo::IsWindowsNT(void) const
{// WindowsNT4 if:// Major == 4 and Minor == 0 and PlatformId == NTreturn (m_osvi.dwMajorVersion == 4 &&m_osvi.dwMinorVersion == 0 &&m_osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) ? true : false;
}//***********************************************
bool COSInfo::IsWindows2000(void) const
{// Windows2000 if:// Major == 5 and Minor == 0 and PlatformId == NTreturn (m_osvi.dwMajorVersion == 5 &&m_osvi.dwMinorVersion == 0 &&m_osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) ? true : false;
}//***********************************************
bool COSInfo::IsWindowsXP(void) const
{// WindowsXP if:// Major == 5 and Minor == 1 and PlatformId == NTreturn (m_osvi.dwMajorVersion == 5 &&m_osvi.dwMinorVersion == 1 &&m_osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) ? true : false;
}//***********************************************
bool COSInfo::IsWindows2003(void) const
{// Windows2003 if:// Major == 5 and Minor == 2 and PlatformId == NTreturn (m_osvi.dwMajorVersion == 5 &&m_osvi.dwMinorVersion == 2 &&m_osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) ? true : false;
}//***********************************************
bool COSInfo::IsNT(void) const
{return (m_osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) ? true : false;
}//***********************************************
DWORD COSInfo::GetMajor(void) const
{return m_osvi.dwMajorVersion;
}//***********************************************
DWORD COSInfo::GetMinor(void) const
{return m_osvi.dwMinorVersion;
}//***********************************************
DWORD COSInfo::GetBuild(void) const
{return m_osvi.dwBuildNumber;
}//***********************************************
DWORD COSInfo::GetPlatformId(void) const
{return m_osvi.dwPlatformId;
}//***********************************************
LPCTSTR COSInfo::GetCSDString(void) const
{return m_osvi.szCSDVersion;
}//.h
#pragma oncetypedef enum _EOSType
{eUnknown = 0,eWin95,eWin98,eWinME,eWinNT,eWin2000,eWinXP,eWin2003
} EOSType, *LPEOSType;class COSInfo
{
public:COSInfo();virtual ~COSInfo();EOSType GetOSType(void) const;LPCTSTR GetOSString(void) const;bool IsWindows95(void) const;bool IsWindows98(void) const;bool IsWindowsME(void) const;bool IsWindowsNT(void) const;bool IsWindows2000(void) const;bool IsWindowsXP(void) const;bool IsWindows2003(void) const;bool IsNT(void) const;DWORD GetMajor(void) const;DWORD GetMinor(void) const;DWORD GetBuild(void) const;DWORD GetPlatformId(void) const;LPCTSTR GetCSDString(void) const;protected:OSVERSIONINFO m_osvi;
};

3 代码注入CPP文件

包括线程函数,拷贝线程函数和注入数据到远程进程的函数;

/***************************************************************
Module name: InjCode.cpp
Copyright (c) 2003 Robert KusterNotice: If this code works, it was written by Robert Kuster.Else, I don't know who wrote it.Use it on your own risk. No responsibilities forpossible damages of even functionality can be taken.
***************************************************************/#include <Windows.h>
#include "InjCode.h"//---------------------------------------------------------------------
// INJDATA
// Notice: The data structure being injected.
//
typedef LRESULT     (WINAPI *SENDMESSAGE)(HWND,UINT,WPARAM,LPARAM);typedef struct {HWND hwnd;SENDMESSAGE        fnSendMessage;  // pointer to user32!SendMessageBYTE    pbText[128 * sizeof(TCHAR)];
} INJDATA, *PINJDATA;//---------------------------------------------------------------------
// ThreadFunc
// Notice: - the code being injected;
//         - the remote copy of this function retrieves the password;
//
//  Return value: password length
//
static DWORD WINAPI ThreadFunc (INJDATA *pData)
{// There must be less than a page-worth of local// variables used in this function.int nXferred     = 0;  // number of chars retrieved by WM_GETTEXT// Get passwordnXferred = pData->fnSendMessage( pData->hwnd, WM_GETTEXT,sizeof(pData->pbText)/sizeof(TCHAR),(LPARAM)pData->pbText );pData->pbText [127 * sizeof(TCHAR)] = __TEXT('\0');    // The thread's exit code is the number // of characters retrieved by WM_GETTEXTreturn nXferred;
}// This function marks the memory address after ThreadFunc.
// int cbCodeSize = (PBYTE) AfterThreadFunc - (PBYTE) ThreadFunc.
static void AfterThreadFunc (void) {
}//---------------------------------------------------------------------
// GetTextRemote
// Notice: - copies ThreadFunc and INJDATA to the remote process;
//         - starts the excecution of the remote ThreadFunc;
//
//  Return value: password length;
//
int GetTextRemote (HANDLE hProcess, HWND hWnd, BYTE* pbString, bool fUnicode)
{   HINSTANCE   hUser32;INJDATA     *pDataRemote;   // the address (in the remote process) where INJDATA will be copied to;DWORD        *pCodeRemote;   // the address (in the remote process) where ThreadFunc will be copied to;HANDLE        hThread = NULL; // the handle to the thread executing the remote copy of ThreadFunc;DWORD      dwThreadId = 0;int       nCharsXferred = 0; // number of chars retrieved by WM_GETTEXT in the remote thread;DWORD dwNumBytesXferred = 0; // number of bytes written/read to/from the remote process;__try {hUser32 = GetModuleHandle(__TEXT("user32"));if (hUser32 == NULL)__leave;// Initialize INJDATA and then // copy it to the remote processINJDATA DataLocal = {hWnd,(SENDMESSAGE) GetProcAddress(hUser32, fUnicode ? "SendMessageW" : "SendMessageA")          };if( DataLocal.fnSendMessage == NULL )__leave;       // 1. Allocate memory in the remote process for INJDATA// 2. Write a copy of DataLocal to the allocated memorypDataRemote = (INJDATA*) VirtualAllocEx( hProcess, 0, sizeof(INJDATA), MEM_COMMIT, PAGE_READWRITE );if (pDataRemote == NULL)__leave;WriteProcessMemory( hProcess, pDataRemote, &DataLocal, sizeof(INJDATA), &dwNumBytesXferred );// Calculate the number of bytes that ThreadFunc occupiesconst int cbCodeSize = ((LPBYTE) AfterThreadFunc - (LPBYTE) ThreadFunc);// 1. Allocate memory in the remote process for the injected ThreadFunc// 2. Write a copy of ThreadFunc to the allocated memorypCodeRemote = (PDWORD) VirtualAllocEx( hProcess, 0, cbCodeSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE );       if (pCodeRemote == NULL)__leave;WriteProcessMemory( hProcess, pCodeRemote, &ThreadFunc, cbCodeSize, &dwNumBytesXferred );// Start execution of remote ThreadFunchThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE) pCodeRemote,pDataRemote, 0 , &dwThreadId);if (hThread == NULL)__leave;WaitForSingleObject(hThread, INFINITE);// Get result (password) backReadProcessMemory( hProcess, pDataRemote, &DataLocal, sizeof(INJDATA), &dwNumBytesXferred);if (fUnicode)  wcscpy((LPWSTR) pbString, (LPCWSTR) DataLocal.pbText);else           strcpy((LPSTR)  pbString, (LPCSTR)  DataLocal.pbText);}__finally {if ( pDataRemote != 0 )VirtualFreeEx( hProcess, pDataRemote, 0, MEM_RELEASE );if ( pCodeRemote != 0 )VirtualFreeEx( hProcess, pCodeRemote, 0, MEM_RELEASE );if ( hThread != NULL ) {GetExitCodeThread(hThread, (PDWORD) &nCharsXferred);CloseHandle(hThread);           }}// Return the number of chars retrieved // by WM_GETTEXT in the remote thread.return nCharsXferred;
}///int GetWindowTextRemoteA (HANDLE hProcess, HWND hWnd, LPSTR  lpString)
{return GetTextRemote (hProcess, hWnd, (BYTE*)lpString, false);
}int GetWindowTextRemoteW (HANDLE hProcess, HWND hWnd, LPWSTR lpString)
{return GetTextRemote (hProcess, hWnd, (BYTE*)lpString, true);
}End Of File ////.h
/***************************************************************
Module name: InjCode.h
Copyright (c) 2003 Robert KusterNotice: If this code works, it was written by Robert Kuster.Else, I don't know who wrote it.Use it on your own risk. No responsibilities forpossible damages of even functionality can be taken.
***************************************************************/
#if !defined INJCODE_H
#define INJCODE_Hint GetWindowTextRemoteA (HANDLE hProcess, HWND hWnd, LPSTR  lpString);
int GetWindowTextRemoteW (HANDLE hProcess, HWND hWnd, LPWSTR lpString);#ifdef UNICODE
#define GetWindowTextRemote GetWindowTextRemoteW
#else
#define GetWindowTextRemote GetWindowTextRemoteA
#endif // !UNICODE#endif // !defined(INJCODE_H)

4 进程间共享内存封装类

封装了相关Win32 API;

// XShareMemory.cpp: implementation of the XShareMemory class.
//
//#include "stdafx.h"
#include "XShareMemory.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif//
// Construction/Destruction
//XShareMemory::XShareMemory()
{Init();
//  Create(DEFAULT_FILENAME, DEFAULT_MAPNAME, DEFAULT_MAPSIZE);
}XShareMemory::XShareMemory(char *szFileName, char *szMapName, DWORD dwSize)
{Init();Create(szFileName, szMapName, dwSize);
}XShareMemory::~XShareMemory()
{Destory();
}void XShareMemory::Init()
{m_hFile = NULL;m_hFileMap = NULL;m_hCreateMutex = NULL;m_hOpenMutex = NULL;m_lpFileMapBuffer = NULL;m_pFileName = NULL;m_pMapName = NULL;m_dwSize = 0;m_iCreateFlag = 0;m_iOpenFlag = 0;
}void XShareMemory::Destory()
{if (m_lpFileMapBuffer){UnmapViewOfFile(m_lpFileMapBuffer);m_lpFileMapBuffer = NULL;}if (m_hFileMap){CloseHandle(m_hFileMap);m_hFileMap = NULL;}if (m_hFile && m_hFile != INVALID_HANDLE_VALUE){CloseHandle(m_hFile);m_hFile = NULL;}if(m_hCreateMutex){CloseHandle(m_hCreateMutex);m_hCreateMutex = NULL;}if(m_hOpenMutex){CloseHandle(m_hOpenMutex);m_hOpenMutex = NULL;}if (m_pFileName){free(m_pFileName);m_pFileName = NULL;}if (m_pMapName){free(m_pMapName);m_pMapName = NULL;}Init();
}void XShareMemory::Create(char *szFileName, char *szMapName, DWORD dwSize)
{ASSERT(m_iOpenFlag == 0);if (m_iCreateFlag)Destory();char szMutexName[1000];strcpy(szMutexName, szMapName);strcat(szMutexName, "_MUTEX");m_hCreateMutex = CreateMutex(NULL, FALSE, szMutexName);if (szFileName)m_pFileName = _strdup(szFileName);if (szMapName)m_pMapName = _strdup(szMapName);else m_pMapName = _strdup(DEFAULT_MAPNAME);if (dwSize > 0)m_dwSize = dwSize;else m_dwSize = DEFAULT_MAPSIZE;if (m_pFileName){// filem_hFile = CreateFile(m_pFileName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,//OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);}else{// systemm_hFile = (HANDLE)0xFFFFFFFF;}if (m_hFile){m_hFileMap = CreateFileMapping(m_hFile,NULL,PAGE_READWRITE,0,m_dwSize,m_pMapName);//使只有一个CSFMServer对象能操作内存对象//if (m_hFileMap != NULL && ERROR_ALREADY_EXISTS == GetLastError())//{// CloseHandle(m_hFileMap);//  m_hFileMap = NULL;//}}if (m_hFileMap){m_lpFileMapBuffer = MapViewOfFile(m_hFileMap,FILE_MAP_ALL_ACCESS,//FILE_MAP_WRITE|FILE_MAP_READ,0,0,m_dwSize);}m_iCreateFlag = 1;
}bool XShareMemory::IsOpened()
{return (m_iOpenFlag == 1)? true : false;
}bool XShareMemory::IsCreated()
{return (m_iCreateFlag == 1)? true : false;
}void XShareMemory::Open(DWORD dwAccess, char *szMapName)
{ASSERT(m_iCreateFlag == 0);if (m_iOpenFlag)Destory();char szMutexName[1000];strcpy(szMutexName, szMapName);strcat(szMutexName, "_MUTEX");m_hOpenMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, szMutexName);if(m_hOpenMutex == NULL)return;if (szMapName)m_pMapName = _strdup(szMapName);else m_pMapName = _strdup(DEFAULT_MAPNAME);m_hFileMap = OpenFileMapping(dwAccess,TRUE,m_pMapName);if (m_hFileMap){m_lpFileMapBuffer = MapViewOfFile(m_hFileMap,dwAccess,0,0,0);m_iOpenFlag = 1;}}LPVOID XShareMemory::GetBuffer()
{return (m_lpFileMapBuffer)?(m_lpFileMapBuffer):(NULL);
}DWORD XShareMemory::GetSize()
{return m_dwSize;
}bool XShareMemory::Write(const char *pData, DWORD dwSize)
{char *p = (char*)GetBuffer();if(p){HANDLE hMutex;if(m_iCreateFlag)hMutex = m_hCreateMutex;elsehMutex = m_hOpenMutex;::WaitForSingleObject(hMutex, INFINITE);memcpy(p, pData, dwSize);ReleaseMutex(hMutex);return true;}elsereturn false;
}bool XShareMemory::Read(char *pData, DWORD dwSize)
{char *p = (char*)GetBuffer();if(!p)return false;HANDLE hMutex;if(m_iCreateFlag)hMutex = m_hCreateMutex;elsehMutex = m_hOpenMutex;::WaitForSingleObject(hMutex, INFINITE);memcpy(pData, p, dwSize);ReleaseMutex(hMutex);return true;
}//.h
// XShareMemory.h: interface for the XShareMemory class.
//
//#if !defined(AFX_XSHAREMEMORY_H__32BEA564_49E7_4756_994E_AFC067505D25__INCLUDED_)
#define AFX_XSHAREMEMORY_H__32BEA564_49E7_4756_994E_AFC067505D25__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#define DEFAULT_FILENAME    NULL
#define DEFAULT_MAPNAME     "_SFM_OBJ_"
#define DEFAULT_MAPSIZE     (0xFFFF + 1)// 进程间共享内存class XShareMemory
{
public:bool Read(char *pData, DWORD dwSize);bool Write(const char *pData, DWORD dwSize);XShareMemory();XShareMemory(char *szFileName, char *szMapName, DWORD dwSize);virtual ~XShareMemory();void Create(char *szFileName, char *szMapName, DWORD dwSize);  // 服务端:创建共享内存void Open(DWORD dwAccess, char *szMapName);     // 客户端:打开共享内存LPVOID GetBuffer();DWORD GetSize();bool IsOpened();bool IsCreated();
private:void Destory();void Init();
protected:HANDLE    m_hFile;HANDLE  m_hFileMap;HANDLE  m_hCreateMutex;      // 互斥保护共享内存HANDLE  m_hOpenMutex;        // 互斥保护共享内存LPVOID   m_lpFileMapBuffer;char  *m_pFileName;char   *m_pMapName;DWORD   m_dwSize;int        m_iCreateFlag;      // 创建标志,服务器端int      m_iOpenFlag;        // 打开标志,客户端
};#endif // !defined(AFX_XSHAREMEMORY_H__32BEA564_49E7_4756_994E_AFC067505D25__INCLUDED_)

一些VC++ 系统类通用类相关推荐

  1. 一劳永逸,iOS 网页视图控制器通用类封装

    原文链接:http://www.jianshu.com/p/553424763585 随着 H5 的发展,在 iOS 开发中,网页视图的使用率逐渐提升,为了增加代码封装度.减轻开发负担,因此通常会对网 ...

  2. HTML5响应式企业集团织梦模板,(自适应手机版)响应式企业集团通用类网站织梦模板 HTML5响应式大气通用企业织梦源码+PC+wap+利于SEO优化...

    名称:(自适应手机版)响应式企业集团通用类网站织梦模板 HTML5响应式大气通用企业织梦源码+PC+wap+利于SEO优化 该模板是非常容易存活的,这样的网站很容易吸引访客点击,提升ip流量和pv是非 ...

  3. ABP +VUE Elment 通用高级查询(右键菜单)设计+LINQ通用类Expression<Func<TFields, bool>>方法

    ABP +VUE Elment 通用高级查询(右键菜单)设计+LINQ通用类Expression 1. 目前需要用VUE实现源cs系统报表的右键菜单所有和自定义查询功能. 1.1 CS端的右键菜单效果 ...

  4. C#检测电脑的一些设置通用类(经典推荐)

    此类能检测出电脑的cpu序列号,获取网卡硬件地址,获取IP地址,获取硬盘ID,操作系统的登录用户名,PC类型,物理内存,就这些了,够用吧,谁在有能获取电脑别的信息的类,跟贴啊,欢迎大家分享,打造一个超 ...

  5. UICollectionView入门--使用系统UICollectionViewFlowLayout布局类

    UICollectionView入门--使用系统UICollectionViewFlowLayout布局类 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...

  6. DataTable转ListModel通用类

    /// <summary> /// DataTable转List<Model>通用类[实体转换辅助类] /// </summary> public class Mo ...

  7. C#.NET操作数据库通用类(MS SQL Server篇)

    下面给出了一个C#操作MS SQL Server 数据库的通用类,通过该类可以对数据库进行任何操作,包括执行SQL语句.执行存储过程.以下是其详细实现过程,希望大家共同修改优化之.稍后将介绍如何使用它 ...

  8. C#.NET操作数据库通用类

    下面给出了一个C#操作MS SQL Server 数据库的通用类,通过该类可以对数据库进行任何操作,包括执行SQL语句.执行存储过程.以下是其详细实现过程,希望大家共同修改优化之.稍后将介绍如何使用它 ...

  9. 《WebForm开发系列高级篇》Item2导出EXCEL通用类(GridView,DataList,Repeater,DetailView)

    1.导出效果图: 2.C#导出EXCEL通用类源代码: using System; using System.Data; using System.Configuration; using Syste ...

最新文章

  1. ARMed解决方案对DSP的战争
  2. ASP.NET中 Calendar(日期控件)的使用
  3. 浅谈SpringMVC执行过程
  4. Java学习手记2——多线程
  5. 著名软件公司的java笔试算法题!(含参考答案)
  6. Linux驱动入门基础基础知识
  7. 送书 | 主成分分析PCA
  8. 论文笔记总结_S2D_从稀疏到稠密
  9. java listener 原理_Java三大器之监听器(Listener)的工作原理和代码演示
  10. 自动化测试-selenium初始化Driver参考
  11. JAVA(int...i)问题
  12. 软件测试应遵循哪些原则?
  13. Excel如何将单元格公式显示出来
  14. Java面试手册——高频问题总结(二)
  15. 日产联手NASA开发新式固态电池,不用昂贵稀有金属,计划2028年商用
  16. Android设置视频背景
  17. 【Vue】webpack的基本使用
  18. 【论文阅读】流量预测
  19. Python+Eclipse配置`PyDev`完整教程
  20. 二进制里的「逢二进一」是什么意思

热门文章

  1. python的数值类型和运算符_python的数值类型和运算符
  2. 用MATLAB编程求出三位数中全部的水仙花数
  3. CTF 大小写字母转换 try lower and upper
  4. 移动端也能兼容的web页面制作2:导航栏、背景图片设置
  5. JavaScript 技术篇-使用js代码获取浏览器窗口标题名,js获取页面URL地址
  6. SDUT_2080最长公共子序列问题
  7. [YTU]_1985( C语言实验——保留字母)
  8. 自动调节图像的对比度 和改变图像的大小
  9. 【OpenMP实现】任意线程数并行化快排结合Merge排序100w--10线程下只用0.06s
  10. dataframe的重设index