Tag: winapi

SetConsoleActiveScreenBuffer不显示屏幕缓冲区

我目前正在尝试使用两个屏幕缓冲区在C#中编写一个控制台应用程序,这些缓冲区应该来回交换(很像现代GPU上的VSync)。 由于System.Console类没有提供切换缓冲区的方法,我不得不从kernel32.dll P / Invoke几个方法。 这是我目前的代码,大大简化了: static void Main(string[] args) { IntPtr oldBuffer = GetStdHandle(-11); //Gets the handle for the default console buffer IntPtr newBuffer = CreateConsoleScreenBuffer(0, 0x00000001, IntPtr.Zero, 1, 0); //Creates a new console buffer /* Write data to newBuffer */ SetConsoleActiveScreenBuffer(newBuffer); } 发生以下事情: 屏幕保持为空,即使它应该显示newBuffer 当写入oldBuffer而不是newBuffer ,数据会立即显示。 因此,我写入缓冲区的方式应该是正确的。 在调用SetConsoleActiveScreenBuffer(newBuffer) ,错误代码现在为6,表示无效句柄。 这很奇怪,因为句柄不是-1,文档描述为无效。 我应该注意到,我很少直接使用Win32 API,并且对常见的Win32相关问题知之甚少。 我会很感激任何帮助。

是否可以在Winforms窗口中抢夺并托管win32 hwnd控件?

我在网上进行了搜索,但他们正在讨论如何为WPF做这个。 想象一下如下所示的win32应用程序,并假设应用程序本身允许创建新的Windows窗体窗口作为子窗口。 所以他们可以互相交谈,我可以发送按键,并控制父应用程序。 我想要做的是剥离图像中列出的列表视图并将其托管在我的Winforms窗口中。 所以它在我的Winforms窗口中托管在浮动顶部,并在我的Winforms窗口移动时移动控件。 我可以从父应用程序的.NET API获取hWnd句柄,但我不确定我想要的是否可行。 如果是这样,怎么样?

如何访问隐藏的分区/卷

我必须编写一个代码来使用c#或c ++访问隐藏的磁盘分区/卷。 但在这件事上找不到任何帮助参考。 作为隐藏卷,它不包含“磁盘字母”,因此您不能只键入“C:\”并访问它。 一个例子是Windows附带的“恢复分区”。 你无法在资源管理器上看到它但它就在那里。 我的应用程序将从thoose分区写入和读取数据,我必须找到一种方法来执行类似“c:\”的操作。 在上图中,卷5和6是隐藏的分区。 我在stackoverflow上找到了这个链接,但它只是“列出”de分区: https : //msdn.microsoft.com/en-us/library/cc542456(v = VS.85).aspx 编辑 问题是:即使使用WMI作为建议,我也找不到在查找文件时如何过滤卷。 例如, select * from win32_DataFile将列出机器中的所有文件。 我认为应该是一种使用ID(或名称)过滤Volumes的方法。 就像是: select * from win32_DataFile where volumeId = ‘\\?\Volume{2d5f3a68-75f5-44c4-aa42-716b45811916}\’ 或者更美丽的方式: var files = Directory.GetFiles(@”\\?\Volume{6ff7748e-78db-4838-8896-254b074918f5}\”); 此外,我发现了一个关于分区和卷的优秀的awenser(它们不是一回事) https://social.technet.microsoft.com/Forums/en-US/e7b2ddd6-f245-49ed-8fec-3b6e08e75369/how- DO-找到的最分区全局唯一标识符?论坛= winservergen EDIT2 正如Harry所说,使用“\。\ Volume ….”是恢复文件的好方法。 但我找不到使用c#编写(创建)新文件的方法。 到目前为止,最好的approch是使用pinvoke来实现c ++ CreateFile方法/句柄。 任何建议?

如何使用视觉样式绘制任务栏按钮?

我创建了一个DeskBand工具栏,我想在工具栏上显示一个按钮,该按钮具有样式视觉样式作为任务栏按钮。 在.NET中,您可以使用VisualStyleRenderer呈现任务栏背景,但是可以使用方法呈现按钮。 是否有任何Win32 API可用于使用视觉样式绘制按钮而不是通过绘制路径或图像模拟按钮的外观?

从C#进入Windows File Copy API

有没有办法从C#挂钩到Windows File Copy API? 我知道这需要非托管代码,但代码示例或启动程序会有所帮助。 我已经看过C ++代码,但它都是希腊语。 更新:我道歉,我应该更清楚我的意图。 我希望实际上将Windows的复制function更改为更严格(例如允许排队,调度,处理重启,暂停等)。 当我说钩子时,我的意思是API挂钩,这样当有人开始复制时,我会获得源和目的地,并且可以根据我的心愿处理它。 我已经读完了以前用来挂钩Mac OS API以做这些事情所以我假设在C ++ WINAPI世界中有一些类型的等价物。

.Net的Windows API包装器?

Windows API 所以我知道WinForms稍微触及了Windows API,但坦率地说它太可怕了。 特别是分层窗户和闪烁。 所以我想知道是否有人为Windows API编写了部分或完整的包装器。我对分层窗口方面特别感兴趣,但实际上API的任何部分都是一个好的起点。 更新 :我在这里找到了Windows API代码包: http : //code.msdn.microsoft.com/WindowsAPICodePack但似乎它没有包装分层Windows? 我假设这是正确的吗? 原生API(Windows) 我听过一些关于Native API的内容,但我不太清楚它是什么用的? 它提供了哪些function? 调查是不是一个好主意? 摘要(简而言之问题) 有谁知道Windows API的现有(部分或完整)包装器? 如果答案是肯定的问题,那么在哪里可以自己学习它,并且可能自己编写? Native API的解释? 它有什么作用? 我可以用它来改善应用程序吗? 我甚至可以使用它吗? 任何这些的答案非常感谢:)谢谢

内联汇编代码以获取CPU ID

我在这里找到了一段很好的代码,它使用API​​调用执行ASM指令,以获取CPU的序列号: using System; using System.Text; using System.Runtime.InteropServices; namespace ConsoleApplication1 { class Program { [DllImport(“user32”, EntryPoint = “CallWindowProcW”, CharSet = CharSet.Unicode, SetLastError = true, ExactSpelling = true)] private static extern IntPtr ExecuteNativeCode([In] byte[] bytes, IntPtr hWnd, int msg, [In, Out] byte[] wParam, IntPtr lParam); [return: MarshalAs(UnmanagedType.Bool)] [DllImport(“kernel32”, CharSet = CharSet.Unicode, SetLastError = true)] public static extern […]

如何强制Internet Explorer打开它当前运行的实例而不是创建一个新实例?

如何以编程方式启动IE( iexplore.exe )并在当前运行的实例中导航(通过打开新选项卡或替换当前URL)而不是创建新实例。 我已经搜索了命令行开关,并尝试使用InternetExplorer.Application ,但无济于事。 这是我需要的伪 (IE6-IE9会很好): ShellExecute(Handle, ‘open’, ‘iexplore.exe’, ‘”http://google.com” -single_instance’, nil, SW_RESTORE); 这是一些代码来展示我的尝试。 Delphi中的代码(部分基于如何从HWND获取IHTMLDocument2 ): implementation uses ShellApi, ComObj, ActiveX, SHDocVw, MSHTML; function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): Boolean; type TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; wParam: WPARAM; out pObject): HRESULT; stdcall; var hInst: HMODULE; lRes: Cardinal; Msg: UINT; pDoc: IHTMLDocument2; ObjectFromLresult: […]

如何使用Windows shell获取文件扩展名的大图标?

我找到了关于获取文件甚至文件扩展名的系统映像的各种文章。 我有以下方法,用于获取小型16×16和大型32×32图像。 // DLL Import [DllImport(“shell32”)] private static extern IntPtr SHGetFileInfo( string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbFileInfo, uint uFlags); // Constants/Enums private const int FILE_ATTRIBUTE_NORMAL = 0x80; private enum SHGetFileInfoConstants : int { SHGFI_ICON = 0x100, // get icon SHGFI_DISPLAYNAME = 0x200, // get display name SHGFI_TYPENAME = 0x400, // get type […]

C#WinForms AnimateWindow问题

我使用以下代码来动画窗口。 让我稍微解释一下我程序的视觉结构。 我有一个位于Form1顶部的FlowLayoutPanel,以及位于FlowLayoutPanel顶部的许多GroupBox对象。 最后,我有一个Button和一个位于GroupBox顶部的不可见的RichTextBox对象。 例如:Form1-> FlowLayoutPanel-> GroupBox-> Button和RichTextBox(不可见) 我想要实现的是,当我单击Button对象时,我希望我的RichTextBox向下滑动。 我通过在我的主窗体上创建一个按钮和一个RichTextBox来尝试它,它工作得非常好。 但是,当我在运行时使用GroupBox控件尝试相同的操作时,我的Animate函数会抛出一个未知的exception。 class Effects { public enum Effect { Roll, Slide, Center, Blend } public static void Animate(Control ctl, Effect effect, int msec, int angle) { int flags = effmap[(int)effect]; if (ctl.Visible) { flags |= 0x10000; angle += 180; } else { if (ctl.TopLevelControl == ctl) […]