Articles of winapi

在Python中阅读屏幕像素比PIL更快的方法?

目前我正在使用像素读取器通过AutoItv3在一个运行直接X的程序中执行一些操作; 一个游戏。 现在的程序工作正常,但作为一个练习,我一直在Python中重写它。 现在我可以做到: import ImageGrab # Part of PIL image = ImageGrab.grab() #Define an area to capture. rgb = image.getpixel((1, 90)) #What pixel do we want? 那抓住了我想要的像素信息,但是我做得很快(需要每秒做3次或更快),但结果是它主要影响这个基于DirectX的游戏的帧率。 Python中有更快的方式来读取特定的屏幕像素吗? 即使限制这个每0.3秒运行,导致更多的压力比实际上应该(我实际上认为python会比这个特定的目的AutoIt 快 ,因此我试图它的原因)

如何向Windows请求系统托盘图标的大小?

我注意到,我的应用程序发送图标到Windows托盘与16×16像素的大小 – 和我的Vista PC我有一个双倍的任务栏,似乎显示在18×18的图标。 我应用程序图标上的resize的工件看起来很糟糕。 我怎样才能问Windows图标应该是多大? 编辑: 我正在dynamic生成图标,并使用像素字体文本叠加。 看起来很浪费,dynamic地生成一堆图标大小,所以最好避免使用所有“可能的”大小构build一个图标(而不是我甚至不知道它们是什么)。 GetSystemMetrics(SM_CXSMICON)返回16 – 不正确的值。 GetThemeBackgroundContentRect也没有帮助。

VMMap如何知道给定的内存区域是线程堆栈,具体是什么?

我一直在使用Mark Russinovich的VMMap来映射出我正在分析的一个进程的虚拟内存。 使用VirtualQueryEx,我可以遍历外部进程的空间,并获得进程地址空间内存区域的信息。 这些区域肯定与VMMap相匹配,但是VirtualQueryEx只会告诉我内存是否被提交/保留/释放以及是否是私有/共享/映像。 我找不到任何其他logging的方式来查询进程的虚拟内存。 VMMap似乎知道这样一种方式来查询内存,以便了解它是“私有数据”还是“线程堆栈”。 VirtualQueryEx将这两个标记为MEM_PRIVATE。 那么VMMap如何做出这样的区分呢? 是否有另一个API函数可以用来辨别这些细节?

.NET中的窗口句柄可以改变它的值吗?

在.NET进程的生命周期中,执行System.Windows.Forms.Form的句柄,可以说Application.Run(form)使用的主表单实际上改变了它的值,也就是说,如果使用不同的进程,例如IntPtr handle = User32.FindWindow(null, "Name") ,是否有一种情况下,该处理可能会失效.NET运行时? 编辑 我需要知道句柄,因为我想为IPC使用SendMessage和WM_COPYDATA等。

窗口:获取监视器的数量,包括禁用的

EnumDisplayMonitors列出当前激活的所有监视器。 但是,它似乎没有返回禁用的(即有'扩展我的桌面到这个监视器'的选项)。 我如何计算残疾人数?

WSAGetLastError()只是GetLastError()的别名吗?

在我的代码中,我有I / O完成端口的asynchronousI / O,对于读/写完成callback,我得到一个HANDLE(当然可以是套接字,文件句柄,命名pipe道等等)。 所以如果在这样的例程中出现错误,我想检查错误,但是如何知道它是一个“networking”HANDLE [一个SOCKET,所以我应该调用WSAGetLastError()]或者一个“非networking”HANDLE [命名pipe道,文件等等,所以我应该调用GetLastError()]? 我为此使用了一个简单的标志,但是它的丑陋和不方便。 如果有人可以确认WSAGetLastError()只是GetLastError()的别名,我将只使用后者。 看起来如此: http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.networks/2007-08/msg00034.html http://us.generation-nt.com/wsagetlasterror-just-an-alias-getlasterror-help-28256642.html 但有人可以证实吗? MSDN在这个话题上不是很清楚。 和:使用GetLastError()而不是WSAGetLastError()是安全的? 我的意思是,如果WSAGetLastError()甚至是自Windows95作为别人声称的GetLastError()的别名,我可以假设它对于下一个版本的Windows将是真实的 – 但是我们不能在假设东西时编写好的代码:)

EnumDisplayMonitorscallback

我正在尝试使用EnumDisplayMonitors来创build每个监视器的dynamic数组,并存储DISPLAY_DEVICE结构。 为什么下面的代码不正确? BOOL CALLBACK MyInfoEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) { MONITORINFOEX iMonitor; iMonitor.cbSize = sizeof(MONITORINFOEX); GetMonitorInfo(hMonitor, &iMonitor); if (iMonitor.dwFlags == DISPLAY_DEVICE_MIRRORING_DRIVER) { return true; } else { *reinterpret_cast<ScreenArray*>(dwData) = ScreenArray(&iMonitor); return true; }; } 调用使用 ScreenArray monitorArray[15]; int i = 0; EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, reinterpret_cast<LPARAM>(&monitorArray[i++])); 数组(monitorArray [0])中的第一个返回第二个监视器的正确信息,但monitorArray [1]是最大值。 编辑:解决我使用的方法只是实现我创build的function: MonitorArray *mA = […]

WinApi中的GetClientRect和GetWindowRect有什么区别?

我应该在InvalidateRect中使用哪些来刷新我的窗口? 为什么?

通过Win32 API从服务创buildWindows会话

我有一个Windows服务,可以在用户的​​Windows会话中创build一个可执行文件,通过调用“CreateProcessAsUser”函​​数。 这工作正常,只要有一个Windows会话已经在那里。 在没有人的情况下,我希望能够以编程方式创build一个。 这是可能的吗? 似乎无法find一个function来做到这一点。

截取使用createdesktop API创build的桌面

我正在使用createdesktop api来创build一个桌面,我想要截图或发送input鼠标/键盘不显示桌面的user.any ideeas如何实现这?