Articles of pinvoke

在.NET应用程序中禁用可访问性快捷方式?

此MSDN文章 – http://msdn.microsoft.com/en-us/library/bb219746(VS.85).aspx#Disabling_Accessibility_Shortcut_Keys – 为C ++程序员提供有关如何暂时禁用可访问性的Windows快捷方式的信息(例如按住Shift 8秒,或者连续按下Shift 5次以上)。 当然,在C#中有一些简单的方法可以做到这一点,但我找不到任何资源。 我在非全屏应用程序中使用DirectInput。 我想要做的就是没有恼人的popup窗口出现; 尽pipe如此,为了防止应用程序以非优雅的方式closures(我不希望在这种情况下永久性地改变用户的设置),我宁愿select一些不需要使用Windows设置的东西, 。 有什么想法吗?

从c#调用UNIX和Linux共享对象文件.so

有没有办法用C编写的共享对象文件,并build立在Unix上,从C#P / Invoke调用? 或者我需要使用Java或类似的东西?

通过引用传递的参数使用P / Invoke返回垃圾

我在Linux上使用Mono / C#并且有以下C#代码: [DllImport("libaiousb")] extern static ResultCode QueryDeviceInfo(uint deviceIndex, ref uint PID, ref uint nameSize, StringBuilder name, ref uint DIOBytes, ref uint counters); 我称之为定义如下的Linux共享库调用: unsigned long QueryDeviceInfo( unsigned long DeviceIndex , unsigned long *pPID , unsigned long *pNameSize , char *pName , unsigned long *pDIOBytes , unsigned long *pCounters ) 在调用Linux函数之前,我已将参数设置为已知值。 我也在Linux函数的开头放了一个printf,所有的参数都按照预期打印值。 所以参数似乎从C#传递到Linux正常。 返回值也不错。 但是,通过引用传递的所有其他参数都会返回垃圾。 […]

P /调用ioctl系统调用

我正在开发一个需要与Video4Linux抽象交互的应用程序。 该应用程序是用C#开发的,使用单声道框架。 我面临的问题是,我不能P /调用ioctl系统调用。 或者,更确切地说,我可以P /调用它,但它崩溃严重。 外部声明如下: [DllImport("libc", EntryPoint = "ioctl", SetLastError = true)] private extern static int KernelIoCtrl(int fd, int request, IntPtr data); 到现在为止还挺好。 使用KernelIoCtrl的实际例程如下: protected virtual int Control(IoSpecification request, object data) { GCHandle dataHandle; IntPtr dataPointer = IntPtr.Zero; try { // Pin I/O control data if (data != null) { dataHandle = GCHandle.Alloc(data, […]

用C#编程lockingWindows工作站

我遇到了这个lockingWindows工作站的例子: using System.Runtime.InteropServices; … [DllImport("user32.dll", SetLastError = true)] static extern bool LockWorkStation(); … if (!LockWorkStation()) throw new Win32Exception(Marshal.GetLastWin32Error()); // or any other thing 是否有一个纯粹的pipe理替代这个片段? 即,没有P-Invoke。

使用SystemParametersInfo协助

尝试使用SystemParametersInfo时,我已经卡住了。 我使用德沃夏克键盘,所以我想做一个exe,我可以双击每当我想改变键盘布局。 我用C#使用SystemParametersInfo。 我可以检索当前的input语言就好了。 但是,当我尝试设置input语言时,我得到一个返回值为false,并且input语言不会更改。 预先感谢您的任何帮助。 这是我正在使用的代码: class KeyboardSwitcher { [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref uint pvParam, uint fWinIni); private const uint SPI_GETDEFAULTINPUTLANG = 0x0059; private const uint SPI_SETDEFAULTINPUTLANG = 0x005A; private const uint SPIF_UPDATEINIFILE = 0x01; private const uint SPIF_SENDWININICHANGE = 0x02; private […]

如何确定一首歌曲使用winmm.dll多长时间?

我有P /从WinMM.dll中调用mciSendString方法 : [DllImport("winmm.dll")] private static extern long mciSendString(string strCommand, StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback); 我可以播放,暂停和停止歌曲(我也可以打开/closuresCD驱动器,但这不重要)。 现在,我希望我的用户能够跳到歌曲中的某个部分(例如1:21)。 我已经看过searchfunction文档 ,除了我无法弄清楚歌曲的时间长短以外,看起来相当不错。 在WinMM中是否存在一个命令/方法?

从C#应用程序获取WindowsExplorer中的当前select?

是否有可能从我的C#应用​​程序获取当前在Windows资源pipe理器中select的文件的列表? 我已经做了很多关于从C#这样的托pipe语言与Windows资源pipe理器交互的不同方法的研究。 最初,我正在研究shell扩展的实现( 在这里和这里例如),但显然这是从托pipe代码中的一个坏主意,可能无论如何对我的情况可能矫枉过正。 接下来,我看着PInvoke / COM解决scheme,并find这篇文章 ,这导致我这样的代码: SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows(); string filename; ArrayList windows = new ArrayList(); foreach(SHDocVw.InternetExplorer ie in shellWindows) { filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower(); if(filename.Equals("explorer")) { Console.WriteLine("Hard Drive: {0}", ie.LocationURL); windows.Add(ie); var shell = new Shell32.Shell(); foreach (SHDocVw.InternetExplorerMedium sw in shell.Windows()) { Console.WriteLine(sw.LocationURL); } } } …但个别的InternetExplorer对象没有获得当前文件select的方法,虽然它们可以用来获取有关窗口的信息。 然后我发现这篇文章正是我所需要的,但在C ++中。 以此为出发点,我试图通过在我的项目中添加shell32.dll作为参考进行一些翻译。 我结束了以下几点: […]

在C#中查看非托pipedll上的导出表

我目前正在尝试创build一个C#应用程序,这将允许我从非托pipeDLL查看导出表。 我的问题是,一旦我有了所需的指针,我就不知道如何循环API提供给我的信息。 这是我现在所拥有的: using System; using System.ComponentModel; using System.Runtime.InteropServices; namespace DLLMapper { class DLLExportViewer { #region APIs [DllImport("imagehlp.dll")] public static extern Boolean MapAndLoad(String ImageName, String DllPath, ref LOADED_IMAGE LoadedImage, Boolean DotDll, Boolean ReadOnly); [DllImport("imagehlp.dll")] public static extern Boolean UnMapAndLoad(ref LOADED_IMAGE LoadedImage); [DllImport("dbghelp.dll")] public static extern IntPtr ImageDirectoryEntryToData(IntPtr Base, Boolean MappedAsImage, UInt16 DirectoryEntry, ref Int32 Size); […]

检查系统中是否存在DLL

快速的问题。 我想知道在我的应用程序正在执行的系统中是否存在一个DLL。 这在C#中可能吗? (可以在所有的Windows操作系统上运行?) 对于DLL我的意思是一个非.NET的经典的DLL(一个Win32的DLL) (基本上我想做一个检查,因为我使用的DLL可能会或可能不会出现在用户系统上,但我不希望应用程序崩溃而没有警告,当这不存在:P)