首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用RAPI.Invoke调用桌面应用程序中的设备winapi方法

如何使用RAPI.Invoke调用桌面应用程序中的设备winapi方法
EN

Stack Overflow用户
提问于 2015-08-05 11:49:50
回答 1查看 886关注 0票数 0

我需要从桌面应用程序获得设备Id,其中设备是一个基于WindowsCE5.0的手持终端,并连接到PC。

从设备中的应用程序获取这些信息很容易,我可以使用任何GetDeviceUniqueIDKernelIoControl WinApi方法,例如:

代码语言:javascript
复制
    [DllImport("coredll.dll")]
    private extern static int GetDeviceUniqueID([In, Out] byte[] appdata,
                           int cbApplictionData,
                            int dwDeviceIDVersion,
                            [In, Out] byte[] deviceIDOuput,
                            out uint pcbDeviceIDOutput);

    public byte[] GetDeviceID(string AppString)
    {
        // Call the GetDeviceUniqueID
        byte[] AppData = Encoding.Unicode.GetBytes(AppString);
        int appDataSize = AppData.Length;
        byte[] DeviceOutput = new byte[20];
        uint SizeOut = 20;
        GetDeviceUniqueID(AppData, appDataSize, 1, DeviceOutput, out SizeOut);
        return DeviceOutput;
    }

但是我需要从桌面应用程序中得到这个。

WindowsMobile5.XSDK中有一个示例可以从桌面应用程序获取这个ID。由于我使用的是Windows,所以该示例不提供ID (用于windows )。

我相信使用RAPI.Invoke()方法(或Opennetcf )从桌面应用程序中使用上述方法是可能的。但我想不出如何将RAPI.Invoke与多参数WinApi方法相结合,例如GetDeviceUniqueID。

我有一个示例代码,其中还包括C#签名的WinApi方法作为注释:

代码语言:javascript
复制
    //[DllImport("coredll.dll")]
    //private extern static int GetDeviceUniqueID([In, Out] byte[] appdata,
    //                       int cbApplictionData,
    //                        int dwDeviceIDVersion,
    //                        [In, Out] byte[] deviceIDOuput,
    //                        out uint pcbDeviceIDOutput);

    private void buttonGetDeviceID_Click(object sender, RoutedEventArgs e)
    {
        // RAPI
        RAPI rapi = new RAPI();
        rapi.Connect(true);
        // How do I pass several parameters inside a byte[] ?
        rapi.Invoke(@"\Windows\coredll.dll", "GetDeviceUniqueID", inputData, out outputData);
        //Process outputData
    }

还有一个类似的问题,这里,但没有提供任何解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-06 06:28:26

我找到了答案,这里。简单地说,没有直接的方法,我需要用C创建一个Win32 dll,其中将调用WINAPI并将其部署到\Windows文件夹。之后,我可以将它与RAPI.Invoke()一起使用。

另外,是指向包含实现的文章的链接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31831691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档