Tag: winapi

如何以编程方式最小化打开的窗口文件夹

如何获取打开的文件夹列表,通过它进行枚举并以编程方式最小化每个文件夹? 有时,当从应用程序中的一个表单跳转到另一个表单时,一些打开的文件夹会从工具中窃取焦点。 防止这种情况对我们的客户来说是高度优先的。 客户是视障人士,因此他们只能通过屏幕阅读器访问机器。 最小化其他窗口(文件夹)根本不是问题,实际上是一个要求。 我试过这个: foreach (Process p in Process.GetProcessesByName(“explorer”)) { p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized; } 正如预期的那样没有好处。 更新 : 从这里的答案,我试过这个: delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam); [DllImport(“user32.dll”)] static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam); static IEnumerable EnumerateProcessWindowHandles(int processID) { List handles = new List(); EnumThreadDelegate addWindowHandle = delegate(IntPtr hWnd, IntPtr param) { handles.Add(hWnd); […]

检测WPF中的系统主题更改

对于我的WPF应用程序,我需要检测DWM何时打开/关闭或系统主题何时更改。 在WinForms中有这样的事件,但我在WPF中看不到任何事件。

为什么EnumChildWindows会跳过孩子?

在使用Windows API方法EnumChildWindows时,我会遇到奇怪的行为。 似乎没有拿起一段儿童窗户。 当我使用Spy ++向下钻取时,我可以看到孩子们,但是当我执行我的代码时,它不会返回我在Spy ++中看到的代码。 我在Spy ++中看到的内容我在Spy ++中看到的内容http://img24.imageshack.us/img24/9264/spyhandles.png 这是我的代码: public delegate bool EnumWindowProc(IntPtr hWnd, IntPtr parameter); [DllImport(“user32”)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool EnumChildWindows(IntPtr window, EnumWindowProc callback, IntPtr i); public static List GetChildWindows(IntPtr parent) { List result = new List(); GCHandle listHandle = GCHandle.Alloc(result); try { EnumWindowProc childProc = new EnumWindowProc(EnumWindow); EnumChildWindows(parent, childProc, GCHandle.ToIntPtr(listHandle)); […]

以编程方式更改“演示文稿显示模式”

演示文稿显示模式是您在使用Windows + p快捷方式时看到的模式 : 仅限计算机 重复 延伸 仅限投影仪 是否存在允许在这些显示模式之间切换的API调用? 我想以编程方式在显示器和HDMI电视之间切换(并同时做一堆其他事情,因此Windows + p没有用),但我正在打砖墙。

在透明的WPF窗口后面模糊

我正在尝试使用半透明的无边框窗口创建一个WPF应用程序,该窗口模糊了它背后的背景。 这是我想要做的一个例子。 截图 我曾尝试使用仅适用于Windows Vista / 7的DwmEnableBlurBehindWindow 。 我试图找到一个适用于Windows 7,8和10的解决方案。

如何显示打印机属性/首选项对话框并保存更改?

编辑:我的错! 我希望在实际上只更改PrinterSettings的本地实例时,将更改写回默认的打印机设置。 – 以下代码似乎按预期工作 我试图显示给定打印机的自定义打印机属性。 我需要这个作为我想写的自定义PrintDialog的一部分。 我可以在网上找到的大多数示例都设法显示对话框,但用户可能做出的任何更改都会丢失,这使得它无用。 示例: http : //www.codeproject.com/KB/system/PrinterPropertiesWindow.aspx (关于上面的页面:我试图改变BartJoy建议的代码(在页面上)但是没有修复它) 我也尝试过pinvoke.net页面上的示例和建议,但它仍然不起作用: http://www.pinvoke.net/default.aspx/winspool.documentproperties 从上面的网站我假设问题可能只在64位Windows上和/或如果打印机名称超过32个字符。 我不知道接下来应该尝试什么…我感谢任何建议和意见! 编辑:这是我尝试过的: [DllImport(“winspool.Drv”, EntryPoint = “DocumentPropertiesW”, SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] static extern int DocumentProperties(IntPtr hwnd, IntPtr hPrinter, [MarshalAs(UnmanagedType.LPWStr)] string pDeviceName, IntPtr pDevModeOutput, IntPtr pDevModeInput, int fMode); [DllImport(“winspool.drv”)] private static extern int OpenPrinter(string pPrinterName, out IntPtr […]

使用serialport.open()时IOexception错误

最终更新这是我们固件的全部时间。 在某种程度上令人尴尬,但我很高兴我们可以继续前进,我可以把学习Java关闭一天。 我的答案如下。 更新所以我或多或少地放弃了这一点。 我认为这是一个归结为API的错误,但我没有时间,资源和技能组合来深入了解它。 我认为存在一些Windows只是中指的硬件。 我已经下载了Eclipse,切换到Java并将尝试查看是否有效。 如果没有,你会看到我回到这里。 但是,我绝对喜欢解决这个问题,所以如果有人有时间或倾向深入研究这个问题,我很乐意看到你提出的问题。 显然我会不时回来看看。 请确保你在评论中’@’我,所以我会收到通知。 原始邮政 我知道还有其他一些人在处理这个问题,但我希望有人可以帮助我。 我正在尝试连接到COM端口,但是当我尝试使用serialport.Open()命令时,我收到了IOexception: System.IO.IOException: The parameter is incorrect. at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str) at System.IO.Ports.InternalResources.WinIOError() at System.IO.Ports.SerialStream.InitializeDCB(Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Boolean discardNull) at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean […]

如何停止打开应用程序

我想写一个小应用程序,它位于我的托盘中,允许我选择一个可执行文件并阻止它打开。 使用WinForms可以轻松完成应用程序的UI。 我想知道的是如何检测某个exe是否已经被激活,然后如何阻止它运行。 我很确定我将不得不深入研究一些Win32的东西,但我没有这方面的经验,因此这篇文章。 有一个类似于此的现有应用程序,但我不能为我的生活记住它的名字。 它是用VB6编写的,它也是开源的。 任何帮助深表感谢。 谢谢。

从C#调用CreateProcessAsUser

我一直在尝试使用Windows API的CreateProcessAsUser函数在特定用户的上下文中创建一个新进程,但似乎遇到了一个相当讨厌的安全问题…… 在我进一步解释之前,这里是我正在使用的代码来启动新进程(一个控制台进程 – PowerShell具体,但它应该无关紧要)。 private void StartProcess() { bool retValue; // Create startup info for new console process. var startupInfo = new STARTUPINFO(); startupInfo.cb = Marshal.SizeOf(startupInfo); startupInfo.dwFlags = StartFlags.STARTF_USESHOWWINDOW; startupInfo.wShowWindow = _consoleVisible ? WindowShowStyle.Show : WindowShowStyle.Hide; startupInfo.lpTitle = this.ConsoleTitle ?? “Console”; var procAttrs = new SECURITY_ATTRIBUTES(); var threadAttrs = new SECURITY_ATTRIBUTES(); procAttrs.nLength = Marshal.SizeOf(procAttrs); […]

PostMessage WM_KEYDOWN发送乘法键?

我有这个代码: public static void Next() { Process[] processes = Process.GetProcessesByName(“test”); foreach (Process proc in processes) PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_RIGHT, 0); } 这个代码是右箭头键,我想发送ALT + CTRL + RIGHT我试过这个: public static void Forward() { Process[] processes = Process.GetProcessesByName(“test”); foreach (Process proc in processes) { PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_CONTROL, 0); PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_ALT, 0); PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_RIGHT, 0); } } 但它不起作用…… […]