小编Cod*_*deX的帖子

Windows应用商店应用与本机桌面应用之间的通信

!为简化起见,我将Windows应用程序(也称为Metro或Modern UI)称为"app",将常用桌面应用程序称为"应用程序"!

我相信对于已经在市场上建立应用程序的开发人员来说,这仍然是关于应用程序开发最不明确但最重要的问题之一:如何在Windows 8系统上管理应用程序和应用程序之间的通信?(请不要就原则开始辩论 - 真的需要这么多用例!)

在过去的几天里,我基本上阅读了文章的内容,但仍然不清楚如何从第一次开始就这样做.主要是因为我发现了几个相互矛盾的信息.我的问题在这里,我想从最终的Windows 8可能性的角度重新解决这个问题.

鉴于情况:

  • 应用和应用程序在同一系统上运行
  • 1:1沟通
  • 应用程序是本机的(用Delphi编写)
  • 管理员或必要时甚至系统权限可用于应用程序
  • 在90%的用例中,应用程序请求应用程序执行操作并接收一些文本结果.该应用程序不应该被留下或冻结!
  • 在10%中,应用程序执行操作(由某个事件触发)并通知应用程序 - 结果可能是:在磁贴或已经运行且活动的应用程序中显示某些信息,或者如果可能,运行应用程序/将其带到前台.

现在"简单"的问题是,如何实现这一目标?

  • 现在实际允许本地Web服务器访问吗?(我相信它不是很长一段时间,但现在是最终版本)
  • WCF?( - >显然MS不再推荐了)
  • 本地REST/SOAP服务器上的HTTP请求?
  • WinRT联合API?(使用RSS/atom响应的另一种web服务访问形式)
  • WebSockets(如MessageWebSocket)?
  • 其他形式的TCP/IP通信?
  • 共享输入和输出的文本文件(实际上只是想到这种伤害,但至少MS可能无法阻止......)
  • 命名管道是不允许的,对吧?

关于这个主题有一些关于SO的讨论,但是大多数都不是最新的,因为MS在发布Windows 8的最终版本之前发生了很大的变化.而不是混合新的和新的信息我想要为我和所有其他Windows应用程序和应用程序开发人员找到这个问题的明确和当前的答案.谢谢!

windows communication microsoft-metro windows-runtime

21
推荐指数
1
解决办法
3818
查看次数

从TSpeedButton中删除闪烁

重现步骤:

  1. 添加TPanel到新的VCL表单并进行设置Align = alClient.
  2. 添加TSpeedButton到面板并将一些bmp图像分配给Glyph属性.(可选但使得它更清晰:Flat = True)
  3. 运行应用程序,抓住表单的右下角并移动它.TSpeedButton将闪烁的图像.

我阅读了很多关于消除闪烁的内容,但这些建议似乎都不适用于TSpeedButton:

  • 没有DoubleBuffered财产
  • WS_EX_COMPOSITED不能设置,因为它不是一个TWinControl而是一个TGraphicControl
  • WM_ERASEBKGND 消息未收到

如果它有任何重要性,我实际上正在使用TPngSpeedButton,但由于实际问题在于TSpeedButton,我在示例中使用它.

这有什么解决方案吗?

编辑:由于某种原因,到目前为止没有人能够重现这一点,所以为了确保它不是我的描述,这里是dfm:

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 337
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False …
Run Code Online (Sandbox Code Playgroud)

delphi

6
推荐指数
1
解决办法
370
查看次数

注册NLM事件(INetworkListManager,Advise,Sink等)

在我的Delphi应用程序中,我想使用Microsoft Windows网络列表管理器API(NLM)了解网络更改:http://msdn.microsoft.com/library/ee264321

我查看了链接的"如何注册NLM事件"示例并将其翻译为Delphi.但是,我不知道如何继续这样做.

var
    pNLM: INetworkListManager;
    pCpc: IConnectionPointContainer;
    pConnectionPoint: IConnectionPoint;
    pSink: IUnknown;
    dwCookie: LongInt;
const
    IID_IConnectionPointContainer: TGUID = '{B196B284-BAB4-101A-B69C-00AA00341D07}';
    IID_IUnknown: TGUID = '{00000000-0000-0000-C000-000000000046}';
begin
    if Succeeded(CoCreateInstance(CLASS_NetworkListManager, nil, CLSCTX_ALL, IID_INetworkListManager, pNLM)) then
    begin
        if Succeeded(pNLM.QueryInterface(IID_IConnectionPointContainer, pCpc)) then
        begin
            if Succeeded(pCpc.FindConnectionPoint(IID_INetworkEvents, pConnectionPoint)) then
            begin
                if Succeeded(pCpc.QueryInterface(IID_IUnknown, pSink)) then
                begin
                    pConnectionPoint.Advise(pSink, dwCookie);
                end;
            end;
        end;
    end;
end;
Run Code Online (Sandbox Code Playgroud)

文章sais:

"您已创建的INetworkListManager对象后以上你会从该点向前接收INetworkEvents通知.pSink实现INetworkEvent接口包括那些事件处理方法,例如NetworkAdded,NetworkDeleted,NetworkConnectivityChanged,和NetworkPropertyChanged".

不幸的是我不知道该怎么做.没有进一步的说明,所以我希望这里有人可以指导我/提供一个示例,为这些事件调用自定义程序.谢谢.

delphi winapi nlm

2
推荐指数
1
解决办法
1200
查看次数