python如何读取word当中的控件的状态和信息

python如何读取word当中的控件的状态和信息,第1张

请注意,所有的程序在它们第一行都是#!/usr/bin/env/python,也就是说,我们想要Python的解释器来执行这些脚本。因此,如果你想你的脚本具有执行性,请使用chmod +x your-scriptpy, 那么你就可以使用/your-scriptpy来执行它了(在本文中你将会看到这种方式)

探索platform模块

platform模块在标准库中,它有很多运行我们获得众多系统信息的函数。让我们运行Python解释器来探索它们中的一些函数,那就从platformuname()函数开始吧:

>>> import platform

>>> platformuname()

('Linux', 'fedoraechorand', '374-204fc18x86_64', '#1 SMP Wed Jan 23 16:44:29 UTC 2013', 'x86_64')

如果你已知道linux上的uname命令,那么你就会认出来这个函数就是这个命令的一个接口。在Python 2上,它会返回一个包含系统类型(或者内核版本),主机名,版本,发布版本,机器的硬件以及处理器信息元组(tuple)。你可以使用下标访问个别属性,像这样:

>>> platformuname()[0]

'Linux'

在Python 3上,这个函数返回的是一个命名元组:

>>> platformuname()

uname_result(system='Linux', node='fedoraechorand',

release='374-204fc18x86_64', version='#1 SMP Wed Jan 23 16:44:29

UTC 2013', machine='x86_64', processor='x86_64')

因为返回结果是一个命名元组,这就可以简单地通过名字来指定特定的属性,而不是必须记住下标,像这样:

>>> platformuname()system

'Linux'

platform模块还有一些上面属性的直接接口,像这样:

>>> platformsystem()

'Linux'

>>> platformrelease()

'374-204fc18x86_64'

处理WM_KEYDOWN 消息,其中的wParam 为VK_RETURN 即是回车消息。

case WM_KEYDWON:

{

if ( VK_RETURN == msgwParam )

{

// 按下回车

// 获取焦点句柄

HWND hFocus = GetFocus();

if ( hFocus == hEdit )

{

// 处理你的逻辑

}

}

}

break;

如果需要C#版的,可以看下我之前写的:C#如何获取其他程序ListView控件中的内容

获取其他进程的数据需要使用到以下几个函数:

VirtualAllocEx()

VirtualFreeEx()

WriteProcessMemory()

ReadProcessMemory()

以获取任务管理器中的进程列表为例,运行结果如下:

关键代码

HANDLE hProcess;

LVITEM pointer;

HWND hwnd,hListview;

int headerhwnd; //listview控件的列头句柄

int rows,cols; //listview控件中的行列数

DWORD ProcessID = NULL;

DWORD ThreadID = NULL;

hwnd = (HWND)::FindWindow(_T("#32770") , _T("Windows 任务管理器"));

hwnd = (HWND)::FindWindowEx(hwnd, 0, _T("#32770") , NULL );

//进程界面窗口的句柄,通过SPY获取

hListview = (HWND)::FindWindowEx(hwnd, 0, _T("SysListView32") , NULL );

//listview的列头句柄

headerhwnd = ::SendMessage(hListview, LVM_GETHEADER, 0, 0);

//总行数:进程的数量

rows = ::SendMessage(hListview,LVM_GETITEMCOUNT,0,0);

//列表列数

cols = ::SendMessage(hListview, HDM_GETITEMCOUNT,0,0);

ThreadID = GetWindowThreadProcessId(hListview,&ProcessID);

//打开并插入进程

hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE,ProcessID);

//申请代码的内存区

pointer = (LVITEM)VirtualAllocEx(hProcess,NULL, sizeof(LVITEM),MEM_COMMIT, PAGE_READWRITE);

for (int i = 0; i < rows;i++ )

{

m_ProcessListInsertItem(i,_T(""));

for (int j = 0; j < cols;j++ )

{

LVITEM vItem;

vItemmask = LVIF_TEXT; //说明pszText是有效的

vItemiItem = i; //行号

vItemiSubItem = j; //列号

vItemcchTextMax = 512; //所能存储的最大的文本为256字节

LPWSTR pItem = NULL;

//申请内存空间

pItem = (LPWSTR)VirtualAllocEx(hProcess, NULL, 512, MEM_COMMIT, PAGE_READWRITE);

vItempszText = pItem;

WriteProcessMemory( hProcess , pointer , &vItem , sizeof(LVITEM),NULL);

::SendMessage(hListview, LVM_GETITEMW,(WPARAM)i,(LPARAM)pointer);

char ItemBuf[512];

memset(ItemBuf,0,512);

ReadProcessMemory(hProcess, pItem, ItemBuf, 512, NULL);

CString str;

strFormat(_T("%s"),ItemBuf);

m_ProcessListSetItemText(i,j,str);

//释放内存空间

VirtualFreeEx(hProcess, pItem, 0, MEM_RELEASE);

}

}

//释放内存空间

VirtualFreeEx(hProcess, pointer, 0, MEM_RELEASE);//在其它进程中释放申请的虚拟内存空间,MEM_RELEASE方式很彻底,完全回收

CloseHandle(hProcess);//关闭打开的进程对象

比较简单的写法,在你需要读取的时候,直接string str="";thisInvoke((EventHandler)(delegate{ // 这里写你的控件代码,比如 //str= targetSelectedText; }));至于普通的写法怎么写,你搜索一下C#跨线程访问就算。

用EnumChildWindows吧,要借助SPY++,分析控件ID和GeiWIndowLong(hwWndChild,GWL_ID)返回的iD,给指定的控件发送消息SendMessage,还有控件一般都是发送的是WM_COMMAND消息吧。 最后想说的是,如果你是想**什么密码之类的话,这种方法是行不通的,比如QQ这些,他们都装了个Hook过程,你做什么 消息都会被过滤吧。

以上就是关于python如何读取word当中的控件的状态和信息全部的内容,包括:python如何读取word当中的控件的状态和信息、在VC++中如何在对话框函数中获得edit控件的“按下回车键”的消息、怎么在64位系统上用sendmessage发送消息获得listview控件的item信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9320751.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存