Articles of delphi

使用Delphi 2007从虚拟文件夹加载文件

我试图从一个Windows虚拟文件夹(例如,相机或iPhone图片文件夹)加载文件的内容。 下面是我用来玩这个的一些示例代码: procedure TfrmForm.ButtonClick(Sender: TObject); Var Dialog: TAttachDialog; Enum: IEnumShellItems; Name: LPWSTR; Item: IShellItem; Strm: IStream; OStrm: TOLEStream; FStrm: TFileStream; Result: HRESULT; Buf: Array[0..99] Of Char; Read: LongInt; begin Result := CoInitializeEx(Nil, COINIT_APARTMENTTHREADED Or COINIT_DISABLE_OLE1DDE); If Succeeded(Result) Then Begin Dialog := TAttachDialog.Create(Self); Try Dialog.Options := [fdoAllowMultiSelect, fdoPathMustExist, fdoFileMustExist]; Dialog.Title := 'Select Attachments'; If Dialog.Execute(Self.Handle) Then […]

什么是导致桌面盾牌图标覆盖* SOME *桌面上

我有一个C ++ Builder / Delphi应用程序。 它具有以下清单作为资源embedded: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" processorArchitecture="*" version="1.0.0.0" name="Manufacturer.Division.MyName" /> <description>MyName</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" /> <!– Win Vista and Win Serv […]

从Delphi直接调用Android NDK函数的困难

可以通过JNI和NDK从Delphi调用Android C函数。 为了实现这一点,相当多的工作,并build议直接调用NDK函数。 为此,我创build了一个小的示例文件来声明一个外部的C函数,这些函数是我在Delphi源代码中find的。 在<path to delphi>\source\rtl\android更具体。 我创build了一个非常小的testing程序来testing直接从Delphi调用C函数的function。 所有源代码,你会发现下面,这是我目前正在testing。 unit DLL_external; interface const MIDI_Lib = '/usr/lib/libmiditest.so'; test_fun = 'test_1'; function test_1 (n: Integer): Integer; cdecl; external MIDI_Lib name test_fun; implementation initialization finalization end. 初始化和终结是必要的,因为链接错误是指一些缺less的初始化和终止代码。 调用类: unit DLL_Test_Main; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, DLL_external; //{$I Androidapi.inc} type TForm1 […]

如何使用dbghlp和pdb获取结构体的字段名称和偏移量

我想用与windbg的dt命令相同的方式来转储结构的字段和偏移量。 比方说,我想转储微软公共符号中的_PEB结构(因为windbg的DT命令起作用)。 从MSDN文档中,我了解到,SymFromName函数应该能够做到这一点,下面是我已经尝试失败SymFromName与LastError 126(无法find指定的模块)的代码。 从注册的callback我得到以下输出: CBA_SET_OPTIONS CBA_SET_OPTIONS CBA_SET_OPTIONS CBA_EVENT: code 0 desc DBGHELP: Symbol Search Path: symsrv*symsrv.dll*C:\Symbols*http://msdl.microsoft.com/download/symbols DBGHELP: Symbol Search Path: symsrv*symsrv.dll*C:\Symbols*http://msdl.microsoft.com/download/symbols CBA_DEFERRED_SYMBOL_LOAD_START: C:\Windows\Sysnative\ntdll.dll CBA_DEFERRED_SYMBOL_LOAD_PARTIAL: C:\Windows\Sysnative\ntdll.dll CBA_EVENT: code 0 desc DBGHELP: No header for C:\Windows\Sysnative\ntdll.dll. Searching for image on disk DBGHELP: No header for C:\Windows\Sysnative\ntdll.dll. Searching for image on disk CBA_EVENT: code 0 desc DBGHELP: […]

TRichEdit和URL突出显示问题

我正在使用当前代码来突出显示TRichEdit上的URL: procedure TForm1.WndProc(var Message: TMessage); var p: TENLink; strURL: string; begin if (Message.Msg = WM_NOTIFY) then begin if (PNMHDR(Message.lParam).code = EN_LINK) then begin p := TENLink(Pointer(TWMNotify(Message).NMHdr)^); if (p.Msg = WM_LBUTTONDOWN) then begin SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, Longint(@(p.chrg))); strURL := RichEdit1.SelText; ShellExecute(Handle, 'open', PChar(strURL), 0, 0, SW_SHOWNORMAL); end end; end; inherited; end; procedure TForm1.InitRichEditURLDetection; var mask: Word; […]

如何获得USB闪存驱动器的制造商序列号?

如何在Delphi中检索USB闪存驱动器的制造商序列号? 我试过这个: function GetDiskVolSerialID(ADriveName: Char): Cardinal; var DiskDrive: string; FileSystemFlags: DWORD; VolumeSerialNumber: DWORD; MaximumComponentLength: DWORD; begin DiskDrive := ADriveName + ':\'; GetVolumeInformation(PChar(DiskDrive), nil, 0, @VolumeSerialNumber, MaximumComponentLength, FileSystemFlags, nil, 0); Result := VolumeSerialNumber; end; 但它不会返回正确的结果!

一个独立的Delphi应用程序,也可以作为Windows服务安装

在Delphi中,您可以创build一个独立的Windows VCL Forms应用程序。 您也可以创build一个Windows服务应用程序。 是否可以将这两个应用程序合并为一个独立的应用程序,也可以作为Windows服务来安装?

检查特定进程运行的快速方法

要检查进程是否正在运行,可以使用“CreateToolHelp32SnapShot”Windows API函数并枚举正在运行的进程。 示例C / C ++代码在答案问题中给出: 检查是否有一个特定的进程正在C ++的窗口上运行 我的问题是,如果你知道你正在寻找一个特定的过程,是否有更快的方法来find答案,而不必依次检查每个过程? 我们需要定期检查我们的远程支持工具TeamViewer.exe是否正在运行。 请注意,TeamViewer是由第三方编写的,我们无法控制它或者EXE的内部知识。 编辑: TeamViewer提供了一些有关其内部过程的信息,可以用来加速这个过程(参见接受的答案)。 答案还显示了如何加速对任何进程的检查(通过保存进程ID)。

如何检测表单何时被最大化?

我想要检测何时将最大化表单来保存某些设置(与大小和位置无关)并修改大小和位置。 有一个通用的方法来做到这一点? 我试图捕捉像这篇文章中的WM_SYSCOMMAND消息。 它可以很好地用于从菜单最大化,通过最大化button,但是当我按下WIN + UP键时,它不会被触发。 有没有人知道如何捕捉最大化事件包括WIN + UP键盘的情况下的普遍方式? 谢谢

什么外部事件触发TCustomForm.RecreateWnd?

一个特定的VCL应用程序崩溃,很less,显然是自发的,我强烈怀疑这是因为主窗体的窗口句柄正在重新响应来自操作系统的一些外部触发器。 我确实知道, 如果主窗体的窗口句柄改变了,那么肯定会出现麻烦(因为后台线程将消息发送到这个句柄)。 但是我想知道如何重现这个bug,然后才开始修改代码,以便修复它,如果只是这样,我可以确认这是崩溃的可能原因,症状符合那些报告,并且代码修改确实解决了这个问题。 (另外,如果操作系统没有办法触发TCustomForm.RecreateWnd的调用,我需要find一些其他的崩溃解释。是的,我可以将CM_RECREATEWND发布到主窗体,但这只是个问题。 (我知道将消息从后台线程发布到VCL线程的正确方法是使用AllocateHWnd纯粹为此目的创build一个隐藏的消息窗口 – 这是我build议的修复。) 我看到了TCustomListView的后代类似的错误,其中TCustomListView是通过将桌面样式从Windows XP更改为Windows Classic来触发的。 但我还没能find这样的方法来触发TCustomForm上的TCustomForm 。 (我花了相当多的时间阅读VCL代码,我一定会错过一些东西。) 概要: 在操作系统的刺激下,VCL最终在TCustomForm上调用TCustomForm ? (如果这有什么不同,我对Windows 7特别感兴趣。) 如果有这样的操作系统的刺激,我可以certificate是否导致观察到的症状。 如果确切地说不是那么我可以certificate窗口娱乐不是原因。