Tag: winapi

可以全屏打开程序的应用程序?

我需要创建一个以全屏模式启动新程序(例如记事本)的应用程序。 我能用c#做吗? 我很感激代码示例。谢谢:)

访问被拒绝 – 尝试从地址栏的句柄获取URL(文本)时

我正在尝试从IE的地址栏中提取URL。 (使用以下C#代码在Windows 7上的IE 8)。 static string GetUrlFromIE() { IntPtr windowHandle = APIFuncs.getForegroundWindow(); IntPtr childHandle; String strUrlToReturn = “”; //try to get a handle to IE’s toolbar container childHandle = APIFuncs.FindWindowEx(windowHandle, IntPtr.Zero, “WorkerW”, IntPtr.Zero); if (childHandle != IntPtr.Zero) { //get a handle to address bar childHandle = APIFuncs.FindWindowEx(childHandle, IntPtr.Zero, “ReBarWindow32”, IntPtr.Zero); if (childHandle != IntPtr.Zero) { […]

SetFilePointer不会失败,但也不会移动指针

首先,请原谅我,如果我说些傻话,我不是电脑工程师的IT人员,但我被分配到需要更多技能的东西。 我需要在SD卡中写入和读取物理扇区。 我用C ++完成了它,但主要的应用程序是用C#编写的,所以我认为这是编写我的第一个dll的好时机。 以下是用于编写扇区的c ++代码。 private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) { HANDLE hFile = INVALID_HANDLE_VALUE; BOOL fSuccess = FALSE; DWORD dwBytesWritten = 0; unsigned char chBuffer[SIZE]; long SectorActual = 39; long PosicionInicio = SectorActual * 512; for (int i=0; iText += “Could not open file (error ” + GetLastError() + “) \r\n”; return; […]

在C#中定义Windows API接口时,是否必须定义所有成员? 我可以只定义我要使用的方法吗?

例如,这是从Pinvoke站点获取的IFileOpenDialog接口的完整定义,即Windows Shell接口: [ComImport, Guid ( “d57c7288-d4ad-4768-be02-9d969532d960” ), InterfaceType ( ComInterfaceType.InterfaceIsIUnknown )] interface IFileOpenDialog : IFileDialog { // Defined on IModalWindow – repeated here due to requirements of COM interop layer // ——————————————————————————– [MethodImpl ( MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime ), PreserveSig] int Show ( [In] IntPtr parent ); // Defined on IFileDialog – repeated here due […]

获取当前鼠标光标类型

如何获取当前的GLOBAL鼠标光标类型(沙漏/箭头/ ..)? 在Windows中。 全局 – 即使鼠标位于我的应用程序之外,或者即使我的程序是无风的,我也需要它。 在C#,Delphi或纯winapi,没关系…… 非常感谢你提前!!

Icon.FromHandle:我应该处理它,还是调用DestroyIcon?

我使用Win32 SHGetFileInfo来获取属于某个文件的图标的句柄。 有很多描述如何执行此操作,也可以在stackoverflow上执行此操作,例如: 获取shell使用的图标 调用该函数后,您将拥有一个带有Icon图标句柄的结构。 使用静态方法Icon.FromHandle我可以将它转换为System.Drawing.Icon类的对象。 该类实现System.IDisposable。 正确的用法如下: using (Icon icon = Icon.FromHandle(shFileInfo.hIcon)) { // do what you need to do with the icon } 在离开using语句时,将放置图标对象。 MSDN在Icon.FromHandle的描述中警告(点击查看) : 使用此方法时,必须使用Win32 API中的DestroyIcon方法处置原始图标,以确保释放资源。 并在Icon.Dispose(点击查看) 释放此Icon使用的所有资源。 题: Dispose()对象是否足够,或者我应该调用Dispose()和DestroyIcon,还是调用DestroyIcon而不是Disposing对象?

文件系统支持FindFirstFileEx,限制目录

我正在使用Windows API函数FindFirstFileEx,因为它提供了仅返回给定目录的子目录(忽略文件)的function。 但是,当我使用required标志调用此函数时,我仍然会收到文件和目录。 FindFirstFileEx使用的FindExSearchLimitToDirectories标志的MSDN文档说: 这是一个咨询标志。 如果文件系统支持目录过滤,则该函数将搜索与指定名称匹配的文件,并且也是目录。 如果文件系统不支持目录过滤,则会以静默方式忽略此标志。 使用此搜索值时,FindFirstFileEx函数的lpSearchFilter参数必须为NULL。 如果需要目录过滤,则此标志可用于所有文件系统,但由于它是一个顾问标志并且仅影响支持它的文件系统,因此应用程序必须检查存储在FindFirstFileEx函数的lpFindFileData参数中的文件属性数据确定函数是否已返回目录的句柄。 那么,什么文件系统实际上支持这个标志? 实际在同一页面上列出这些支持的文件系统是明智的,但我找不到它。 我的开发系统是Windows XP SP3,NTFS,.NET 3.5。 我知道我可以检查文件属性以确定文件是否是目录,但这意味着检查每个文件/目录。 它也首先打败了使用FindFirstFileEx的目的。 当然,我的代码中仍有可能出错。 我唯一能看到的是将IntPtr.Zero传递给lpSearchFilter可能与传递NULL不同(如引用中所述)。 这是我正在使用的代码示例: m_searchDirHandle = WinAPI.FindFirstFileEx(@”C:\Temp\*”, WinAPI.FINDEX_INFO_LEVELS.FindExInfoStandard , ref m_findDirData, WinAPI.FINDEX_SEARCH_OPS.FindExSearchLimitToDirectories, IntPtr.Zero , 0); if (m_searchDirHandle != WinAPI.INVALID_HANDLE_VALUE) { do { foundNextDir = WinAPI.FindNextFile(m_searchDirHandle, ref m_findDirData); } while (foundNextDir); }

枚举C#中的文件句柄

我想知道是否可以枚举c#中的文件句柄,也许使用Win32API。 这对于窗口和进程句柄很容易实现,但似乎文件句柄不可能。 虽然NtQuerySystemInformation提供了一些function,但这是逐步淘汰的,因此不建议使用这种方法。

从Selenium webdriver的当前窗口GUID获取窗口句柄(IntPtr)

我正在尝试捕获整个浏览器屏幕的截图(例如,使用任何工具栏,面板等),而不仅仅是整个页面,所以我有这样的代码: using (FirefoxDriver driver = new FirefoxDriver()) { driver.Navigate().GoToUrl(url); ScreenCapture sc = new ScreenCapture(); // How can I find natural IntPtr handle of window here, using GUID-like identifier returning by driver.currentWindowHandle? Image img = sc.CaptureWindow(…); MemoryStream ms = new MemoryStream(); img.Save(ms, ImageFormat.Jpeg); return new FileStreamResult(ms, “image/jpeg”); }

SendMessage WM_SETTEXT到TextBox不会触发TextChanged事件

我有代码获取文本框控件的句柄,并使用Windows API来更改文本。 更新文本时不会触发TextChanged事件。 有没有办法使用Windows API触发TextBox.TextChanged事件? [更新] 我认为事件不会触发的原因是因为文本框句柄是通过DCOM接口发送的。 该程序是用C#编写的National Instruments TestStand shell,它使用NI TestStand COM对象作为核心function。 在TS序列文件(一种TS脚本语言)中,我为文本框句柄创建了一个对象引用,并使用shell表单的load事件中的TS api进行设置。 之后我将句柄发送到我的c#DLL。 我使用SendMessage更新文本框,这很好用。 问题是TextChanged事件不会触发。 我尝试使用TS接口发送文本框和TextChanged委托,我无法让它工作。 我认为通过TS COM对象有一个AppDomain问题。