Articles of 互操作

WPF相当于Application.AddMessageFilter(Windows窗体)

我在我的WinForms应用程序(使用非托pipe代码时)使用Application.AddMessageFilter() )。 现在我切换到WPF ,无法find这个function。 请咨询哪里可以find或实施。

如何从Ocaml使用自己的共享库.so调用C ++代码?

我需要build立一个调用共享对象(Linux下的.so)的Ocaml / C ++模块, 只要编译一个简单的Ocaml / C ++存根就是一个问题,我pipe理这个东西,但是当我需要将.so和ocamlmklib或者ocamlopt连接起来的时候,它会失败 我在gcc 4.5下工作(c ++ 0x) 共享对象的文件: hello.hpp #include <iostream> #include <string> using namespace std; class HelloApplication { public : HelloApplication(); ~HelloApplication(); void say(string s); }; typedef HelloApplication *(*create_hello)(); hello.cpp: #include "hello.hpp" HelloApplication::HelloApplication(){} HelloApplication::~HelloApplication(){} void HelloApplication::say(string s) { cout << "Hello : " << s << endl; } extern […]

CoCreateInstance在.NET中精确匹配?

我有进程(DLL)的COM服务器,但我解决了作为DllSurrogate运行,由于这个原因从非托pipe代码(delphi)我有: function TComWrapper.GetServer: IUnknown; begin OleCheck(CoCreateInstance(ServerData^.ClassId, nil, CLSCTX_LOCAL_SERVER, IUnknown, Result)); end; 从C#使用现在: [DllImport("ole32.dll", EntryPoint = "CoCreateInstance", CallingConvention = CallingConvention.StdCall)] static extern UInt32 CoCreateInstance([In, MarshalAs(UnmanagedType.LPStruct)] Guid rclsid, IntPtr pUnkOuter, UInt32 dwClsContext, [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object rReturnedComObject); … UInt32 dwRes = CoCreateInstance(ClassIdGuid, IntPtr.Zero, (uint)(CLSCTX.CLSCTX_LOCAL_SERVER), //if OR with CLSCTX_INPROC_SERVER then INPROC Server will be created, […]

COM +库应用程序的目的是什么?

创buildCOM +应用程序时,向导会提供在库和服务器应用程序之间进行select。 一个服务器应用程序在一个单独的进程中被激活,这可以用来廉价地使64位消费者与32位进程内COM组件互操作。 在调用者进程中被激活的库应用程序有什么用处? 为什么使用它们而不是简单的旧的进程内COM服务器?

在第三方应用程序中模拟用户input

不知道从哪里开始这个… 我正在考虑创build一个小的应用程序来自动化一些重复的文本input。 我希望能够定义文本片段,并在需要时将其注入到其他应用程序中。 解决这个问题最好的办法是什么? 我偶然发现了UI Automation以及SendKeys。 有什么build议么? 我不介意是否必须“指出”应用程序的input控件(如Mac的原生截图工具要求您单击要捕获的窗口)。 例如,我可以在这个应用程序中select文本片段,然后点击我的其他应用程序的文本input框,这将以某种方式让第一个应用程序获得input控件的句柄,然后模拟input。 另外,是否有任何方法以编程方式“提交”一旦填写的控制forms? 我来自一个网页devise背景,所以很多这个本地应用程序开发对我来说是新的。 对不起,如果这是一个模糊的问题,我只是不知道从哪里开始,这…

代理/存根是暴露接口?

假设我介绍了一个COM接口,并且不希望任何第三方使用它 。 我完全控制了COM组件和保存接口定义的IDL文件的来源。 我的COM组件将需要编组的东西来回接口,所以我需要实现IMarshal或提供一个typelib或提供一个代理/存根(stub) 。 显然,如果我提供一个typelib,任何人都可以检查它,并find我的界面是什么以及如何使用它。 这不是我想要的。 如果我使用代理/存根? 它会暴露的接口,让任何人检查它或将保持接口的细节隐藏?

发送消息到Windows进程(而不是它的主窗口)

我有一个应用程序,在随后的开始检测是否有一个进程已经运行相同的名称,如果是这样,激活正在运行的应用程序的窗口,然后退出。 问题是主窗口可能被隐藏(只有通知区域图标可见),因此没有窗口句柄。 在启动时,以前的实例的MainWindowHandle属性是0,所以我不能发送ShowWindow或PostMessage 。 有什么办法可以发送消息,可以拦截运行的应用程序,从而使其显示其主窗口? 该应用程序是用C#编写的,我正在使用下面的代码来实现这一点。 [STAThread] static void Main() { bool createdNew = true; using (Mutex mutex = new Mutex(true, "MyMutexName", out createdNew)) { if (createdNew) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } else { Process current = Process.GetCurrentProcess(); foreach (Process process in Process.GetProcessesByName(current.ProcessName)) { if (process.Id != current.Id) { Interop.WINDOWINFO pwi = new Interop.WINDOWINFO(); […]

在C#中使用SetWindowPos来移动窗口

我有下面的代码: namespace WindowMover { using System.Windows.Forms; static class Logic { [DllImport("user32.dll", EntryPoint = "SetWindowPos")] public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags); public static void Move() { const short SWP_NOMOVE = 0X2; const short SWP_NOSIZE = 1; const short SWP_NOZORDER = 0X4; const int SWP_SHOWWINDOW […]

从c#注册一个自定义的win32窗口类

我有一个用WPF编写的新应用程序需要支持一个旧的API,它允许它接收一个已经发布到隐藏窗口的消息。 通常,另一个应用程序使用FindWindow来使用自定义窗口类的名称来标识隐藏窗口。 1)我假设实现一个自定义的窗口类,我需要使用老派的win32调用? 我的旧的c + +应用程序使用RegisterClass和CreateWindow使最简单的可能不可见的窗口。 我相信我应该能够在c#中完成相同的工作。 我不希望我的项目必须编译任何非托pipe代码。 我已经尝试从System.Windows.Interop.HwndHostinheritance并使用System.Runtime.InteropServices.DllImport来引入上述API方法。 这样做,我可以成功地举办一个标准的Win32窗口,如WPF内的“列表框”。 但是,当我为我的自定义窗口调用CreateWindowEx时,它总是返回null。 我的RegisterClass调用成功,但我不知道我应该设置WNDCLASS.lpfnWndProc成员。 2)有谁知道如何成功地做到这一点?

如何将VARIANT_BOOL转换为C ++ bool?

当使用COM时,布尔值将作为在wtypes.h中声明的VARIANT_BOOL传递。 还有预定义的真值和假值: #define VARIANT_TRUE ((VARIANT_BOOL)-1) #define VARIANT_FALSE ((VARIANT_BOOL)0) 将VARIANT_BOOL转换为C ++ booltypes的最佳方法是什么? 明显的变体是: 与VARIANT_FALSE比较 简单地投给布尔 其他方式可以很容易地发明。 哪种方法是最好的 – 最可读性,最符合标准的兼容性,最不容易受到错误植入的问题,而且最不容易出现移植到64位平台的问题。