Tag: winapi

在Windows Vista / 7 Aero Titlebar上绘制自定义按钮

我在StackOverflow上发现了这个问题。 基本上,用户想要在标题栏上绘制自定义按钮。 我尝试了代码,并且只有在禁用Aero时才能在vista / 7中实现它。 我的问题是,在启用aero的同时 ,有没有办法在标题栏上绘制自定义按钮? 此外,有没有办法从当前主题中读取信息,所以我可以设置我的按钮样式以匹配现有的按钮。 更新 这是我的计算机的屏幕截图,展示了上述概念。 安装DisplayFusion后,我得到了额外的标题栏按钮。 我知道DisplayFusion是一个.NET程序,因为它在.NET Reflector中打开。 缺点是程序被混淆了。 不喜欢我想反编译程序或任何东西; 我只想在标题栏上添加一个按钮来执行其他操作(例如,最小化到系统托盘)。 下面是截图,certificate该程序是一个.NET应用程序。

Marshal.AllocHGlobal VS Marshal.AllocCoTaskMem,Marshal.SizeOf VS sizeof()

我有以下结构: [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct WAVEHDR { internal IntPtr lpData; // pointer to locked data buffer internal uint dwBufferLength; // length of data buffer internal uint dwBytesRecorded; // used for input only internal IntPtr dwUser; // for client’s use internal uint dwFlags; // assorted flags (see defines) internal uint dwLoops; // loop control […]

OpenGL / DirectX Hook – 与FRAPS类似

是否可以检测使用OpenGL或DirectX的应用程序与FRAPS的作用类似? (可能使用某种forms的钩子)? 我可能不需要实际绘制到窗口,我只需要知道什么过程正在进行某种forms的3D渲染。 (编辑:)如果您不熟悉它,FRAPS是一个程序,可用于在3D应用程序上绘制“每秒帧数”计数器。 FRAPS自己查找所有正在运行的3D应用程序,而无需您指定进程名称。 绘制到外部游戏的“每秒帧数”计数器的示例:

如何以编程方式安装字体

我想在程序加载时安装一个特定的字体,并在渲染程序文本时使用该字体。 如何在WinCE 6上以编程方式从.NET CF安装字体。

使用Unicode字符创建快捷方式

我正在使用IWshRuntimeLibrary用c#创建快捷方式。 快捷方式文件名是印地语“नमस्ते”。 我正在使用以下代码我的剪辑来创建快捷方式,其中shortcutName = “नमस्ते.lnk” WshShellClass wshShell = new WshShellClass(); IWshRuntimeLibrary.IWshShortcut shortcut; shortcut = (IWshRuntimeLibrary.IWshShortcut)wshShell.CreateShortcut(destPath + “\\” + shortcutName); shortcut.TargetPath = sourcePath; shortcut.Save(); 在shortcut.Save()我得到以下exception。 The filename, directory name, or volume label syntax is incorrect. (Exception from HRESULT: 0x8007007B)

设置与wpf中的Window标题不同的任务栏文本

我使用C#中的VS2010进行开发,我想创建一个WPF窗口,其中任务栏文本与Window标题不同。 属性Title设置窗口标题和任务栏文本。 有没有办法将它们分开设置?

LogonUser和委托

我正在使用LogonUser win32 api: token = LogonUser(…) WindowsIdentity newId = new WindowsIdentity(token); WindowsImpersonationContext impersonatedUser = newId.Impersonate(); 但是,在此之后调用WCF服务时,我无法使用模拟身份。 我认为这是因为impersonatedUser.ImpersonationLevel等于模拟。 这是什么原因? 是ImpersonationLevel.Identification的级别我需要什么? 如何获得这样的水平?

WS_EX_TRANSPARENT – 它实际上做了什么?

在我的项目中,我创建了一个由用户控制的不透明度的表单。 如果表单是完全透明的,那么鼠标事件会“通过”(没有我的干预),否则我的表单会处理它们。 在阅读此问题并覆盖CreateParams属性以在WS_EX_TRANSPARENT上设置WS_EX_TRANSPARENT标志后,它现在允许鼠标事件在不透明度为任何值<255时通过。 这正是我想要的,但它让我担心我不明白它为什么会起作用。 根据我的阅读,WS_EX_TRANSPARENT旨在通过在Paint方法中从其下面的表单中“窃取位”使表单显得透明,因此: 我的表单的Paint方法及其中的所有控件都不应该被调用,对吧? 由于WS_EX_TRANSPARENT应该导致Windows覆盖它们,那么为什么它会影响输入处理而不影响我的表单? 不透明度应该对鼠标事件的处理没有影响,就像要覆盖Paint一样,“局部”不透明度应该不重要,不是吗? 有人可以解释一下,这面旗帜究竟是做什么的 它是如何工作的?

仅允许该程序的一个实例时,从系统托盘恢复窗口

好吧,标题很长,应该告诉我面临的问题。 这是最小化到图标托盘时的代码: void MainFormResize(object sender, EventArgs e) { if (WindowState == FormWindowState.Minimized) { this.Hide(); this.ShowInTaskbar = false; } } 当程序已经打开并且在sys托盘中时,仍然有人想要打开它的另一个实例,那么: private static void Main(string[] args) { bool createdNew = true; using (Mutex mutex = new Mutex(true, “IPADcommunicator”, out createdNew)) { if (createdNew) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } else { Process current = Process.GetCurrentProcess(); foreach […]

lpr命令无法在Win 7中使用我的C#程序

我有程序使用’lpr’命令将文件发送到打印机。 我安装了Windows SDK 7.1。 它在32位Windows 7系统中运行良好,但在64位Windows 7中无法运行。 Process proc = new Process(); proc.StartInfo.FileName = “lpr”; proc.StartInfo.WorkingDirectory = GlobalConstants.outBaseDir; proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; proc.StartInfo.Arguments = ” -S ” + GlobalConstants.printerIP + ” -P RAW ” + filePath; proc.Start(); 它抛出了一个执行。