随笔分类 -  Windows

摘要:// ReverseFileDemo.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ if(!(argc >= 1)) { cout<<"参数过少"<<endl; system("pause"); return -1; } TCHAR szSrcFilePath[MAX_PATH] = {0}; _tcs 阅读全文
posted @ 2013-07-26 22:20 瓜蛋 阅读(475) 评论(0) 推荐(0) 编辑
摘要:本文转自:http://blog.csdn.net/clever101/article/details/8286066 上次我们学习了怎么用Makefile编译一个控制台工程。这次我们学习一下如何使用Makefile来编译一个win 32的GUI程序。win 32的GUI程序其编译过程大部分和控制台程序一样,不同的是多了一步RC编译器将资源文件编译成res文件,然后在最后一步链接中需要把这个res文件链接到exe文件中。好,现在让我们在实践中学习吧。新建一个win32 应用程序工程——Win32Test。让我们先完成C++代码部分的Makefile的编写,还记得Makefile的原则是以终.. 阅读全文
posted @ 2013-07-07 02:47 瓜蛋 阅读(1781) 评论(0) 推荐(0) 编辑
摘要:void get_WanIp(){ char Buf_File_Read[MAX_PATH] = {0}; char IP_Temp[128]; char IP_Host[64]; int Result_URLDownloadToFile = 1; char szFilePath[MAX_PATH] = {0}; GetTempPathA(MAX_PATH,szFilePath); strcat(szFilePath,"IPinTheWorld.ini"); Result_URLDownloadToFile ... 阅读全文
posted @ 2013-06-26 13:12 瓜蛋 阅读(659) 评论(0) 推荐(0) 编辑
摘要:原谅转自:http://blog.sina.com.cn/s/blog_57dff12f0100d5so.html#defineDFP_GET_VERSION0x00074080#defineFILE_DEVICE_SCSI0x0000001b#defineIOCTL_SCSI_MINIPORT_IDENTIFY((FILE_DEVICE_SCSI << 16 ) + 0x0501)#defineIOCTL_SCSI_MINIPORT0x0004D008#defineIDENTIFY_BUFFER_SIZE512#defineSENDIDLENGTH(sizeof (SENDCMD 阅读全文
posted @ 2013-05-09 02:07 瓜蛋 阅读(875) 评论(0) 推荐(0) 编辑
摘要:原谅转自:http://blog.sina.com.cn/s/blog_612b382d0100efe1.html首先说明,CPU序列号并不是全球唯一的,以Intel为例,其不同型号的CPU序列号肯定不同,但不保证同型号的CPU序列号也各不相同,但据说P3后都是全球唯一的,一帆风没有详细考证。CPU序列号有一个好处就是非常难以修改,至少目前还没听说。将CPU ID 和MAC id 、硬盘id组合起来生成软件序列号,可以大大增加序列号的安全性。(后两者都可以通过软件方法修改)。好了,转入正题,闷头发源码:CString CGetCpuIDDlg::GetCPUID(){CString CPUID 阅读全文
posted @ 2013-05-08 23:37 瓜蛋 阅读(1594) 评论(0) 推荐(0) 编辑
摘要:原谅转自:http://blog.sina.com.cn/s/blog_612b382d0100efdt.html1,第一步:创建设备对象,得到设备句柄,设备为硬盘。{CString sFilePath;sFilePath.Format("\\\\.\\PHYSICALDRIVE%d", driver);HANDLE hFile=::CreateFile(sFilePath,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL, OPEN_EXISTING,0, NULL);DWORD dw 阅读全文
posted @ 2013-05-08 23:30 瓜蛋 阅读(1692) 评论(0) 推荐(0) 编辑
摘要:inline hook 实际上就是指 通过改变目标函数头部的代码来使改变后的代码跳转到我们自己设置的一个函数里,产生hook。今天就拿MessageBoxA这个api函数来做实验。功能就是当程序调用MessageBoxA 时,我们打印出MessageBoxA的参数大概代码结构应该是这样typedef int (WINAPI *MessageBox_type) ( __in_opt HWND hWnd, __in_opt LPCSTR lpText, __in_opt LPCSTR lpCaption, __in UINT uType) ;MessageBox_ty... 阅读全文
posted @ 2013-04-08 12:04 瓜蛋 阅读(12457) 评论(0) 推荐(0) 编辑
摘要:我运行VC98\Bin下的vcvar32.bat试试,并提醒我注意:运行刚才那个bat后,然后要在同一个窗口中运行NMAKE. 阅读全文
posted @ 2013-03-16 23:32 瓜蛋 阅读(417) 评论(0) 推荐(0) 编辑
摘要:common control 4.7版本介绍了一个新的特性叫做Custom Draw,这个名字显得模糊不清,让人有点摸不着头脑,而且MSDN里也只给出了一些如风的解释和例子,没有谁告诉你你想知道的,和究竟这个特性有什么好处。Custom draw可以被想象成一个轻量级的,容易使用的重绘方法(重绘方法还有几种,例如Owner Draw等)。这种容易来自于我们只需要处理一个消息(NM_CUSTOMDRAW),就可以让Windows为你干活了,你就不用被逼去处理"重绘过程"中所有的脏活了。这篇文章的焦点是如何在一个LISTCTRL控件上使用Custom Draw消息。究其原因,一部分是因为我已经在我 阅读全文
posted @ 2013-02-11 19:34 瓜蛋 阅读(331) 评论(0) 推荐(0) 编辑
摘要:No SynchronizationThis first example illustrates two unsynchronized threads. The main loop, which is the primary thread of a process, prints the contents of a global array of integers. The thread called "Thread" continuously populates the global array of integers.Collapse|Copy Code #includ 阅读全文
posted @ 2013-01-30 12:05 瓜蛋 阅读(267) 评论(0) 推荐(0) 编辑
摘要:---------------------------------------------------线程----------------------------------------------------CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) listen,NULL,0,&IDThread);参数1 : 按MSDN上的说法,为空时handle不可以被继承.参数2 : 栈的大小, 为0时取默认值.参数3 : 线程函数指针, 上面的listen就是函数名参数4 : 传给函数的参数指针, 因为只能传一个, 通过struct把所有参数装在 阅读全文
posted @ 2013-01-29 14:43 瓜蛋 阅读(3081) 评论(0) 推荐(0) 编辑
摘要:void CJx3LoginDlg::OnCustomdrawList( NMHDR* pNMHDR, LRESULT* pResult ){ NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR ); // Take the default processing unless we set this to something else below. *pResult = 0; // First thing - check the draw stage. If it's the control.. 阅读全文
posted @ 2013-01-24 09:10 瓜蛋 阅读(773) 评论(0) 推荐(0) 编辑
摘要://以下在DialogInit消息中写 SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE, GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000); this->SetTimer(245,100,NULL);void CLayerWndDlg::OnTimer(UINT_PTR nIDEvent){ // TODO: 在此添加消息处理程序代码和/或调用默认值 static int i = 0; if(nIDEvent == 2... 阅读全文
posted @ 2012-12-10 21:47 瓜蛋 阅读(866) 评论(0) 推荐(0) 编辑
摘要:#pragma onceclass LogFile{protected: CRITICAL_SECTION _csLock; char * _szFileName; HANDLE _hFile; bool OpenFile();//打开文件, 指针到文件尾 DWORD Write(LPCVOID lpBuffer, DWORD dwLength); virtual void WriteLog( LPCVOID lpBuffer, DWORD dwLength);//写日志, 可以扩展修改 void Lock() {::EnterCriticalSec... 阅读全文
posted @ 2012-10-09 13:46 瓜蛋 阅读(1878) 评论(0) 推荐(0) 编辑
摘要:int x = GetDlgItemInt(IDC_EDIT1) ; //要移动到的 x 坐标 int y = GetDlgItemInt(IDC_EDIT2) ; // y int cx_screen = ::GetSystemMetrics(SM_CXSCREEN); //屏幕 宽 int cy_screen = ::GetSystemMetrics(SM_CYSCREEN); // 高 int real_x = 65535 * x / cx_screen; //转换后的 x int real_y = 6553... 阅读全文
posted @ 2012-09-22 10:31 瓜蛋 阅读(5363) 评论(0) 推荐(2) 编辑
摘要:摘自《Borland C++BuilderT 6 Developer's Guide》 一书Using Microsoft Visual C++ DLLs with C++BuilderAs powerful as C++Builder is, the majority of DLLs developed and used within the software community are built using Visual C++. Therefore, chances are you will need to interface your C++Builder code with 阅读全文
posted @ 2012-09-08 21:05 瓜蛋 阅读(950) 评论(0) 推荐(0) 编辑
摘要:HRSRC hRrc=::FindResourceW(NULL, MAKEINTRESOURCE(IDR_TEXT1),_T("TEXT")); if(hRrc==NULL) { AfxMessageBox(_T("hRrc is null")); return; } HGLOBAL hDataSource=::LoadResource(NULL,hRrc); if(hDataSource==NULL) { AfxMessageBox(_T("hDataSource is null")); re... 阅读全文
posted @ 2012-08-26 09:14 瓜蛋 阅读(925) 评论(0) 推荐(0) 编辑
摘要:BOOL Crar2Dlg::FindProcess(CString ProcessName){ HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); BOOL ret = FALSE; PROCESSENTRY32* info=new PROCESSENTRY32;//声明进程信息变量 info->dwSize=sizeof(PROCESSENTRY32); int i=0; if(Process32First(handle,info)) { if(GetLas... 阅读全文
posted @ 2012-08-26 09:01 瓜蛋 阅读(256) 评论(0) 推荐(0) 编辑
摘要:时间紧迫,直接上代码:得到电脑的默认打印机 TCHAR szBuffer[1024]={0}; DWORD length = 1024; int ret = ::GetDefaultPrinter(szBuffer,&length); if(ret == FALSE) ret = ::GetLastError(); else { SetDlgItemText(IDC_EDIT1,szBuffer); return; } if (ret == ERROR_INSUFFICIENT_BUFFER) { ... 阅读全文
posted @ 2012-08-24 23:17 瓜蛋 阅读(9639) 评论(0) 推荐(1) 编辑
摘要:插入列 const int nColumnWidth=80; m_ListPrinter.InsertColumn(0,_T("PrinteName"),LVCFMT_CENTER,nColumnWidth); m_ListPrinter.InsertColumn(1,_T("ServerName"),LVCFMT_CENTER,nColumnWidth); m_ListPrinter.InsertColumn(2,_T("DriverName"),LVCFMT_CENTER,nColumnWidth); m_ListPrinter. 阅读全文
posted @ 2012-08-24 23:11 瓜蛋 阅读(2055) 评论(0) 推荐(0) 编辑