Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python win32获取字体写字板_Python_Winapi_Fonts_Notepad_Wordpad - Fatal编程技术网

如何使用python win32获取字体写字板

如何使用python win32获取字体写字板,python,winapi,fonts,notepad,wordpad,Python,Winapi,Fonts,Notepad,Wordpad,如何找到当前使用Python和Win32 GUI字体的Word Pad应用程序? 我能够找到Windows处理程序和子窗口 下面是一个示例应用程序 导入win32gui、win32api、win32con、win32ui hwnd=win32gui.GetDesktopWindow() dc=win32gui.GetWindowDC(hwnd) hfont=win32gui.SendMessage(dc,win32con.WM_GETFONT,0,0) fnt_spc={} fnt\u n=wi

如何找到当前使用Python和Win32 GUI字体的Word Pad应用程序? 我能够找到Windows处理程序和子窗口 下面是一个示例应用程序

导入win32gui、win32api、win32con、win32ui
hwnd=win32gui.GetDesktopWindow()
dc=win32gui.GetWindowDC(hwnd)
hfont=win32gui.SendMessage(dc,win32con.WM_GETFONT,0,0)
fnt_spc={}
fnt\u n=win32ui.CreateFont(fnt\u spc)
lf=win32gui.SelectObject(hfont,fnt\n.GetSafeHandle())
打印(lf.lfFaceName)

正如您在Spy++中看到的,写字板中的控件具有丰富的编辑功能:

根据:应使用,而不是
WM\u GETFONT

首先,您需要获得丰富的编辑句柄(直接使用Spy++或
WindowFromPoint
FindWindowEx
EnumChildWindows
等。但是您使用的
GetDesktopWindow
只会将句柄返回到桌面窗口,
SendMessage
接收窗口句柄,而不是设备上下文句柄)

此外,您还需要注意,在另一个进程中发送
EM_GETCHARFORMAT
消息时,您需要请求一段内存,用于在窗口进程中读写结构,以便与这两个进程交互

C++示例(删除错误检查):

#包括
#包括
#包括
int main(int argc,字符**argv)
{
HWND HWND=(HWND)0x00090BF0;
DWORD pid=0;
GetWindowThreadProcessId(hwnd和pid);
HANDLE hProcess=OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE,false,pid);/7784
CHARFORMAT2-cp;
cp.cbSize=sizeof(CHARFORMAT2);
cp.dwMask=CFM_面;
CHARFORMAT2*lf=(CHARFORMAT2*)VirtualAllocEx(hProcess,NULL,sizeof(CHARFORMAT2),MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);
BOOL ret=WriteProcessMemory(hProcess,lf,&cp,sizeof(CHARFORMAT2),NULL);
//零内存(&lf,sizeof(lf));
LRESULT lr=发送消息(hwnd、EM_GETCHARFORMAT、SCF_SELECTION、(LPARAM)lf);
ret=ReadProcessMemory(hProcess,lf,&cp,sizeof(CHARFORMAT2),NULL);

std::WordPad中的控件是一个丰富的编辑,根据:应该使用而不是
WM_GETFONT
Hi,这对您有帮助吗?如果您有任何问题,请免费告诉我。
#include <iostream>
#include <windows.h>
#include <Richedit.h>
int main(int argc, char** argv)
{
    HWND hwnd = (HWND)0x00090BF0;
    DWORD pid = 0;
    GetWindowThreadProcessId(hwnd,&pid);
    HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION| PROCESS_VM_READ | PROCESS_VM_WRITE,false, pid);//7784
    CHARFORMAT2 cp;
    cp.cbSize = sizeof(CHARFORMAT2);
    cp.dwMask = CFM_FACE;
    CHARFORMAT2* lf = (CHARFORMAT2*)VirtualAllocEx(hProcess,NULL,sizeof(CHARFORMAT2), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    BOOL ret = WriteProcessMemory(hProcess,lf,&cp, sizeof(CHARFORMAT2),NULL);
    //ZeroMemory(&lf,sizeof(lf));

    LRESULT lr = SendMessage(hwnd, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)lf);

    ret = ReadProcessMemory(hProcess, lf, &cp, sizeof(CHARFORMAT2), NULL);
    std::cout << cp.szFaceName << std::endl;
    VirtualFreeEx(hProcess,lf, 0, MEM_RELEASE);
    return 0;
}