Tag: winapi

从闭源第三方Win32应用程序中的窗口捕获数据

我打算创建一个C#Windows Forms应用程序作为第三方Win32应用程序的扩展,但我现在对如何执行此操作感到困惑。 我得到的最远的是知道它涉及Win32 Hooking,并且有一个名为EasyHook的开源项目应该允许我这样做。 我想知道如何从文本框中获取文本或从第三方Win32应用程序中的控件获取其他数据。 当用户按下按钮时,将从外部应用程序的运行窗口捕获控件中的文本/数据。 我想问题可归纳如下: 当用户点击某个按钮时,如何确定要挂钩的事件? 如何在单击按钮时获取Win32控件显示的值?

如何使用Windows API删除应用程序的MenuBar?

我正在使用以下代码删除应用程序的标题栏,这对记事本非常有效。 现在我想删除菜单栏。 怎么实现呢? //Finds a window by class name [DllImport(“USER32.DLL”)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); //Sets a window to be a child window of another window [DllImport(“USER32.DLL”)] public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); //Sets window attributes [DllImport(“USER32.DLL”)] public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); //Gets window attributes […]

读取系统音频输出流

我目前正在为XNA制作示波器组件并需要一些帮助。 我想获得音频信息表格系统音频输出流,但我发现这样做非常困难。 我找到了一些资源,但没有任何东西可以帮助我,或者它以一种我无法掌握的方式帮助。 以下是我到目前为止找到的以下资源。 如何以编程方式获取当前音频级别? http://msdn.microsoft.com/en-us/library/ms712636 http://social.msdn.microsoft.com/Forums/en/xnagamestudioexpress/thread/6a3ea3da-849b-475d-a2a4-7cf7c27347d5 由于我不能完全掌握应该做什么,所以我谦卑地来找你帮忙谢谢你。

为什么GetWindowThreadProcessId从服务调用时返回0?

在控制台应用程序中使用以下类,并且至少有一个Notepad实例正在运行时, GetWindowThreadProcessId正确返回非零线程ID。 但是,如果Windows服务中包含相同的代码,则GetWindowThreadProcessId始终返回0并且不会引发任何exception。 将服务启动的用户更改为与运行控制台应用程序的用户相同并未改变结果。 是什么原因导致GetWindowThreadProcessId返回0即使它提供有效的hwnd? 为什么它在控制台应用程序和服务中的function不同? 注意:我运行的是Windows 7 32位并以.NET 3.5为目标。 public class TestClass { [DllImport(“user32.dll”)] static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId); public void AttachToNotepad() { var processesToAttachTo = Process.GetProcessesByName(“Notepad”) foreach (var process in processesToAttachTo) { var threadID = GetWindowThreadProcessId(process.MainWindowHandle, IntPtr.Zero); …. } } } 控制台代码: class Program { static void Main(string[] args) { var […]

如何拦截每个尝试在C#中使用API​​函数?

我需要阻止计算机上的任何屏幕捕获软件进行屏幕截图。 由于它们都是标准的API函数,我想我可以监视和阻止它们。 我需要使用C#。 我所发现的是如何在某个程序中监视和阻止它们(屏幕捕获程序)。 他们正在寻找程序中的一个函数,然后他们在我的函数地址上更改它的地址。 但是,如果我没有任何某些程序,我怎么能这样做呢? 我需要阻止任何试图截屏的人。

如何在C#中使用CreateFile打开目录以检查已删除的条目?

如何在C#中使用CreateFile打开目录以检查已删除文件的条目? 或者现在不可能? 我记得当能够使用CreateFile或可能的CreateFileEx打开NTFS分区上的目录时,但是在旧操作系统下使用C ++。 到目前为止,我已经有足够的Windows API调用(到kernel32.dll)读取现有文件,但它不会打开目录: using System; using System.Collections.Generic; using System.Text; using System.IO; using Microsoft.Win32.SafeHandles; using System.Runtime.InteropServices; using System.Security.Permissions; using System.Runtime.ConstrainedExecution; using System.Security; namespace Kernel_Test { class Program { static void Main(string[] args) { Kernel_Tools cKT = new Kernel_Tools(); cKT.DoTest(“C:\\Temp”); cKT.DoTest(“C:\\Temp\\test.txt”); } } [SecurityPermission(SecurityAction.InheritanceDemand, UnmanagedCode = true)] [SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)] class Kernel_Tools { […]

如何检测窗口是否会hibernate或暂停?

我在用 SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler( SystemEvents_PowerModeChanged ); 判断Windows何时挂起。 但我怎么知道它是进入hibernate还是暂停? 是否有.Net或PInvoke方法来执行此操作?

如何在C#中将IP地址字符串解析为uint值?

我正在编写使用Windows IP Helper API的C#代码。 我试图调用的函数之一是“ GetBestInterface ”,它采用IP的“uint”表示。 我需要的是解析IP的文本表示以创建’uint’表示。 我已经通过谷歌找到了一些例子,比如这个或者这个例子,但我很确定应该有一种标准的方法来实现这一点。 唯一的问题是,我找不到这种标准方式。 IPAddress.Parse似乎是在正确的方向,但它没有提供任何方式获得’uint’表示… 还有一种方法可以使用IP Helper,使用ParseNetworkString ,但同样,我宁愿使用.NET – 我相信我越少依赖pInvoke就越好。 那么,有谁知道在.NET中执行此操作的标准方法?

禁用特定GDI设备上下文的抗锯齿

我正在使用第三方库将图像渲染到GDI DC,我需要确保在没有任何平滑/抗锯齿的情况下渲染任何文本,以便我可以将图像转换为具有索引颜色的预定义调色板。 我用于渲染的第三方库不支持这个,只是根据字体渲染的当前窗口设置呈现文本。 他们还表示他们不太可能在短时间内添加切换抗锯齿function。 到目前为止,我发现的最好的工作是以这种方式调用第三方库(为简洁起见,error handling和先前的设置检查被省略): private static void SetFontSmoothing(bool enabled) { int pv = 0; SystemParametersInfo(Spi.SetFontSmoothing, enabled ? 1 : 0, ref pv, Spif.None); } // snip Graphics graphics = Graphics.FromImage(bitmap) IntPtr deviceContext = graphics.GetHdc(); SetFontSmoothing(false); thirdPartyComponent.Render(deviceContext); SetFontSmoothing(true); 这显然会对操作系统产生可怕的影响,其他应用程序会在每次渲染图像时从禁用类型闪烁到禁用和返回。 所以问题是,有谁知道如何改变特定DC的字体渲染设置? 即使我可以只更改进程或线程而不是影响整个操作系统,这将是向前迈出的一大步! (这样我就可以选择将这个渲染转换为一个单独的进程 – 无论如何都会在渲染后将结果写入磁盘) 编辑:我想补充一点,我不介意解决方案是否比一些API调用更复杂。 我甚至会对一个解决方案感到满意,如果只需要一天的工作就可以挂钩系统dll。 编辑:背景信息第三方库使用约70种颜色的调色板进行渲染。 在将图像(实际上是地图图块)渲染到DC之后,我将每个像素从其32位颜色转换回其调色板索引,并将结果存储为8bpp灰度图像。 这将作为纹理上传到video卡。 在渲染过程中,我重新应用调色板(也存储为纹理),并在video卡上执行像素着色器。 这允许我瞬间在不同的调色板之间切换和淡入淡出,而不需要重新生成所有需要的切片。 生成并上传所有瓷砖需要10-60秒才能获得典型的世界观。 编辑:将GraphicsDevice重命名为Graphics这个问题的上一个版本中的GraphicsDevice类实际上是System.Drawing.Graphics。 我已经重命名它(使用GraphicsDevice […]

获取与正在运行的应用程序关联的图标

拥有打开的应用程序的窗口句柄,我可以使用GetWindowText函数从应用程序的标题栏中检索文本。 我想更进一步,并检索与同一个应用程序相关联的图标。 我该怎么做呢? 我查看了我认为相关的Win32 API部分,但没有任何内容跳出来。 任何指针将不胜感激。 提前致谢!