Tag: winapi

如何将位图像素复制到其他位图,保留C#中的alpha透明度?

有些人可以重写以下函数来使用任何优化机制吗? 我很确定这不是继续进行逐像素复制的方法。 我读过有关AlphaBlend或BitBlt的内容 ,但我不习惯本机代码。 public static Bitmap GetAlphaBitmap(Bitmap srcBitmap) { Bitmap result = new Bitmap(srcBitmap.Width, srcBitmap.Height, PixelFormat.Format32bppArgb); Rectangle bmpBounds = new Rectangle(0, 0, srcBitmap.Width, srcBitmap.Height); BitmapData srcData = srcBitmap.LockBits(bmpBounds, ImageLockMode.ReadOnly, srcBitmap.PixelFormat); try { for (int y = 0; y <= srcData.Height – 1; y++) { for (int x = 0; x <= srcData.Width – 1; […]

从会话0(服务)启动提升的用户流程

大家早, 这个问题似乎已被问过几次,但我无法确定它是否真的有可能。 我已经在这里发布了 没有回复 – 让我们试试这里的人。 我的目标是从当前用户上下文中的服务启动一个提升的进程(作为管理员)(仅当它们在本地管理员组中时)。 我可以毫无问题地获得当前用户令牌,但我无法获得该帐户的辅助/管理员令牌! 我已经阅读了很多论坛,但却无法让它工作(开始认为它不可行)。 我目前的方法: WTSGetActiveConsoleSessionId – 获取活动会话ID WTSQueryUserToken – 获取会话ID的用户令牌 检查令牌是否为admin – 不是。 OpenProcess – 登录用户的explorer.exe的进程句柄 OpenProcessToken – 获取访问令牌的句柄 LookupPrivilegeValue – SE_DEBUG确认我们可以调整令牌权限 DuplicateTokenEx – 用户令牌 SetTokenInformation AdjustTokenPrivileges CreateEnvironmentBlock – 在中运行新进程 CreateProcessAsUser – 希望在提升的用户上下文中生成进程(未发生 – 标准用户上下文) 请参阅下面的代码 – 道歉它的混乱,需要整理,所有句柄都关闭。 这只是目前的经验代码。 public static bool CreateProcessInConsoleSession(String CommandLine, bool bElevate) { PROCESS_INFORMATION pi; […]

使用c#从另一个进程调用一个函数

我正在为自己的学习目的创建一个内存修改程序。 我的一个朋友指出了我想要触发的另一个程序中的一个函数。 该函数在另一个程序中为0x004B459C。 我知道如何读写内存,但是如何从我的程序中触发此function。 我没有这个其他程序的来源。 我的问题是,如果我知道这个hex代码,我是否需要注入函数,或者我只是写一些内存来触发这个?

在C#中从外部应用程序获取UI文本

是否可以从C#中的外部应用程序获取UI文本。 特别是,有没有办法从第三方编写的外部Win32应用程序读取标签中的Unicode文本(我认为它是一个普通的Windows标签控件)? 文本是可见的,但在UI中不能通过鼠标选择。 我假设有一些可访问性API(例如用于屏幕阅读器)允许这样做。 编辑:目前正在寻找使用类似管理间谍应用程序的东西,但仍然会欣赏任何其他线索。

如何使用Win32API在其他进程中滚动Window

我试图创建一个程序,我可以将一个进程的进程ID(可能是firefox,即记事本等)发送到滚动进程窗口的方法。 我一直在尝试使用GetScrollBarInfo和SetScrollPos,我在pinvoke找到了没有任何成功。 我不确定这是不是正确的方法。 我开始玩GetScrollBarInfo,但它似乎不起作用。 我尝试了http://www.pinvoke.net/default.aspx/user32.getscrollbarinfo上的代码 [StructLayout(LayoutKind.Sequential)] public struct SCROLLBARINFO { public int cbSize; public Rectangle rcScrollBar; public int dxyLineButton; public int xyThumbTop; public int xyThumbBottom; public int reserved; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public int[] rgstate; } private const uint OBJID_HSCROLL = 0xFFFFFFFA; private const uint OBJID_VSCROLL = 0xFFFFFFFB; private const uint OBJID_CLIENT = 0xFFFFFFFC; private […]

来自本机C ++加载的DLL的C#表单

这个问题来自这个线程: Native C ++通过代理C ++管理的dll使用C#dll 简而言之,我通过DLL将(我的)C#扩展加载到本机进程中。 扩展程序需要显示一个表单,以便用户可以控制它。 我正在使用标准的.NET表单,没有第三方图书馆或任何东西,我的表单没有出现。 更糟糕的是,它挂起了目标进程。 它没有使用任何CPU,所以我感觉它等待某些function返回,但从来没有。 同样令人感兴趣的是弹出“初始化方法”消息框,但不弹出“测试”消息框。 我已经测试了我能想到的所有东西(STAthread,threads,DisableThreadLibraryCalls,加上不同的代码位置),每一个星期日。 我倾向于认为它是Win32互操作的一些模糊细节,但我找不到任何似乎会导致这些症状的东西。 你们其中一位专家可以查看我的代码并指出问题所在吗? /// /// Provides entry points for native code /// internal static class UnmanagedExports { [UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)] public delegate int SendRecv([MarshalAs(UnmanagedType.SafeArray)]byte[] ByteArray, UInt64 Len); [STAThread] [DllExport(“Initialize”, CallingConvention.StdCall)] public static int Initialize(IntPtr hInstance, SendRecv Send, SendRecv Recv) { return DLLinterface.Initialize(hInstance, Send, Recv); } [DllExport(“Terminate”, […]

使用C#示例:在Win7 64位下编写和读取NTFS备用数据流

我希望能够使用备用数据流来存储我正在构建的数据库应用程序中引用的文件的某些同步信息。 但是,我在网上找到的每种方法都以这种或那种方式失败了。 在Win32 API编程中没有经验我不确定为什么会发生故障。 在某些情况下,方法调用似乎成功,只创建了备用流(即,我以后不能从备用文件中读取,AlternateStreamViewer也不能看到它)。 在其他情况下,写入成功,但读取失败,因为调用CreateFile()会导致无效的SafeFileHandle。 在这一点上,我只想找到一些有效的代码。 或者被告知“你不能从这里到达那里”。 在这种情况下,我将使用另一个不太吸引人的选项(例如,编码文件名本身的同步/参考信息,并希望没有人更改文件名)。 我理解我尝试过的方法的要求。 但是有很多(我花了几个小时),我真的很想学习我没有尝试过的产品。 但是,你是对的,它会有所帮助,因为事实certificate我正在使用其中一种方法 – 下面提到的Trinet – 不正确。 我认为问题是我还没有创建我试图保存备用流的“基础”文件。 这是我尝试的代码库的链接: 圣克罗伊船长 DevDump Trinet

访问Microsoft.Win32.UnsafeNativeMethods?

Microsoft在.NET框架中包含了一个非常好的Windows API包装器。 它存储在Microsoft.Win32.UnsafeNativeMethods , Microsoft.Win32.SafeNativeMethods和Microsoft.Win32.NativeMethods中。但遗憾的是,它们无法访问,因为它们被声明为私有。 有没有办法轻松访问它们?

有谁知道ShellHook消息HSHELL_RUDEAPPACTIVATED是什么意思?

我正在编写应用程序,它建立shell钩子来获取shell事件(如果重要的话,我正在使用C#)。 我正在使用这个例子: http : //msbob.spaces.live.com/blog/cns!DAFD19BC5D669D8F!1,332.entry Hook工作正常,但我没有收到我感兴趣的消息:HSHELL_WINDOWACTIVATED(所有其他与窗口相关的事件都运行良好)。 相反,我收到的代码为32772的消息应该是HSHELL_RUDEAPPACTIVATED(一些谷歌搜索帮助)。 但我无法理解为什么我根本没有收到HSHELL_WINDOWACTIVATED以及这个HSHELL_RUDEAPPACTIVATED消息的含义。 MSDN没有提及它。 任何人都可以向我解释一下吗?

如何捕捉屏幕的一部分

我正在使用win32 PrintWindow函数将屏幕捕获到BitMap对象。 如果我只想捕获窗口的某个区域,我该如何在内存中裁剪图像? 这是我用来捕获整个窗口的代码: [System.Runtime.InteropServices.DllImport(strUSER32DLL, CharSet = CharSet.Auto, SetLastError = true)] public static extern int PrintWindow(IntPtr hWnd, IntPtr hBltDC, uint iFlags); public enum enPrintWindowFlags : uint { /// /// /// PW_ALL = 0x00000000, /// /// Only the client area of the window is copied. By default, the entire window is copied. /// PW_CLIENTONLY = 0x00000001 […]