Windows-Python 应用:使用消息操作窗口

本文介绍了在Windows环境中,如何通过消息操作而非界面点击来实现自动化工具的控制。讲解了Windows窗口、消息队列、消息及消息处理的基本概念,并提供了使用`SendMessage`、`PostMessage`等函数进行消息发送的示例,展示了如何实现窗口的点击和输入操作。
摘要由CSDN通过智能技术生成

在Windows端经常会使用到一些带界面的工具,但在实现自动化的时候对这些工具的自动化如果使用位置点击的方式,那么自动化的稳定性不太好,并且实现起来也不方便,除了界面点击的方式是否还有其它更简单、稳定的方式呢?今天就介绍一种通过消息操作界面的方法。

Windows系统是建立在事件驱动的机制上的,通过消息的传递来实现的,消息提供了应用程序之间、应用程序与windows 系统之间进行通信的手段。

Windows窗口

窗口是位于屏幕中的一个区域,它用于接收用户的输入,然后以文本或图形的形式显示输出。比如一个应用程序,一般都是以图形界面的形式展示,这个图形界面就是应用程序的窗口,其中可能还包括工具栏、按钮、滚动条、输入框等等,这些也是窗口,通常被称为“子窗口”或“控件窗口”或“子窗口控件”。

HELLOWIN.C/*--------------------------------------------------------------------------------------------

HELLOWIN.C——Displays“Hello, Windows 98!”in client area(c) Charles Petzold, 1998

---------------------------------------------------------------------------------------------*/# include < windows.h >LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

{static TCHAR szAppName [] = TEXT (" HelloWin ");

HWND hwnd;

MSG msg;

WNDCLASS wndclass;//窗口类wndclass.style = CS_HREDRAW | CS_VREDRAW;

wndclass.lpfnWndProc=WndProc;

wndclass.cbClsExtra=0;

wndclass.cbWndExtra=0;

wndclass.hInstance=hInstance;

wndclass.hIcon=LoadIcon (NULL, IDI_APPLICATION);

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);

wndclass.hbrBackground=(HBRUSH) GetstockObject (WHITE_BRUSH);

wndclass.lpszMenuName=NULL;

wndclass.lpszclassName= szAppName;if (!RegisterClass (&wndclass)) //窗口类的注册{

MessageBox (NULL, TEXT(“This program requires Windows NT !*”),SzAppName, MB_ICONERROR);return 0;

}//窗口的创建hwnd = CreateWindow ( szAppName,//窗口类名TEXT(“Hello程序”),//窗口标题WS_OVERLAPPEDWINDOW,//窗口风格CW_USEDEFAULT,// x的初始位置CW_USEDEFAULT,// y的初始位置CW_USEDEFAULT,//初始x大小CW_USEDEFAULT,//初始y大小NULL,//父窗口句柄NULL,//窗口菜单句柄hInstance,//程序实例句柄NULL);//创建参数ShowWindow (hwnd, iCmdShow); //窗口的显示Updatewindow (hwnd); //窗口客户区重绘//消息循环,从消息队列中获取消息while (GetMessage (&msg, NULL, 0, 0))

{

TranslateMessage (&msg);

DispatchMessage (&msg);

}return msg.wParam;

}//窗口过程,决定了窗口客户区的显示内容以及窗口如何对用户的输入做出响应。即消息的处理。LRESULT CALLBACK WndProc (HWND hwnd, UINT message,WPARAM wParam, LPARAM lParam)

{

HDC hdc;

PAINTSTRUCT ps;

RECT rect;switch(message)

{case WM_CREATE:

PlaySound (TEXT (" hellowin .wav"), NULL, SND_FILENAME I SND_ASYNC); return 0;case MWM_PAINT:

hdc = BeginPaint (hwnd, &ps);

GetClientRect (hwnd,&rect);

Drawtext (hdc, TEXT("Hello, Windows 98 !”), -1, &rect ,

DT_SINGLELINE | DT_CENTER | DT_VCENTER);

EndPaint (hwnd, &ps);

return0;

case MWM_DESTROY:

PostQuitMessage(0);

return 0;

}

return DefwindowProc (hwnd, message, wParam, lParam);

}

• 系统消息队列

• 应用程序消息队列

发生事件时,Windows先将触发的消息放入系统消息队列,之后根据消息的 hwnd 值将消息复制到相应的应用程序消息队列,接着应用程序中的消息循环在其消息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值