C++ 随笔 知识点 Sendmessage,FindWindow,keybd_event

 
 

VC中退出应用程序-几种很有用的方法

 

1、OnOK()或OnCancel()//只对对话框有用

2、PostQuitMessage(0);//最常用

     PostMessage(WM_QUIT,0,0);//最常用

     ::SendMessage(AfxGetMainWnd()->m_hWnd,WM_CLOSE,0,0);//最常用      ::PostMessage(AfxGetMainWnd()->m_hWnd,WM_CLOSE,0,0);//最常用

3、ExitProcess(0);注意使用时先释放分配的内存,以免造成内存泄露

4、exit(0) 正常终止程序; exit(非0)非正常终止程序

5、OnClose();

void CMainFrame::OnClose() {         // TODO: Add your message handler code here and/or call default        if (MessageBox("确定要退出吗?","提示",MB_YESNO|MB_DEFBUTTON2)==IDYES)        {                 CFrameWnd::OnClose();        } }

 

6、向主窗口发送WM_CLOSE消息        SendMessage(WM_CLOSE); 如果要在其它类关闭应用程序,则 AfxGetMainWnd->SendMessage(WM_CLOSE)

 

 

Windows提供了一个模拟键盘API函数Keybd_event(),使用该函数可以相应的屏蔽键盘的动作。Keybd_event()函数能触发一个按键事件,也就是说会产生一个WM_KEYDOWN或WM_KEYUP消息。

 

该函数原型如下:   VOID keybd_event(   BYTE bVk, // virtual-key code   BYTE bScan, // hardware scan code   DWORD dwFlags, // flags specifying various function options   DWORD dwExtraInfo // additional data associated with keystroke   );   从原型可以看出,Keybd_event()共有四个参数:

      第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab(其他具体的参见附录:常用模拟键的键值对照表);

      第二个参数为扫描码,一般不用设置,用0代替就行;

      第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP";

      第四个参数一般也是置0即可。

 

例子1:模拟按下'A'键    keybd_event(65,0,0,0);    keybd_event(65,0,KEYEVENTF_KEYUP,0);

例子2:模拟按下'ALT+F4'键    keybd_event(18,0,0,0);    keybd_event(115,0,0,0);    keybd_event(115,0,KEYEVENTF_KEYUP,0);    keybd_event(18,0,KEYEVENTF_KEYUP,0);

 
 
 
HWND npWnd,childWnd;
npWnd=FindWindow("notepad",NULL);
childWnd=FindWindowEx(npWnd, NULL, "Edit", NULL);
SendMessage(childWnd, (UINT) WM_SETTEXT, NULL, (LPARAM)"hello!");
发键盘消息
SendMessage(hwnd,WM_KENDOWN,wParam,lParam);//hwnd是记事本窗口句柄
SendMessage(hwnd,WM_KENUP,wParam,lParam);
模拟键盘按下,放开
 
C语言可以调用所有dos命令。

通过system()函数调用。
不要新的黑窗加 start

system( "start /B notepad abc.txt");
启动 notepad,编 abc.txt。

start 的选择很多,例如:
/B -- 不开新窗
/min -- 窗最小化
 

C语言调用dos命令的问题

假如在我的电脑上有一个a.exe的程序,存在D盘,现在要用C语言写一段代码,用上dos的at命令,让程序在每天的中午12点调用a.exe。

#include <stdio.h> 
#include <stdlib.h> 

void main() 
{ 
char* comStr1="at 12:00 /interactive /every:M,T,W,Th,F,S,Su d:\a.exe";//每天12点自动执行,弹出a.exe界面 
char* comStr2="at 12:00 /every:M,T,W,Th,F,S,Su d:\a.exe";//每天12点自动执行,不弹出a.exe界面,后台执行 
char* comDel="at /delete /yes"; //删除计划 
char c; 

printf("执行时是否弹出界面(y/n):\n"); 
scanf("%c",&c); 
c=tolower(c); 
if(c=='y')//需要弹出界面进行交互 
system(comStr1); 
else if(c=='n')//后台运行 
system(comStr2); 
else 
printf("输入错误!\n"); 

//下面是取消计划的功能,如果你不想有取消功能,就删除下面的代码 
printf("是否要删除所有计划(y/n):\n"); 
getchar();//清空刚提示输入时输入的回车符 
scanf("%c",&c); 
c=tolower(c); 
if(c=='y')//此时删除所有计划 
{ 
system(comDel); 
printf("已删除所有计划!\n"); 
} 

getchar(); 
}
C++如何移动文件
MoveFile();  加头文件<windows.h>
MoveFile(TEXT("C:\\1.JPG"),TEXT("D:\\1.JPG"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值