汉扬编程 C语言入门 VC|获取句柄并模拟键盘或鼠标事件

VC|获取句柄并模拟键盘或鼠标事件

模拟键盘鼠标事件有两种方法:

VC|获取句柄并模拟键盘或鼠标事件

SendMessage or PostMessage

VC|获取句柄并模拟键盘或鼠标事件

keybd_event,mouse_event

前者更强大,指定hwnd后可以后台发送,而后者只能够发送前台信息,也就是必须窗口最前。

对于keybd_event,mouse_event,可以用一个简单的实例说明一下:

SetCursorPos(x,y);

mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);

mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

keybd_event(k,0,0,0);

keybd_event(k,0,KEYEVENTF_KEYUP,0);

模拟按钮单击事件如有以下对话框:

编辑框关连了一个CString变量m-var。按钮定义了一个单击事件:

void CMyDlg::OnButton1()

{

UpdateData(1);

m_var = \”simulation of Mouse single-click event!\”;

UpdateData(0);

}

在对话框类函数的OnInitDialog事件加入如下代码:

BOOL CMyDlg::OnInitDialog()

{

CDialog::OnInitDialog();

HWND hWnddlg = AfxGetMainWnd()->m_hWnd; //主窗口句柄

HWND hwnd2=::GetDlgItem(hWnddlg,IDC_BUTTON1);//子窗口(或控件)句柄

::SendMessage(hwnd2,WM_LBUTTONDOWN,0,0);

::SendMessage(hwnd2,WM_LBUTTONUP,0,0);

……

}

对话框运行后,即可在编辑框中输入以下文字:simulation of Mouse single-click event!

自动向打开的记事本文件中输入一个字母//需要先打开记事本

int main()

{

HWND hWnd = ::FindWindowW(L\”Notepad\”,NULL); //搜索记事本程序主窗口句柄

HWND hWndc = ::GetWindow(hWnd,GW_CHILD); //获得记事本客户区句柄(该窗口是记事本主窗口的子窗口,即那个白色的可编辑区域) 。

if(hWndc) //如果获得了该句柄

::SendMessage(hWndc,WM_CHAR,\’keyboard input!\’,NULL);//发送按键消息

system(\”pause\”);

return 0;

}

上面控制台程序运行后,即可在打开的词本中添加\”keyboard input!\”文本。

-End-

C++核心准则:资源句柄类需要构造/析构/复制/移动操作

VC|获取句柄并模拟键盘或鼠标事件

Discussion: If a class is a resource handle, it needs a constructor, a destructor, and copy and/or move operations讨论:如果一个类是资源句柄,则它需要一个构造函数,一个析构函数以及复制和/或移动操作Reason(原因)

VC|获取句柄并模拟键盘或鼠标事件

To provide complete control of the lifetime of the resource. To provide a coherent set of operations on the resource.

提供对资源生命周期的完全控制。在资源上提供连贯的操作集。

Example(示例)

??? Messing with pointersNote(注意)

If all members are resource handles, rely on the default special operations where possible.

如果所有成员都是资源句柄,请尽可能依靠默认的特殊操作。

template<typename T> struct Named { string name; T value;};Now Named has a default constructor, a destructor, and efficient copy and move operations, provided T has.

现在,Named类具有默认的构造函数,析构函数以及有效的复制和移动操作(如果T具有)。

Enforcement(实施建议)

In general, a tool cannot know if a class is a resource handle. However, if a class has some of the default operations, it should have all, and if a class has a member that is a resource handle, it should be considered as resource handle.

通常,工具无法知道类是否是资源句柄。但是,如果类具有某些默认操作,则应具有全部默认操作,并且如果类具有作为资源句柄的成员,则应将其视为资源句柄。

原文链接

://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#discussion-if-a-class-is-a-container-give-it-an-initializer-list-constructor

新书介绍

《实战Python设计模式》是作者最近出版的新书,拜托多多关注!

本书利用Python 的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。

对设计模式感兴趣而且希望随学随用的读者通过本书可以快速跨越从理解到运用的门槛;希望学习Python GUI 编程的读者可以将本书中的示例作为设计和开发的参考;使用Python 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。

觉得本文有帮助?请分享给更多人。

关注微信公众号【面向对象思考】轻松学习每一天!

面向对象开发,面向对象思考!

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/cjia/6207.html

C语言中整型常量和实型常量有什么区别?

C语言/C加加编程学习之贪吃蛇小游戏源代码

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部