1.查看安全策略 secpol.msc
2.使用cl 批量编译时,把不需改变的先生成obj
然后把需要改变的单独生成obj(如果是.h文件,则把所有包含.h文件的*.cpp全部使用cl生成obj)
然后使用link把.obj文件链接起来
3.2008R2无法打补丁的解决方法
C:\Windows\System32\catroot2
目录权限应用到所有子目录及文件上.(里面有一个关键的权限是CrytSvc用户要用全部的权限.)
4.windows 命令行下查询当前用户:whoami|query user
5.如何拷贝一个工程的对话框资源到另一个工程中?
有两种方法可以实现:
1)你可以直接拷贝resource,用VC++以文本的方式或者直接用文本编辑器打开.rc文件,将有关的片段从
一个工程拷贝到另一个工程.你可以通过查找如下字样的片段(此片段用来定义对话框资源)来拷贝你要
的部分:
IDD_MYDIALOG_ID DIALOG DISCARDABLE 0, 0, 235, 55
这里的IDD_MYDIALOG_ID是你的对话框的ID,将到此片段结尾的部分全拷下来,通常你还要给新的工程
加一个ID(通过DevStudio的工具或者直接修改resource.h文件).
2)可以通过DevStudio的copy/paste功能.首先,在编辑器以"auto"模式打开.rc文件,这时resource
正确的显示出来.然后,选中要拷贝的对话框的ID,在Edit菜单里选Copy或者按住Ctrl+C.然后打开目标
resource文件,在Edit菜单里选Paste或者按住Ctrl+V.
6.消息映射
有对话框A,B
从A中发消息给B然后B处理。
准备工作,先定义消息,如下
#define WM_B_NOTIFY WM_USER + 300
首先,必须将B的对话框句柄传送给A,暂时叫m_hWndB;
在A的发送消息的地方这样写:
::SendMessage( m_hWndB,WM_B_NOTIFY,TRUE,NULL );
这样A中的处理就完了,下面说B 中的
首先定义消息处理函数,如下
void B::ModiNotify( WPARAM wParam, LPARAM lParam )
{
MessageBox("小样,我就不信,搞不定你!");
}
然后加消息隐射,如下:
BEGIN_MESSAGE_MAP(CB, CDialog)
//{{AFX_MSG_MAP(CRPServerDlg)
ON_MESSAGE( WM_B_NOTIFY,ModiNotify )
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
7.hosts本地绑定域名
管理员权限的CMD下:
notepad %windir%\system32\drivers\etc\hosts
8.word2007去掉回车
单击“word”左上角的“圆”→word选项→显示→把“段落标记”前的勾去掉→确定
9.win快捷键
osk------------打开屏幕键盘
eventvwr-------事件查看器
secpol.msc-----本地安全策略
clip(win7)-----------剪贴板查看器 clipbrd(xp)
- int CGdiWndDlg::InternetGetFile (HWND hWnd,CString szUrl,CString szFileName)
- {
- DWORD dwFlags;
- InternetGetConnectedState(&dwFlags, 0); //获取当前网络连接信息
- CHAR strAgent[64];
- sprintf(strAgent, "Agent%ld", timeGetTime()); //timeGetTime用以获取系统启动后的时间
- HINTERNET hOpen;
- if(!(dwFlags & INTERNET_CONNECTION_PROXY))
- hOpen = InternetOpenA(strAgent, INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0);
- else
- hOpen = InternetOpenA(strAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
- if(!hOpen)
- {
- AfxMessageBox("Internet连接错误!");
- return -1;
- }
- DWORD dwSize; //CHAR szHead[] = "Accept: **/r/nAccept-Language: zh-cn/r/nAccept-Encoding: gzip, deflate/r/nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2; .NET CLR 1.1.4322)");
- VOID* szTemp[16384];
- HINTERNET hConnect;
- CFile file;
- if ( !(hConnect = InternetOpenUrlA ( hOpen, szUrl, szHead,
- lstrlenA (szHead), INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD, 0)))
- {
- AfxMessageBox("不能打开该URL!");
- return -1;
- }
- if (file.Open(szFileName,CFile::modeWrite|CFile::modeCreate)==FALSE )
- {
- AfxMessageBox("不能打开本地的文件!");
- return -1;
- }
- DWORD dwByteToRead = 0;
- DWORD dwSizeOfRq = 4;
- DWORD dwBytes = 0;
- if (!HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER,
- (LPVOID)&dwByteToRead, &dwSizeOfRq, NULL))
- {
- dwByteToRead = 0;
- }
- DWORD start; //记录时间
- DWORD end;
- DWORD time;
- int nPos;
- CString tempstring;
- time = 10;
- start = timeGetTime();
- do
- {
- if (!InternetReadFile (hConnect, szTemp, 16384, &dwSize))
- {
- AfxMessageBox("读文件出错!");
- file.Close();
- return -1;
- }
- if (dwSize==0)
- break;
- else
- file.Write(szTemp,dwSize);
- dwBytes+=dwSize;
- if(dwByteToRead)
- {
- tempstring.Format("%d%%",(dwBytes*100)/dwByteToRead);
- nPos=(dwBytes*100)/dwByteToRead; //
- SetDlgItemText(IDC_PERCENT_TEXT,tempstring);
- }
- float fSpeed = 0; //计算速度
- fSpeed = (float)dwBytes;
- fSpeed /= (float)((float)time/(float)1000);
- fSpeed /= (float)1024; //
- tempstring.Format("%4.2fKB/S",fSpeed);
- TRACE(tempstring); //下面的代码我将作出解释,请看下文
- SHOWINFO* pShowInfo=new SHOWINFO;
- pShowInfo->strSpeed.Format("%4.1f KB/秒",fSpeed);
- pShowInfo->nPos=nPos; ::PostMessage(hWnd,MSG_PROGRESS,0,(LPARAM)pShowInfo);
- end = timeGetTime();
- time = end - start;
- if(time == 0)
- time = 10;
- }while (TRUE);
- file.Close();
- InternetCloseHandle(hOpen); //关闭句柄
- return 0;
- } //这个函数的后半段代码我解释一下。SHOWINFO是一个自定义的结构体,用其把当前速度和进度传递给界面进度条。定义如下:
- struct SHOWINFO {
- CString strSpeed;
- int nPos;
- }; //传递信息给界面的方式是用PostMessage,这里,它的第二个参数就用SHOWINFO的对象了。注意使用时强制转化为LPARAM。MSG_PROGRESS是个自定义消息,它的响应函数为OnStep,在其中处理进度条的显示。代码如下:
- LRESULT CDownloadProgressDlg::OnStep(WPARAM wParam, LPARAM lParam)
- {
- CString strSpeed=((SHOWINFO*)lParam)->strSpeed;
- int nPos=((SHOWINFO*)lParam)->nPos;
- delete (SHOWINFO*)lParam;
- CString strPercent;
- strPercent.Format("%d%%",nPos);
- SetDlgItemText(IDC_SPEED_TEXT,strSpeed);
- SetDlgItemText(IDC_PERCENT_TEXT,strPercent);
- m_progress.SetPos(nPos);
- if(nPos==100)
- {
- GetDlgItem(IDC_DOWNLOAD)->EnableWindow(TRUE);
- GetDlgItem(IDOK)->EnableWindow(TRUE);
- MessageBox("文件下载完成!","OK",MB_ICONINFORMATION);
- }
- return TRUE;
- } //函数InternetGetFile在单独的线程中调用,起新线程的动作在“下载”按钮点击事件中进行,代码如下:
- void CDownloadProgressDlg::OnDownload() {
- // TODO: Add your control notification handler code here
- CString url,filename;
- GetDlgItemText(IDC_FILE_URL,url);
- GetDlgItemText(IDC_LOCAL_DIRECTORY,filename);
- if(url.IsEmpty())
- {
- AfxMessageBox("请输入Internet文件的URL!");
- return;
- }
- if(filename.IsEmpty())
- {
- AfxMessageBox("请输入需要保存的文件路径!");
- return;
- }
- DOWNINFO* pDownInfo=new DOWNINFO;
- pDownInfo->hWnd=m_hWnd;
- pDownInfo->url=url;
- pDownInfo->filename=filename;
- //
- //
- GetDlgItem(IDOK)->EnableWindow(FALSE);
- AfxBeginThread(DownProc,(LPVOID)pDownInfo);
- } //上面函数中的DOWNINFO也是一个自定义结构体,用以向新线程传递句柄、URL和文件名。定义如下:
- struct DOWNINFO {
- HWND hWnd;
- CString url;
- CString filename;
- }; //DownProc是个回调函数,它的函数结构和参数表系统已经为我们定义好。函数内容如下:
- UINT CDownloadProgressDlg::DownProc(LPVOID pDownInfo)
- {
- HWND hWnd=((DOWNINFO*)pDownInfo)->hWnd;
- CString url,filename;
- url=((DOWNINFO*)pDownInfo)->url;
- filename=((DOWNINFO*)pDownInfo)->filename;
- if(InternetGetFile(hWnd,url,filename)==0)
- {
- //
- AfxMessageBox("下载成功!"); //
- g_nAbort=TRUE;
- return 1;
- }
- else
- {
- AfxMessageBox("下载失败!");
- return 0;
- }