SetWinEventHook在每个应用程序的运行中只打回调一次
我有此类聆听Ctrl + Alt + Del屏幕何时可见.当我运行我的应用程序时,它只能使用一次,因此回调再也不会被打击.有时,这似乎会导致内存泄漏给我System.AccessViolationException.我知道此例外与此钩子有关,因为当我删除挂钩代码时,它永远不会引起此例外. 我在做什么错?为什么只能执行一次回调? public static void StartListeningForDesktopSwitch() { SetWinEventHook(EVENT_SYSTEM_DESKTOPSWITCH, EVENT_SYSTEM_DESKTOPSWITCH, IntPtr.Zero, EventCallback, 0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNTHREAD); } public static void EventCallback(IntPtr hWinEventHook,
30 2024-04-26
编程技术问答社区
结构的Pinvoke
我有以下结构定义: #ifndef struct_emxArray_real_T #define struct_emxArray_real_T struct emxArray_real_T { real_T *data; int32_T *size; int32_T allocatedSize; int32_T numDimensions; boolean_T canFreeData; }; #endif /*struct_emxArray_real_T*/ ,想在C#中通过PinVoke使用它.该结构旨在代表矩阵.任何C#结构代码都将不胜感激.谢谢! 有人尝试了[StructLayout(LayoutKind.Sequential, Size = 1)] public unsafe struct mytype { public double* data; public int* size; public int allocated
14 2024-04-26
编程技术问答社区
从c++到c#的RegisterWindowMessage和SendMessage需要帮助
我在C#中有此代码: [DllImport("user32.dll", CharSet = CharSet.Unicode)] static extern uint RegisterWindowMessage(string lpProcName); [DllImport("user32.dll")] private static extern IntPtr SendMessage( IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); 我需要将其从C ++转换为C#: UINT UWM_UART_CTRL_TRS = ::RegisterWindowMessage(_T("BT_UARTCTRL_TRANSFER")); ::SendMessage(HWND_BROADCAST, UWM_UART_CTRL_TRS, 0, 0); 和此: UINT UWM_UART_CTRL_TRS = ::Regis
14 2024-04-26
编程技术问答社区
引发adwapi.dll-cryptDecrypt和cryptEncrypt函数,奇怪的问题
我正在观察此功能的Wierd行为,我要加密的字符串包含14个字符,如果我使用该函数发送buffer = 14的lenght,它会失败("内部错误" - 非常描述性,最有用错误代码),但是当缓冲区长度(和缓冲区本身)为128字节时,它起作用. i通过制作一个尺寸128字节数组来克服了这个问题,然后我从纯文本中复制了14个字节(我希望加密), 当我解密这些字节时,我必须再次将函数赋予整个128个字节阵列(现在,每个字节已加密,甚至是#13-#127(我猜是可以预期的)).幸运的是,对我来说,前14个字节被解密了,其余的都是gibberish. 我想知道,如果传入的缓冲区不是128个字节,为什么加密方法会失败,为什么解密功能还需要128个字节阵列,是否有些填充? 这就是我称为加密函数的方式: System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); // encoding type
12 2024-04-26
编程技术问答社区
如何从C#调用一个以std::vector<>::iterator为参数的非托管C++函数?
在不受管理的C ++中,我有一个我试图从C#调用的函数.此C ++函数如下: typedef std::vector Points; typedef std::back_insert_iterator OutputIterator; namespace MYNAMESPACE{ DLLEXPORT OutputIterator convexHull(Points::iterator first, Points::iterator last, OutputIterator result); } 从C ++调用时,该函数的使用如下: Points points, result; points.push_back(Point(0,0)); points.push_back(Point(10,0)); points.push_back(Point(10,10)); points.push_back(Point(6,5
18 2024-04-26
编程技术问答社区
C#和C++-P/invoke之间的指针
嗨,我试图从C#调用一些C ++代码.因此,我遵循了几个教程,AMDE我自己的DLL,现在我从C#包装器中称呼它.问题是,我有一个接收指针的函数,而且我似乎无法使其起作用,Visual Studio只是向我展示了我不太了解的红色错误.有人可以告诉我我在做什么错吗? 我还有另一个问题,如果C ++中的功能调用其他功能,所有数据将保持完整吗?因为我通过的这个数组将在DLL内进行操纵,然后,我将从DLL中调用其他功能以获取结果 - 我担心数据在函数呼叫之间丢失! 谢谢! dll .h #include #include #include #include #include #include #include #include #include
12 2024-04-26
编程技术问答社区
P/Invoke。如何在C#中用marshalling调用非托管方法?
我对P/Invoke有问题.我正在调用C#代码中的.dll(在C ++上实现).有一个类,其中包含下一个方法: virtual AudioFileList *API CreateAudioFileList ()=0; virtual bool API DisposeAudioFileList (AudioFileList *iAudioFileList)=0; AudioFileList 类看起来像: virtual bool API GetFile (long index, std::string *oPath, AudioFileInfo *fileInfo)=0; virtual long API GetNumberFiles ()=0; 因此,问题是如何调用 CreateAudioFileList 方法,而不是将结果传递给 DisposeAudioFileList 来自C#代码? 谢谢! 解决方案 由于名称杂物,您不能.您应该投资于学习C +
8 2024-04-26
编程技术问答社区
ManagementObjectSearcher在全局钩子中不工作
当我尝试在鼠标事件处理程序内获取所有运行过程时,它会引发异常.首先,我认为问题仍然存在,因为我将async关键字放在鼠标事件处理程序之前,但事实并非如此,因为也为非及时方法提出了例外. 我正在使用 mouseKeyKeyhook library 异常消息: 其他信息:过渡到com上下文0x1AC936A0 此RuntiMecallableWrapper失败了以下错误: 由于申请正在派遣 输入同步呼叫. (Hresult的例外:0x8001010D (rpc_e_cantcallout_ininputsynccall)). 事件处理程序我从中得到所有流程: private async void MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { List allRunningProcesses = Logic.GetAllProcesses();
14 2024-04-26
编程技术问答社区
PInvoke 指向包括浮动数组的结构的指针
我正在尝试调用c库,以便在Xamarin Android应用程序上使用. 考虑以下C结构: typedef struct { bool myBool; myOtherStruct sOtherStruct; int myInt; float myFloat; float myFloatArray[1024]; float myFloatArray2[1024]; float myFloatArray3[20]; float myFloatArray4[30]; } sMyStruct; 这是使用以下函数来称呼的: unsigned int initialise(sMyStruct* a_pMyStruct) 我将其放入C#结构中: [StructLayout(LayoutKind.Sequential)] public unsafe struct SMyStruct { bool my
4 2024-04-26
编程技术问答社区
.NET:如何用STARTUPINFOEX从C#调用CreateProcessAsUser()。
Web上的大多数示例代码以调用CreateProcessAsuser()具有与以下几个类似的PinVoke签名: public static extern bool CreateProcessAsUser(IntPtr hToken, string lpApplicationName, string lpCommandLine, ref SECURITY_ATTRIBUTES lpProcessAttributes, ref SECURITY_ATTRIBUTES lpThreadAttributes, bool bInheritHandles, int creationFlags, IntPtr environment, string currentDirectory, ref STARTUPINFO startupInfo,
10 2024-04-26
编程技术问答社区
不能用非托管导出返回自定义类型实例(Robert Giesecke)。
我正在使用Robertgiesecke的无管理导出Nuget软件包来导出.NET DLL功能,以便在Delphi5 Win32应用程序中调用它. 传递和返回标准类型(字符串,int ...)时,一切都可以正常工作. 但是我尝试遵循编组样本( https:https://sites. google.com/site/robertgiesecke/home/uploads#toc-marshalling-sample )返回C#中定义的自定义类型的实例,但我无法正确访问Delphi中的实例. 在Delphi中,我的代码是: type TCreateSampleInstance = procedure(var sample: PSample); stdcall; TSample = record Name: WideString; end; PSample = ^TSample; var sample: PSample; dllHandle: C
6 2024-04-26
编程技术问答社区
如何检查 DLL 是否使用 P/Invoke (DllImport)?
给定DLL,如何确保使用命令行工具(或不使用)使用P/Invoke? 解决方案 ildasm /text file.dll | findstr pinvokeimpl 如果结果为 ,dll (或exe)不使用pinvoke,则否则否则 它是. n.b. ildasm应安装 Visual Studio ,使用Visual Studio 开发者命令提示./p>
8 2024-04-26
编程技术问答社区
从一个PInvoked OpenFileDialog(GetOpenFileName)中调用一个非管理的字符串数组。
openfiledialog返回一个指针到包含一系列null终止字符串的内存,然后进行最终null表示数组的末尾. 这就是我从非托管指针中恢复C#字符串的方式,但我敢肯定必须有一种更安全,更优雅的方式. IntPtr unmanagedPtr = // start of the array ... int offset = 0; while (true) { IntPtr ptr = new IntPtr( unmanagedPtr.ToInt32() + offset ); string name = Marshal.PtrToStringAuto(ptr); if(string.IsNullOrEmpty(name)) break;
12 2024-04-26
编程技术问答社区
虽然我只做了1次LoadLibrary,但必须要做2次FreeLibrary。另外,在卸载DLL后,当试图再次加载它时,错误发生了
具有以下C#代码,用于加载和卸载C ++ DLL. i仅加载DLL一次,但是代码必须卸载DLL 2次.同样,在卸载DLL之后,当我再次加载它时,我调用DLL的导出函数,我会收到以下错误消息: 试图读取或写下受保护的内存.这通常表明其他记忆是损坏的. dll取决于其他DLL. /// //////////////handle of FDD DLL: System.IntPtr SystemIntPtr_handle_of_DLL=System.IntPtr.Zero; private void button4_Click(object sender, EventArgs e) { try { string string_Dependency_path = ".\\DLL_Dependencies\\"; Call_DLL.SetDllDirectory(
18 2024-04-26
编程技术问答社区
我如何使用DMProcessConfigXML来配置我的Windows Mobile设备?
我想创建一个C#程序来提供Windows Mobile设备.我已经在一个名为 dmprocessconfigxml 的功能上找到了MSDN文档.关于如何使用此功能. 如何在Windows Mobile应用程序中使用此功能?我怀疑这与使用Pinvoke有关. 谢谢, 保罗 解决方案 从托管代码中,您可以在Microsoft.windowsmobile.configuration中调用ConfigurationManager.processConfiguration. 名称空间. mssdn 这是示例代码: XmlDocument configDoc = new XmlDocument(); configDoc.LoadXml( ""+ ""+ ""
8 2024-04-26
编程技术问答社区
实施镜头放大,放大Windows任务栏
我希望能够在Windows任务栏顶部执行镜头Magnificaiton.到目前为止,我一直没有成功实施此视图,因为任务栏将始终在我的窗口顶部打开. Windows内置放大镜可以做到这一点,所以我希望确实可以. 我已经连接了两个屏幕截图,显示了Windows内置放大镜以及它如何放大任务栏以及我的应用程序将如何在任务栏下呈现. Windows内置放大镜: 我的应用程序: 有什么方法可以使我的应用程序渲染在任务栏上方,从而放大任务栏?
6 2024-04-26
编程技术问答社区
如何在特定窗口中获得光标POS?
我希望在特定窗口中获得光标位置. 目前,我得到了: /// /// Struct representing a point. /// [StructLayout(LayoutKind.Sequential)] public struct POINT { public int X; public int Y; public static implicit operator Point(POINT point) { return new Point(point.X, point.Y); } } /// /// Retrieves the cursor's
22 2024-04-26
编程技术问答社区
为shell32.dll'的SHMultiFileProperties进行P/调用
我对P/Invoke不太好.谁能告诉我如何声明和使用以下shell32.dll在.net中函数? 来自 http://msdn.microsoft. com/en-us/library/bb762230%28vs.85%29.aspx : HRESULT SHMultiFileProperties( IDataObject *pdtobj, DWORD dwFlags ); 它用于显示多个文件系统对象的Windows Shell属性对话框. 我已经弄清楚了如何将一个文件或文件夹使用shobjectProperties: [DllImport("shell32.dll", SetLastError = true)] static extern bool SHObjectProperties(uint hwnd, uint shopObjectType, [MarshalAs(UnmanagedType.LPWStr)] string
10 2024-04-25
编程技术问答社区
使用非托管DLL的访问违例
目前,我们使用供应商的非管理DLL,使我们能够访问特定的乐器.引人注目的特定功能在标题文件中指定: extern "C" short CCONV acq_get_board_count (); 在我的应用程序中,我有Pinvoke语句: public class bograms { [DllImport("bograms.dll", EntryPoint = "acq_get_board_count", CallingConvention = CallingConvention.StdCall)] public static extern short acq_get_board_count(); } 现在,在我的代码中,我试图处理冗余,因此我创建了一个试图保持运行的计时器: public class Instrument { private System.Threading.Timer keepAliveTimer; public
8 2024-04-25
编程技术问答社区
从C#到C++的嵌套结构转换
我在C ++中具有以下类型: typedef void* keychain_handle; typedef struct { const char* keyHolderName; unsigned int numKeys; key* keys; } key_holder; typedef struct { const char* keyName; unsigned int keySize; } key; 我有以下methos: int createKeyChain( int id, key_holder* keyHolders, keychain_handle* handle); 我需要我的C#用密钥创建密钥持有器,将其发送到C ++代码并接收句柄. 这是我的C#代码: /* Structs */ [StructLayout(LayoutKind.Sequential)] public stru
14 2024-04-25
编程技术问答社区