Tag: winapi

如何在Windows窗体中阻止双击重写的WndProc函数?

我有一个在Windows窗体中创建的表单,无论我在哪里点击都可以拖动。 我是通过重写WndProc函数来实现的,而WndProc函数又会修改每次点击,因为它是标题栏点击: //found at: http://stackoverflow.com/questions/3995009/how-to-make-a-window-draggablec-winforms private const int WM_NCHITTEST = 0x84; private const int HTCLIENT = 0x1; private const int HTCAPTION = 0x2; /// /// Handling the window messages /// protected override void WndProc(ref Message message) { base.WndProc(ref message); if (message.Msg == WM_NCHITTEST && (int)message.Result == HTCLIENT) message.Result = (IntPtr)HTCAPTION; } 问题是,现在当我双击时,窗口变为全屏,这是不需要的。 我怎么能阻止这种行为?

如何获取开放资源管理器窗口的PIDL?

我知道如何使用Microsoft Internet Controls COM库获取所有打开的资源管理器窗口 。 从这里,我能够找到那些窗口的LocationURL 。 但是,这仅针对文件系统上的路径设置。 似乎何时显示虚拟对象 ,如网络打印机或回收站, LocationURL为空。 LocationName似乎仍设置为在开始栏上可见的名称。 设置LocationURL ,这足以让我知道资源管理器窗口指向的位置,但是如何找到这些特殊文件夹指向的内容? 读取指向项目标识符列表(PIDL)的指针 。 知道在资源管理器窗口中显示哪个PIDL可以识别出这一点。 有没有办法检索这个?

为没有凭据的不同用户获取特殊文件夹

我正在编写一个卸载程序,作为该过程的一部分,我想为所有本地用户清理缓存,临时文件等。 该应用程序将升级为此工作。 我正在寻找的文件可以在特殊文件夹中找到,例如AppData\Local ,所以我需要路径。 对于当前登录的用户,这对于Environment.GetFolderPath是微不足道的。 但是,这不适用于其他用户。 根据referencesource.microsoft.com, GetFolderPath最终调用SHGetFolderPath ,而SHGetFolderPath又包含SHGetKnownFolderPath 。 这两个Win32 API都有一个可选的hToken参数,可以让我指定一个帐户令牌。 事实上,这将有效: private static string GetFolderPath(Guid knownfolderid, string user, string domain, string password) { const int LOGON32_PROVIDER_DEFAULT = 0; const int LOGON32_LOGON_INTERACTIVE = 2; SafeTokenHandle safeTokenHandle; if (!LogonUser(user, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out safeTokenHandle)) throw new System.Security.Authentication.InvalidCredentialException(); IntPtr pPath; SHGetKnownFolderPath(knownfolderid, 0, safeTokenHandle.DangerousGetHandle(), out pPath); […]

将字符转换为虚拟键代码

我有一串值,我想在每个角色的窗口中模拟按键事件。 我计划将WM_KEYDOWN , WM_CHAR和WM_KEYUP事件发送到窗口(因为这是手动按下键时似乎发生的事情)。 这些消息需要基于虚拟键代码表在wParam中发送int。 我可以遍历字符串并获取每个字符,但是如何获取该字符并将其转换为与虚拟键代码对应的值? Convert.ToInt32()不起作用。

发送文件夹重命名命令到Windows资源管理器

我在.NET中创建了一个shell扩展,用于创建文件夹(将其视为上下文菜单New – > New Folder选项克隆),并使用InputBox从用户输入文件夹的名称。 相反,我想将文件夹上的rename命令发送到已经打开的 Windows资源管理器窗口。 它应该就像Explorer让我们命名一个新文件夹一样: 在搜索时,我发现了这个: Windows资源管理器Shell扩展:创建文件并进入“重命名”模式 。 它说使用带有SVSI_EDIT标志的IShellView::SelectItem函数。 我如何用.NET做到这一点? 如果这很难,还有另一种方法可以做同样的事吗?

如何使用WinAPI / C#获取监视器/显示设备名称

我正在使用C#/ WPF中的应用程序,并希望获得所有连接的显示器监视器的列表。 我使用了Screen类并成功获得了列表,但现在列表中的每个显示器名称都是“。\ Display1 \ XXXXXXXX”等。 这是不可读的。 但是,My Nividia控制面板将它们列为专有名称。 所以任何人都可以告诉我如何获得这些名称或api参考。 注意:=我已经尝试过返回名称的EnumDisplayDevices,但它们应该是什么? 这让事情更加混乱? 我尝试了WMI,它允许我访问更多信息,但是,名称仍然是“默认监视器1”“默认监视器2”,而没有关于制造商的信息,现在我想我们可以通过使用正常蜜蜂

HRESULT枚举C#

有谁知道我在哪里可以找到C#的HRESULT枚举? 我试着找了2天。

制作WPF窗口点击,而不是其控件

首先,我想通过对文本中的点击进行透明来定义我的意思:它意味着点击通过我的窗口而不进行任何处理,直接到下面的任何一个窗口。 我需要这种行为,因为这个应用程序是一个游戏覆盖。 我搜索了有关使窗口对点击透明的问题。 我想知道是否有办法让窗口本身对点击是透明的,而不是它的控件(如文本框和按钮)。 这是窗口的标记: 而bellow是使窗口对点击透明的代码(几乎从其他问题复制粘贴,因为我在低级Windows编程时并不擅长)。 namespace Win32Utils { public static class WindowHelper { const int WS_EX_TRANSPARENT = 0x00000020; const int GWL_EXSTYLE = (-20); public static void SetWindowExTransparent(IntPtr hwnd) { var extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE); SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT); } } } 方法WindowHelper.SetWindowExTransparent是从我的方法Window.OnSourceInitialized的覆盖中调用的(正如我从透明窗口获取代码的post中所指示的): protected override void OnSourceInitialized(EventArgs e) { base.OnSourceInitialized(e); var hwnd = new […]

如何确保启用Aero效果?

是否有任何api或我们确定的东西,玻璃效果已经激活? 在我看到的一些代码中,如果DllNotFoundException抛出,那么它们确保它不活动或不存在。 有更好或更标准的方式吗? 这是使用Aero Effect 扩展WPF中的玻璃区域的解决方案。

如何从C#中的控制台窗口回放焦点?

我有一个C#控制台应用程序(A)打开黑色Windows控制台。 有时在启动时它会从另一个需要关注的程序(B)中窃取焦点。 问题:如何从A.exe到B.exe重点关注? A -> Focus -> B 细节: 程序B不是我的,我无能为力。 它有一个GUI,多个窗口,其中一个需要焦点(它可能是一个模态对话窗口)。 程序A不需要任何关注,也不会以任何方式与程序B交互。 程序A通过启动快捷方式启动,基本上在后台运行(它已发布但仍在开发中,这就是控制台窗口的原因) 我有几分钟/几分钟的时间来检查并重点关注。