小编tru*_*ger的帖子

如何通过Innosetup删除桌面快捷方式

如何通过Innosetup删除桌面快捷方式?它是由以前的版本创建的,不再需要了.我尝试在[InstallDelete]中删除它

[InstallDelete]
Type: files; Name: {userdesktop}\Shortcut Name
Run Code Online (Sandbox Code Playgroud)

并删除CurStepChanged事件处理程序的"ssInstall"中的文件

DeleteFile(ExpandConstant('{userdesktop}\Shortcut Name'));
Run Code Online (Sandbox Code Playgroud)

但它们不起作用.任何建议表示赞赏!

inno-setup desktop-shortcut

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

如何使用Synapse建立安全连接?

我正在测试Synapse并想知道如何建立安全连接.我注意到它支持SSL,但我不确定它是否适合我的需求.我没有CA的证书.我只想加密我的服务器程序和客户端程序之间的所有数据.当然,我可以在发送之前自己加密数据.但是如果SSL可以加密数据,也许我可以使用它.据我所知,SSL用于"加密"和"身份验证".我需要的只是"加密".Synapse有可能吗?

更新:

感谢daemon_x和Synapse的作者Lukas Gebauer的帮助,我想我终于让它发挥了作用.这是我做的:

服务器端:

1)在你的单元中使用ssl_openssl并将'libeay32.dll'和'ssleay32.dll'放到exe文件的同一目录中

2)接受连接后,为新创建的套接字添加以下代码行.

fclient.SSLAcceptConnection;
Run Code Online (Sandbox Code Playgroud)

客户方:

1)在你的单元中使用ssl_openssl并将'libeay32.dll'和'ssleay32.dll'放到exe文件的同一目录中

2)连接到服务器后,添加以下行.

fclient.SSLDoConnect;
Run Code Online (Sandbox Code Playgroud)

如果没有发生错误,则连接现在是安全的.但是当您运行代码时,如Synapse文档中所述,您可能会注意到SSLAcceptConnection需要一些时间才能返回.因此,如果您想加快速度,最好先预先创建证书文件和私钥文件.并在SSLAcceptConnection之前添加以下代码

  fclient.SSL.CertificateFile := 'bs-cert';
  fclient.SSL.PrivateKeyFile := 'bs-privatekey';
Run Code Online (Sandbox Code Playgroud)

如果您没有证书和私钥,请参阅ssl_openssl中的"CreateSelfSignedCert"以获取自签名证书和私钥.您可以通过WriteStrToStream将FCertificate和FPrivatekey保存到文件中,稍后再使用它们.

delphi ssl apache-synapse public-key-encryption

9
推荐指数
1
解决办法
5898
查看次数

如何在Windows服务中启动GUI程序?

当我以LocalSystem帐户运行服务时,我可以使用以下代码在当前登录帐户下启动GUI程序:

WTSGetActiveConsoleSessionId-> WTSQueryUserToken-> CreateProcessAsUser

但是,当我将该服务作为我的个人帐户运行时,GUI程序将不会显示.我可以在任务管理器中看到它.

当我的个人帐户下运行服务时,我该怎么做才能启动GUI程序?

windows-services createprocess

8
推荐指数
1
解决办法
7169
查看次数

如何迭代TDictionary并删除项目?

我有一个TDictionary并添加一些项目:

for index := 0 to 10 do
   dict.Add(IntToStr(index), index);
Run Code Online (Sandbox Code Playgroud)

现在,我需要迭代容器并删除我想要的项目:

pairEnum := dict.GetEnumerator;
while pairEnum.MoveNext do
begin
  if pairEnum.Current.Value mod 2 = 0 then
     dict.Remove(pairEunm.Current.Key);
end;
Run Code Online (Sandbox Code Playgroud)

我希望我现在只有字典中的奇数.但我实际得到的是:

key=1 value=1
key=3 value=3
key=5 value=5
key=7 value=7
key=9 value=9
key=8 value=8 <-
Run Code Online (Sandbox Code Playgroud)

为什么"8"没有从字典中删除?

如果我添加更多项目.例如

for index := 0 to 12 do
   dict.Add(IntToStr(index), index);
Run Code Online (Sandbox Code Playgroud)

然后,结果是正确的.这是为什么?如何正确迭代TDictionary并删除项?谢谢.

delphi-xe2

7
推荐指数
1
解决办法
2975
查看次数

如何在剪贴板上放置多种格式?

例如,当我按"Ctrl + C"时,Wordpad会做什么?它为剪贴板放置了许多不同的格式.因此,记事本可以获取没有任何颜色或字体等的文本,并且当您粘贴到另一个Wordpad窗口时,您仍然可以保留原始格式.

MSDN说我应该多次调用SetClipboardData.但它根本不起作用.

c++ windows delphi clipboard

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

无法在没有密码的帐户下运行服务?

如果服务的"登录"帐户有密码,我可以正确启动服务.但当我删除用户密码并再试一次时,我收到错误: "错误1069:由于登录失败,服务未启动"

服务无法在密码为空的帐户下运行?

winapi windows-services

5
推荐指数
1
解决办法
6682
查看次数

在SQLite中组合两个表

我有两张桌子,ta和tb:

TA:

key col1  
--------
k1 a 
k2 c 
Run Code Online (Sandbox Code Playgroud)

TB:

key col2  
-------
k2 cc 
k3 ee 
Run Code Online (Sandbox Code Playgroud)

他们用"钥匙"连接起来.我想知道如何获得一个表,tc,如:

key col1 col2  
-------------
k1 a  
k2 c cc 
k3  ee
Run Code Online (Sandbox Code Playgroud)

是否有简单的方法而不是插入每条记录?它们是一百万张表的记录,所以我需要一种有效的方法.

sqlite join

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

如何让 TVirtualStringTree 在禁用状态下显示图标?

我需要将目录中的文件显示到 TVirtualStringTree。所以,我使用 SHGetFileInfo 来获取文件的图标。但似乎我只能获得“正常”图标(以下屏幕截图的左侧)。如果是这样,TVirtualStringTree 可以将图标绘制为“禁用”吗?就像您禁用了 a 节点一样。请看屏幕截图:

在此处输入图片说明

更新

Soft Gems 论坛中有一个类似的帖子。我可以获得图标的矩形,然后自己绘制图标。我正在使用 TcxImageList,它可以轻松绘制“禁用”图标。我首先在 GetImageIndex 事件中分配了一个不存在的图像索引,所以我有一个空间来绘制图标。然后使用以下代码进行绘制。

procedure TfrmMain.tvSharesAfterItemPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect); 
var 
  rImage: TRect; 
  OffsetLeft: Integer; 
begin 
    rImage  := ItemRect; 

    with TVirtualStringTree(Sender) do begin 
      if (toShowRoot in TreeOptions.PaintOptions) then 
        OffsetLeft := Indent * (GetNodeLevel(Node) + 1) 
      else 
        OffsetLeft := Indent * GetNodeLevel(Node); 

      Inc(rImage.Left, Margin + OffsetLeft); 
      Inc(rImage.Top, (NodeHeight[Node] - Images.Height) div 2); 
      rImage.Right  := rImage.Left + Images.Width; 
      rImage.Bottom := rImage.Top + Images.Height; 
    end; 

    // draw the …
Run Code Online (Sandbox Code Playgroud)

delphi virtualtreeview tvirtualstringtree

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

是否有可能获得指针在Delphi 7中指向的类型的大小?

我希望在以下函数中获得任何"记录"类型的大小.但似乎它不起作用:

function GetDataSize(P : Pointer) : Integer;
begin
  Result := SizeOf(P^); // **How to write the code?**
end;
Run Code Online (Sandbox Code Playgroud)

例如,后续记录的大小为8个字节

SampleRecord = record
 Age1 : Integer;
 Age2 : Integer;
end;
Run Code Online (Sandbox Code Playgroud)

GetDataSize(@a)总是返回1(当然,a是SampleRecord类型的变量).我该怎么办?

我注意到Delphi有一个程序过程New(var P:Pointer),可以分配内存块对应P指向的类型的大小.怎么能达到这个尺寸?

delphi memory-management delphi-7

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