我正试图从弹出窗口中读取文本.

标题总是一样的.我已经设法识别hwnd并使用下面的代码获得标题,但我无法弄清楚如何阅读内容.
import time
import win32gui, win32con
windows = []
def _MyCallback( hwnd, extra ):
extra.append(hwnd)
win32gui.EnumWindows(_MyCallback, windows)
while True:
window = win32gui.GetForegroundWindow()
title = win32gui.GetWindowText(window)
if title == 'Errors occurred': print 'error window'
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
这是工作版本:
import time
import win32gui
while True:
window = win32gui.GetForegroundWindow()
title = win32gui.GetWindowText(window)
if title == 'Errors occurred':
control = win32gui.FindWindowEx(window, 0, "static", None)
print 'text: ', win32gui.GetWindowText(control)
time.sleep(1)
Run Code Online (Sandbox Code Playgroud) 我试图通过运行此代码获取当前焦点窗口的名称...
import win32gui
name = win32gui.GetForegroundWindow()
Run Code Online (Sandbox Code Playgroud)
但是,我一直在努力
Traceback (most recent call last):
File "D:\Program_1\test.py", line 1, in <module>
import win32gui
ImportError: No module named win32gui
Run Code Online (Sandbox Code Playgroud)
我从这里安装了pywin32 http://sourceforge.net/projects/pywin32/?source=navbar.我犯的错是什么; 猜测它是非常基本的东西.提前致谢.
编辑:找到解决方案.我在64位Windows 7上安装了32位pywin32,因为64位版本给了我一个错误,它无法找到Python注册表.我在这里找到了一个需要Python 2.6版的解决方案,这在注册表中找不到.重新安装Python并为我自己安装它导致pywin32 64bit安装没有给出错误.
首先,这不是MFC.
这是我一直在研究的裁剪版GUI:

正如您所看到的,我已经(尝试)使用以下代码创建两个不同的组:Icon和Button:
index->hAddT.hwndIndex[2] = CreateWindowEx(NULL,L"BUTTON",L"Icon",WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
200,135,120,170,WINDOWHANDLE,(HMENU)IDC_RADIOGROUP,(HINSTANCE)GetWindowLong(WINDOWHANDLE,GWL_HINSTANCE),NULL);
Run Code Online (Sandbox Code Playgroud)
我遇到的问题,以及你可能看到的问题是,窗口只有一个单选按钮.这意味着用户不可能从Icon组中选择一个单选按钮,而从Button组中选择一个单选按钮.我已将每个单选按钮初始化为:
index->hAddT.hwndIndex[3] = CreateWindowEx(NULL,L"BUTTON",L"Information",WS_CHILD | BS_AUTORADIOBUTTON | WS_VISIBLE,
205,155,100,20,WINDOWHANDLE,(HMENU)IDC_RADIO1,(HINSTANCE)GetWindowLong(WINDOWHANDLE,GWL_HINSTANCE),NULL);
Run Code Online (Sandbox Code Playgroud)
我想以某种方式将"Icon"组的单选按钮与"按钮"组的单选按钮分开,如果这是有道理的,因此每个组都有一个单选按钮.这将如何成为可能,它是否需要我创建一个新的窗口和一个新的回调程序只是为了有一个额外的单选按钮.必须有另一种方法来分组这样的子项.
2个单独的单选按钮组以相同的形式WINAPI(无MFC) 该链接对我的目的没有任何用处.
我有作为Windows第五版的编程,由Charles Petzold旁边作为参考,他在Group Boxes部分中说"组框通常用于包含其他按钮控件",但是没有真正的例子.
我可以使用该wmi模块查看网络上远程计算机上发生的进程.这是一个使用wmi监视在我自己的PC上创建和删除的进程的示例.
import wmi, multiprocessing
def create():
while True:
crePro = cp()
print('Creation',crePro.Caption,crePro.ProcessId,crePro.CreationDate)
def delete():
while True:
delPro = dp()
print('Deletion',delPro.Caption,delPro.ProcessId,delPro.CreationDate)
c = wmi.WMI()
cp = c.Win32_Process.watch_for("creation")
dp = c.Win32_Process.watch_for("deletion")
if __name__ == '__main__':
createProc = multiprocessing.Process(target = create)
deleteProc = multiprocessing.Process(target = delete)
createProc.start()
deleteProc.start()
Run Code Online (Sandbox Code Playgroud)
我还读过有关使用win32gui活动窗口的信息.
import win32gui
win32gui.GetForegroundWindow()
Run Code Online (Sandbox Code Playgroud)
我读过有关的存在WM_SETFOCUS和WM_ACTIVE在win32con,但我不能确定如何连接到这些流的远程PC上.
我的问题是:如何监控远程PC的活动窗口(我想使用WM_SETFOCUS或者WM_ACTIVE)
Windows 任务栏包含一个称为“通知区域”或“系统托盘”的区域,其中为想要在后台运行和/或显示系统通知的应用程序显示小图标。当任务栏位于屏幕底部或顶部时,此区域出现在右侧。
在多显示器设置中,即使任务栏设置为在所有显示器上显示,此“通知区域”也只会出现在其中一个任务栏上。您可以通过将任务栏拖动到您喜欢的任何显示来控制通知区域出现在哪个显示上。
我的问题是:
有没有什么直接的 API 可以找到任务栏“通知区域”的屏幕、位置和方向?
我找到了一个搜索 Shell_TrayWnd 窗口句柄的示例,然后对其位置进行数学运算,尝试找出它所处的方向(即任务栏位于屏幕的哪个边缘)。
但是,这非常脆弱,因为它取决于 Windows 任务栏的当前 UI 设计。
Windows 10 引入了一个新的通用 Toast 通知系统,包括一个时髦的通知弹出窗口。但是,即使您已将通知区域移动到不同的监视器,包括打开和关闭系统通知浮出控件的按钮,浮出控件本身仍会显示在“主监视器”上。
以上表明可能没有办法做到这一点,好像微软自己的通知没有遵循通知区域,实际上可能没有办法这样做。但是,通知区域的Microsoft文档提出了一个非常明智的想法,即 toast 应该显示在它附近......我认为他们只是没有考虑多显示器的情况。
在我的C++应用程序中,我嵌入了(通过COM)Web浏览器(Internet Explorer)控件(CLSID_WebBrowser).
我可以使用IHTMLDocument2 :: write()方法在该控件中显示我自己的html,但如果html有<img src="foo.png">元素,则不会显示.
我假设有一种方法让我以某种方式为web控件提供foo.png的数据,但我找不到合适的地方来挂钩这个功能?
我需要完全控制提供foo.png的内容,所以解决方法如使用res://协议或保存到磁盘并使用file://协议都不够好.我只是想以某种方式插入我的代码,以便当嵌入式CLSID_WebBrowser控件<img src="foo.png">在IHTMLDocument2 :: write()给出的html数据中看到它时,它会要求我提供这些数据.
我正在尝试实现双缓冲但它似乎不起作用,即图形仍然闪烁.
每次鼠标移动时都会调用WM_PAINT.(WM_MOUSEMOVE)
粘贴WM_PAINT如下:
case WM_PAINT:
{
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
RECT rect;
GetClientRect(hWnd, &rect);
int width=rect.right;
int height=rect.bottom;
HDC backbuffDC = CreateCompatibleDC(hdc);
HBITMAP backbuffer = CreateCompatibleBitmap( hdc, width, height);
int savedDC = SaveDC(backbuffDC);
SelectObject( backbuffDC, backbuffer );
HBRUSH hBrush = CreateSolidBrush(RGB(255,255,255));
FillRect(backbuffDC,&rect,hBrush);
DeleteObject(hBrush);
if(fileImport)
{
importFile(backbuffDC);
}
if(renderWiredCube)
{
wireframeCube(backbuffDC);
}
if(renderColoredCube)
{
renderColorCube(backbuffDC);
}
BitBlt(hdc,0,0,width,height,backbuffDC,0,0,SRCCOPY);
RestoreDC(backbuffDC,savedDC);
DeleteObject(backbuffer);
DeleteDC(backbuffDC);
EndPaint(hWnd, &ps);
}
Run Code Online (Sandbox Code Playgroud) 我想知道windows表单应用程序,win32application和控制台之间有什么区别,我知道windows表单应用程序和win32应用程序都是gui工具,但我想知道何时使用一个而不是另一个,我可以转换控制台应用程序到Windows窗体应用?
win32gui ×10
winapi ×6
c++ ×5
python ×3
windows ×2
c ×1
gdi ×1
python-3.x ×1
radio-button ×1
win32com ×1
window ×1
windows-10 ×1
wmi ×1