
请注意,所有的程序在它们第一行都是#!/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信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)