Tag: winapi

如何以编程方式确定Windows任务栏是否隐藏?

我需要知道Windows任务栏是否隐藏。 我相信没有.NET方法可以做到这一点,而且我也遇到了很多“如何隐藏和显示任务栏”的样本,但我没有看到任何基于我正在寻找的东西。 我不熟悉Windows API,因此我发现很难理解传统的Windows代码。 有人可以指导我一篇文章或输入代码,告诉任务栏的当前状态是否隐藏? 我在C#中编码。 谢谢。

C#:引用Windows shell界面

我是C#的新手,我正在尝试完成一个我正在研究的小方项目,它使用少量C#代码来协助开发Windows桌面小工具。 基本上,我正在尝试实现IDesktopGadget接口,以便我可以使用RunGadget方法。 这是我到目前为止读取有关类似接口的信息: [ComImport] [Guid(“C1646BC4-F298-4F91-A204-EB2DD1709D1A”)] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface IDesktopGadget { uint RunGadget([MarshalAs(UnmanagedType.LPWStr)] string gadgetPath); } 不幸的是,当我尝试从中创建一个对象时出现错误: “Cannot create an instance of the abstract class or interface ‘GadgetTask.IDesktopGadget'” 有人能指出我正确的方向,也许可以帮助我理解我在做错的同时吗?

PrintJob的实际总页数(Win32_PrintJob)

我每次使用ManagementEventWatcher进行更改时都会查询Win32_PrintJob WMI类,我获取了有关它的数据,例如:Document,HostPrintQueue,JobId,JobStatus,TotalPages等。 但TotalPages并不代表要打印的实际页数 ,目前看来获取这些数据仍然是printjob还没有完成处理并在那个时刻打开多个页面进行打印但实际总数是其他数字,如何在完成后获取打印作业的实际数量处理? 这是我的代码: ManagementEventWatcher createPrintJobWatcher; String strComputerName = “.”; // Create event query to be notified within 1 milli second of a change in a service WqlEventQuery createPrintJobQuery = new WqlEventQuery(“SELECT * FROM __InstanceCreationEvent WITHIN 0.001 WHERE TargetInstance ISA \”Win32_PrintJob\””); createPrintJobWatcher = new ManagementEventWatcher(); createPrintJobWatcher.Scope = new ManagementScope(“\\\\” + strComputerName + “\\root\\CIMV2”); createPrintJobWatcher.Query […]

如何读取扩展文件属性/文件元数据

所以,我按照教程使用ASP.net核心“上传”文件到本地路径,这是代码: public IActionResult About(IList files) { foreach (var file in files) { var filename = ContentDispositionHeaderValue .Parse(file.ContentDisposition) .FileName .Trim(‘”‘); filename = hostingEnv.WebRootPath + $@”\{filename}”; using (FileStream fs = System.IO.File.Create(filename)) { file.CopyTo(fs); fs.Flush(); } } return View(); } 我想读取文件的扩展属性(文件元数据),如: 名称, 作者, 发布日期, 等等 并使用此数据对文件进行排序,是否有使用Iformfile的方法?

InitiateSystemShutdown调用不起作用

我正在编写一个应用程序,需要重新启动运行代码的Windows机器。 在.NET中似乎没有一个API来执行此操作,所以我为此查找了Win32 API,它被称为InitiateSystemShutdown。 外部声明如下: [DllImport(“advapi32.dll”)] public static extern bool InitiateSystemShutdown(string Machinename, string Message, long Timeout, int ForceAppsClosed, int RebootAfterShutdown); 然后我尝试使用以下参数调用此操作系统例程: InitiateSystemShutdown(null, null, 30, 1, 1); 但是,这总是返回false。 所以我调用Marshal.GetLastWin32Error方法,它返回错误代码1008.此错误代码的消息是: “试图引用一个不存在的令牌。” 代码在Windows服务中运行,并在Administrator帐户下运行。 我已经尝试将其作为本地系统运行并且没有效果。

在服务器2012上使用MS加密库 – CryptCreateHash错误代码87:ERROR_INVALID_PARAMETER

我试图在新的Windows Server 2012环境中托管Web应用程序,但是我收到了一个未经证实的错误。 此代码已存在于我们的代码库中多年,并且在任何其他平台上都没有遇到任何问题。 有问题的代码调用advapi32.dll的CryptCreateHash函数 – 一个Microsoft加密库。 调用函数时,我返回0表示调用失败,随后Err.LastDllError返回错误代码87,即ERROR_INVALID_PARAMETER。 正如我之前所说的,这段代码在各种环境中都运行了很多年 – 包括开发人员使用的Windows Server 2012测试机。 但是当放在也运行Server 2012的实时环境时(尽管在负载平衡系统的稍微复杂的上下文中),我收到错误。 这两台服务器都没有更新到Windows Server 2012 R2,它运行的是开箱即​​用的操作系统版本。 使用以下命令创建Crypt Provider的句柄后: CryptAcquireContext(hCryptProv, vbNullString, SERVICE_PROVIDER, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) 我使用hCryptProv来调用CryptCreateHas函数。 If CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, hHash) = 0 Then Dim _error As Integer = Err.LastDllError Throw New CryptoException(“Error during CryptCreateHash. Error Code: ” & _error.ToString) End If 从live和dev环境传递给该方法的数据的一些示例: […]

使用MSIEnumRelatedProducts和MSIGetProductInfo的MSI Interop

在使用MSI Interop API时,我遇到了一些导致应用程序崩溃的exception行为。 这很简单,可以“处理”问题,但我想更多地了解“为什么”这种情况正在发生。 我对MSIEnumRelatedProducts的第一次调用返回值0并正确地将我的字符串缓冲区设置为productcode。 我的理解是,只有当给定的升级代码(作为parm传递给方法)当前安装了“相关的系列产品”时才会发生这种情况,否则它将返回259 ERROR_NO_MORE_ITEMS。 但是当我随后使用相同的产品代码调用MSIGetProductInfo时,我得到返回值1605,“此操作仅对当前安装的产品有效。”。 在这种情况下,有没有人有任何想法? 它在一台机器上是100%可重复的,但我还没有设法在另一台机器上获得再现步骤。 我们所有的产品都使用Wix属性“AllUsers = 1”构建,因此应该为所有用户安装产品,而不仅仅是一个。 任何想法/建议表示赞赏。 谢谢本 更新:我注意到在运行问题msi软件包时记录了以下行: MSI(s)(88:68)[12:15:50:235]:FindRelatedProducts:无法读取产品'{840C … etc ….. 96}’的ASSIGNMENTTYPE信息。 跳绳… 有谁知道这可能意味着什么? 更新:代码示例。 do { result = _MSIApi.EnumRelatedProducts(upgradeCode.ToString(“B”), 0, productIndex, productCode); if (result == MSIApi.ERROR_BAD_CONFIGURATION || result == MSIApi.ERROR_INVALID_PARAMETER || result == MSIApi.ERROR_NOT_ENOUGH_MEMORY) { throw new MSIInteropException(“Failed to check for related products”, new Win32Exception((Int32)result)); […]

捕获正在运行的进程的FlashWindowEx事件(C#)

我有一个已经在运行的应用程序 – 它偶尔会触发FlashWindowEx事件(Windows 7图标闪烁)。 我想捕获这个事件,但我似乎无法找到任何关于如何的好信息。 我的想法是它会像这样: 使用Process.GetProcessesByName连接到正在运行的进程 为FlashWindowEx设置事件处理程序 抓住它,做任何事情 我想我的问题是: 这可能吗? 有没有办法从正在运行的进程中获取可用事件列表? 我如何挂钩到FlashWindowEx? 谢谢

如何在任何打开的窗口中获取鼠标下的文本

我正在开发一个用C#语言编写的项目。 我想生成一个类似于Narcis或Easylingo的字典,使用户能够使用鼠标,只需在任何应用程序中将光标移动到WORD上,然后程序就会检测到该字,并找到该特定字的含义。 我的问题是如何在任何应用程序(如Microsoft Office或Web浏览器等)中检测屏幕上鼠标光标下的单词。 我正在寻找任何可以帮助我的提示和指南或任何代码。 非常感谢您的合作。

ReadProcessMemory和WriteProcessMemory错了

我正在创建这个内存编辑器,但子程序ReadProcessMemory失败; WriteProcessMemory也是如此。 我试图通过使用GetLastError子例程获取最后一个错误,但它返回0,即ERROR_SUCCESS。 这是程序和类的代码。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Memedit; using System.Runtime.InteropServices; namespace Memory_Editor { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void textBox1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop, false)) { e.Effect = DragDropEffects.All; } } […]