VC一些小细节.docx

上传人:b****8 文档编号:30017165 上传时间:2023-08-04 格式:DOCX 页数:14 大小:21.48KB
下载 相关 举报
VC一些小细节.docx_第1页
第1页 / 共14页
VC一些小细节.docx_第2页
第2页 / 共14页
VC一些小细节.docx_第3页
第3页 / 共14页
VC一些小细节.docx_第4页
第4页 / 共14页
VC一些小细节.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

VC一些小细节.docx

《VC一些小细节.docx》由会员分享,可在线阅读,更多相关《VC一些小细节.docx(14页珍藏版)》请在冰豆网上搜索。

VC一些小细节.docx

VC一些小细节

VC一些小细节

1vc++中WM_QUERYENDSESSIONWM_ENDSESSION为系统[xitong]关机消息[xiaoxi]。

2在VC下执行[zhihang]DOS命令[mingling]

a.system("mdc:

\\12");

b.WinExec("Cmd.exe/Cmdc:

\\12",SW_HIDE);

c.ShellExecute

ShellExecute(NULL,"open","d:

\\WINDOWS\\system32\\cmd.exe","/cmdd:

\\zzz","",SW_SHOW);

d.CreateProcess

下面这个示例的函数[hanshu]可以把给定的DOS命令[mingling]执行[zhihang]一遍,并把DOS下的输出[shuchu]内容记录在buffer中。

同时示范了匿名管道重定向[zhongdingxiang]输出[shuchu]的用法:

-------------------------------------------------------------------------------------

BOOLCDOSDlg:

:

ExecDosCmd()

{

#defineEXECDOSCMD"dirc:

"//可以换成你的命令[mingling]

SECURITY_ATTRIBUTESsa;

HANDLEhRead,hWrite;

sa.nLength=sizeof(SECURITY_ATTRIBUTES);

sa.lpSecurityDescriptor=NULL;

sa.bInheritHandle=TRUE;

if(!

CreatePipe(&hRead,&hWrite,&sa,0))

{

returnFALSE;

}

charcommand[1024];//长达1K的命令[mingling]行[minglinghang],够用了吧

strcpy(command,"Cmd.exe/C");

strcat(command,EXECDOSCMD);

STARTUPINFOsi;

PROCESS_INFORMATIONpi;

si.cb=sizeof(STARTUPINFO);

GetStartupInfo(&si);

si.hStdError=hWrite;//把创建进程[jincheng]的标准错误[cuowu]输出[shuchu]重定向[zhongdingxiang]到管道输入[shuru]

si.hStdOutput=hWrite;//把创建进程[jincheng]的标准输出[shuchu][biaozhunshuchu]重定向[zhongdingxiang]到管道输入[shuru]

si.wShowWindow=SW_HIDE;

si.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;

//关键步骤,CreateProcess函数[hanshu]参数[canshu]意义请查阅MSDN

if(!

CreateProcess(NULL,command,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))

{

CloseHandle(hWrite);

CloseHandle(hRead);

returnFALSE;

}

CloseHandle(hWrite);

charbuffer[4096]={0};//用4K的空间[kongjian]来存储输出[shuchu]的内容,只要不是显示[xianshi]文件[wenjian][xianshiwenjian]内容,一般情况[qingkuang]下是够用了。

DWORDbytesRead;

while(true)

{

if(ReadFile(hRead,buffer,4095,&bytesRead,NULL)==NULL)

break;

//buffer中就是执行[zhihang]的结果,可以保存到文本[wenben],也可以直接输出[shuchu]

AfxMessageBox(buffer);//这里是弹出对话框[duihuakuang]显示[xianshi]

}

CloseHandle(hRead);

returnTRUE;

}

-------------------------------------------------------------------------------------

3删除[shanchu]目录,包含删除[shanchu]子文件[wenjian]夹以及其中的内容

-------------------------------------------------

BOOLDeleteDirectory(char*DirName)//如删除[shanchu]DeleteDirectory("c:

\\aaa")

{

CFileFindtempFind;

chartempFileFind[MAX_PATH];

sprintf(tempFileFind,"%s\\*.*",DirName);

BOOLIsFinded=(BOOL)tempFind.FindFile(tempFileFind);

while(IsFinded)

{

IsFinded=(BOOL)tempFind.FindNextFile();

if(!

tempFind.IsDots())

{

charfoundFileName[MAX_PATH];

strcpy(foundFileName,tempFind.GetFileName().GetBuffer(MAX_PATH));

if(tempFind.IsDirectory())

{

chartempDir[MAX_PATH];

sprintf(tempDir,"%s\\%s",DirName,foundFileName);

DeleteDirectory(tempDir);

}

else

{

chartempFileName[MAX_PATH];

sprintf(tempFileName,"%s\\%s",DirName,foundFileName);

DeleteFile(tempFileName);

}

}

}

tempFind.Close();

if(!

RemoveDirectory(DirName))

{

MessageBox(0,"删除[shanchu]目录失败!

","警告信息[xinxi]",MB_OK);//比如没有找到文件[wenjian]夹,删除[shanchu]失败,可把此句删除[shanchu]

returnFALSE;

}

returnTRUE;

}

-------------------------------------------------------------

4让程序暂停[zanting][chengxuzanting]:

system("PAUSE");

5在PreTranslateMessage中捕捉键盘[jianpan]事件[shijian]

if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_RETURN)returnTRUE;//注意return的值

6更改按键消息[xiaoxi](下面的代码[daima]可把回车键消息[xiaoxi]改为TAB键消息[xiaoxi])

-------------------------------------------------------

   BOOLCT3Dlg:

:

PreTranslateMessage(MSG*pMsg)

   {

   if(pMsg->message==WM_KEYDOWN&&VK_RETURN==pMsg->wParam)

   {

   pMsg->wParam=VK_TAB;

   }

   returnCDialog:

:

PreTranslateMessage(pMsg);

   }

------------------------------------------

7MoveWindow:

一个可以移动、改变窗口[chuangkou]位置[weizhi]和大小的函数[hanshu]

816进制转化成10进制小数的问题[wenti]

    用一个读二进制[erjinzhi]文件[wenjian][erjinzhiwenjian]的软件[ruanjian]读文件[wenjian]

    二进制[erjinzhi]文件[wenjian][erjinzhiwenjian]中的一段8FC2F53C最后变成了0.03

    请问这是怎么转换[zhuanhuan]过来的?

  方法[fangfa]一:

浮点技术法,如

   DWORDdw=0x3CF5C28F;

   floatd=*(float*)&dw;//0.03;

     方法[fangfa]二:

浮点的储存方式和整数完全两样,你想了解的话可以去

        

        看一看,不过通常我们都不必了解它就可以完成转换[zhuanhuan]。

        chara[4]={0x8F,0xC2,0xF5,0x3C};

        floatf;

        memcpy(&f,a,sizeof(float));

TRACE("%d",0x3CF5C28F);

9EDIT控件的 EM_SETSEL,EM_REPLACESEL消息[xiaoxi]

10在其它进程[jincheng]中监视键盘[jianpan]消息[xiaoxi]:

用SetWindowsHookEx(WH_KEYBOARD_LL,...);

13在桌面[zhuomian]上任意位置[weizhi]写字

--------------------------------------------------

HDCdeskdc=:

:

GetDC(0);

CStringstext="我的桌面[zhuomian]";

:

:

TextOut(deskdc,100,200,stext,stext.GetLength());

:

:

ReleaseDC(0,deskdc);

------------------------------------------------------

14HWNDthread_hwnd=Findwindow(NULL,"你要监控的进程[jincheng]窗体[chuangti](用SPY++看)"),

if(thread_hwnd==NULL)。

elseDWORDthread_id=GetWindowThreadProcessId(thread_hwnd,NULL)

15waveOutGetVolume()可以得到波形[boxing]音量大小

16隐藏桌面[zhuomian]图标[tubiao]并禁用右键[youjian]功能菜单[caidan]:

------------------------------------

HWNDHwd=:

:

FindWindow("Progman",NULL);

if(bShowed)

:

:

ShowWindow(Hwd,SW_HIDE);

else

:

:

ShowWindow(Hwd,SW_SHOW);

bShowed=!

bShowed;

---------------------------------------

17获得程序当前路径[lujing]:

---------------------------------------------

charch[256];

GetModuleFileName(NULL,ch,255);

for(inti=strlen(ch);i&&ch[i]!

='\\';i--);

ch[i]=0;

AfxMessageBox(ch);

----------------------------------------------

18KeyboardProc的lParam中包含着许多按键信息[xinxi],其中第31位(从0开始)为0表示是按下按键,为1表示松开按键。

(lParam&0x80000000)进行二进制[erjinzhi]'与'计算,效果是取第31位的值。

(lParam&0x40000000)是取第30位,30位表示按键的上一个状态[zhuangtai],为1表示之前键已经是按下的,0表示松开。

  lParam

  [in]Specifiestherepeatcount,scancode,extended-keyflag,contextcode,previouskey-stateflag,andtransition-stateflag.FormoreinformationaboutthelParamparameter,seeKeystrokeMessageFlags.Thisparametercanbeoneormoreofthefollowingvalues.

  0-15

  Specifiestherepeatcount.Thevalueisthenumberoftimesthekeystrokeisrepeatedasaresultoftheuser'sholdingdownthekey.

  16-23

  Specifiesthescancode.ThevaluedependsontheOEM.

  24

  Specifieswhetherthekeyisanextendedkey,suchasafunctionkeyorakeyonthenumerickeypad.Thevalueis1ifthekeyisanextendedkey;otherwise,itis0.

  25-28

  Reserved.

  29

  Specifiesthecontextcode.Thevalueis1iftheALTkeyisdown;otherwise,itis0.

  30

  Specifiesthepreviouskeystate.Thevalueis1ifthekeyisdownbeforethemessageissent;itis0ifthekeyisup.

  31

  Specifiesthetransitionstate.Thevalueis0ifthekeyisbeingpressedand1ifitisbeingreleased.

19复制文件[wenjian]应该用到CopyFile或是CopyFileEx这两个API

20移动窗口[chuangkou]的位置[weizhi]或改变大小:

MoveWindow/SetWindowPos

21我的程序是当前运行[yunhang]的程序时,可以用setcursor()来设置[shezhi]光标[guangbiao]的图标[tubiao]。

而且可以用setcapture()是鼠标[shubiao]移动到我得程序窗口[chuangkou]之外时也是我设置[shezhi]的图标[tubiao]

但是如果我得程序不是当前的运行[yunhang]程序的,鼠标[shubiao]就会变会默认[moren]的。

怎样能够,使得不变回默认[moren]的,还是用我设置[shezhi]的光标[guangbiao]?

SetSystemCursor

22SendMessage函数[hanshu]的几个用法:

控制[kongzhi]按钮按下的,是这么用的

SendMessage(n1,WM_COMMAND,MAKELPARAM(ID,BN_CLICKED),(LPARAM)n2); (n1,n2是句柄[jubing])

而得到文本[wenben]内容,是这样用的,

SendMessage(hWnd,WM_GETTEXT,10,(LPARAM)buf),

23处理一个单行EDIT的WM_CTLCOLOR要同时响应[xiangying]nCtlColor=CTLCOLOR_EDIT和CTLCOLOR_MSGBOX的两个情况[qingkuang],参考[cankao]

24设备发生改变处理函数[hanshu]可在CWnd:

:

OnDeviceChange中,捕获[buhuo]WMDEVICECHANGE事件[shijian]不能区分诸如设备插入、拔下消息[xiaoxi]。

25把字符[zifu]"abc\n123"存入文本[wenben]文件[wenjian]中时,文件[wenjian]内容没看见换行[huanhang],其实用word打开该文件[wenjian]是有换行[huanhang]的。

另外用"abc\r\n123"代替也可看见换行[huanhang]。

26:

:

SetFocus(:

:

GetDesktopWindow());或:

:

BringWindowToTop(:

:

GetDesktopWindow());

  :

:

GetDesktopWindow()这里可获得桌面[zhuomian]窗口[chuangkou]的句柄[jubing]

27数组[shuzu]初始化[chushihua]:

inta[24][34];//声明[shengming]数组[shuzu]

memset(a,-1,24*34);//全部元素初始化[chushihua]成-1,但初始化[chushihua]成除0和-1以外的数值是不行的

28SHGetFileInfo函数[hanshu]可获得文件[wenjian]信息[xinxi]。

29创建一个控件:

HWNDhEdit=CreateWindow("EDIT",NULL,WS_CHILD|WS_VISIBLE|ES_LEFT,50,20,50,20,hwnd,NULL,hInst,NULL);//hwnd参数[canshu]为父窗口[chuangkou]句柄[jubing]

30VC中对声音文件[wenjian]的操作:

31调用[tiaoyong]其它程序又要隐藏窗口[chuangkou]:

用CreateProcess函数[hanshu]调用[tiaoyong][hanshutiaoyong],再拿到窗口[chuangkou]句柄[jubing],然后:

:

ShowWindow(hWnd,SW_HIDE);

32 读取[duqu]文本[wenben]文件[wenjian]中的一行:

   用CFile类的派生[paisheng]类[paishenglei]:

CStdioFile的方法[fangfa]:

CStdioFile:

:

ReadString

33删除[shanchu]非空文件[wenjian]夹:

------------------------------------------------

SHFILEOPSTRUCTshfileop;

shfileop.hwnd=NULL;

shfileop.wFunc=FO_DELETE;

shfileop.fFlags=FOF_SILENT|FOF_NOCONFIRMATION;

shfileop.pFrom="c:

\\temp";//要删除[shanchu]的文件[wenjian]夹

shfileop.pTo="";

shfileop.lpszProgressTitle="";

shfileop.fAnyOperationsAborted=TRUE;

intnOK=SHFileOperation(&shfileop);

-------------------------------------------------

34函数[hanshu]前面加上:

:

是什么意思?

   叫域运算[yunsuan]符...在MFC中表示调用[tiaoyong]API...或其它全局函数[hanshu]...为了区分是mfc函数[hanshu]还是api

   详见:

35CImageList的用法:

36有关控件的一些常见问答:

<==========================很不错的地方哦

37在多文档[wendang]客户[kehu]区中增加位图[weitu]底图演示程序[yanshichengxu]:

我的对应工程:

AddBackgroundBitmap

38用VC++6.0实现PC机与单片机[danpi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1