我正在尝试自定义在Windows资源管理器中显示的图标以及我的Delphi应用程序的桌面快捷方式.
在Delphi 7 IDE中,我在"项目选项"对话框的"应用程序"选项卡中加载了所需的图标.它将我想要的图标显示为图形.
我认为没有必要,但我也将我的图标设置为TMainForm Icon属性.
但是,生成的EXE仍显示默认的D7图标.我错过了什么?
我正在调试一个Windows批处理命令文件.在路径或文件名中使用扩展(> 0x7f)字符时失败.问题似乎与将参数传递给从另一个CALLed的命令文件有关.
例如,此命令按预期工作:
xcopy "Pezuñero\1 - 001.wav" \temp
Run Code Online (Sandbox Code Playgroud)
这不是:
call another.cmd "Pezuñero"
Run Code Online (Sandbox Code Playgroud)
"another.cmd"的内容:
xcopy "%~1\1 - 001.wav" \temp
Run Code Online (Sandbox Code Playgroud)
%~1语法扩展参数并删除引号.这是必要的,因为在实际命令文件中,调用或被调用命令文件中的路径可能有空格.
第二个例子的结果(从CMD窗口复制)是这样的:
C:\>call another.cmd "Pezu±ero"
C:\>xcopy "Pezu±ero\1 - 001.wav" \temp
File not found - 1 - 001.wav
0 File(s) copied
Run Code Online (Sandbox Code Playgroud)
请注意,"ñ"(0xF1)字符已更改为"±"(0xB1).
任何人都可以解释发生了什么,以及如何解决这个问题?
我有一个用Delphi 7编写的监视应用程序,它运行在辅助监视器的一部分上.如果窗口最小化(例如,如果我在主监视器上使用"Windows-D"(查看桌面)命令,我想让它恢复到正常可见性)
我每隔几秒就试过一次计时器激活的代码:
if (Mainform.WindowState <> wsNormal ) then
Mainform.WindowState := wsNormal; {restore main window if minimized}
Run Code Online (Sandbox Code Playgroud)
它不起作用.为了调试它,我更改了代码,以便在程序运行时将Mainform.WindowState的值记录到文件中.即使主窗体的窗口最小化,该值仍然是wsNormal.为什么?
我有一个没有电子商务方面的简单信息网站。它有一个我想用 reCAPTCHA 保护的评论提交表单。
有没有办法在不将站点转换为 HTTPS(证书和托管成本增加)的情况下使用 reCAPTCHA?
在Delphi 7中,我有一个TMainForm.FormClose过程,用于在程序退出时写出一些状态.这在手动关闭程序时工作正常.但是,我发现如果程序被"强制"退出Windows(例如在需要重新启动的Windows Update之后),则不会调用FormClose过程.
编辑 - 我是新来的,看起来我无法删除自己的帖子.经过一番搜索,我找到了解决方案.
像许多人一样,我有电子表格从40多个文本文件中提取数据作为数据源.文本文件来自另一个应用程序,需要定期更新到Excel.
需要能够复制数据源文件和电子表格集并在不同系统上运行.这就是Excel无法支持从电子表格文件夹(或相对路径)导入数据的惊人无法成为一个大问题.这个问题提到了这个问题,但没有解决方案.
我在Excel中为这个(IMHO)基本缺陷开发了一个粗略的解决方法.使用SUBST将电子表格文件夹映射到驱动器号.然后从SUBST驱动器号中导入数据.该驱动器号和路径将成为电子表格的一部分,深埋在对话框中,并且非常不方便更新.因此,无论何时复制或移动电子表格,都要将SUBST重新创建到当前文件夹.丑陋但有效.
新问题:使用此技术,当我打开电子表格并单击"刷新"以从数据源刷新时,我必须在40多个对话框中单击"导入" - 每个文件对应一个.我该如何自动化该过程?
我需要将一个21位有符号整数(以三个7位字符提供)转换为32位有符号整数.我正在努力使下面的功能工作.如果我将outval定义为整数,我会在"outval:= outval或$ FFF00000"语句中检查范围.如果我将outval更改为长字,我会在"Val21bit:= outval"上进行范围检查.范围检查仅在值为负时发生.
除了关闭作业周围的范围检查之外,是否有任何"正确"的方法来完成这项工作?
function Val21bit(sx:string):integer; {Input of 3 character string, Vh, Vm, Vl}
var
outval : longword; // define as Longword to allow or-ing in high bit
{ valueH : 0scccccc
valueM : 0bbbbbbb
valueL : 0aaaaaaa
int : ssssssss sssscccc ccbbbbbb baaaaaaa }
begin
outval := byte(sx[1]); // 00000000 00000000 00000000 0scccccc highest order first
outval := (outval shl 7) or ($7F and byte(sx[2])); // 00000000 00000000 00sccccc cbbbbbbb
outval := (outval shl 7) or ($7F and …
Run Code Online (Sandbox Code Playgroud) 这个问题显示了一个 Powershell 脚本来生成一个打开的文件资源管理器窗口及其路径的列表。我的目标是捕获当前打开的一组资源管理器窗口,并使用以下命令写出一个 CMD 文件:C:\WINDOWS\explorer.exe /e, "C:\open\this\folder"
所以我想以普通路径表示法获得完整路径和文件夹名称。这是在资源管理器 Windows 的标题栏中显示的内容:“C:\open\this\Favorite folder”
建议的代码是:
function Get-WindowTitle($handle) {
Get-Process |
Where-Object { $_.MainWindowHandle -eq $handle } |
Select-Object -Expand MainWindowTitle
}
$app = New-Object -COM 'Shell.Application'
$app.Windows() |
Select-Object LocationURL, @{n='Title';e={Get-WindowTitle $_.HWND}}
Run Code Online (Sandbox Code Playgroud)
如上所示,LocationURL 以转义 URL 样式提供完整路径:
file:///C:/open/this/Favorite%20%folder"
Run Code Online (Sandbox Code Playgroud)
@{n='Title';e={Get-WindowTitle $_.HWND}} 组件生成一个列“Title”,该列被截断为 5 个字符:
C:\...
Run Code Online (Sandbox Code Playgroud)
一个资源管理器窗口的完整输出如下所示:
LocationURL Title
----------- -----
file:///C:/open/this/Favorite%20%folder C:...
Run Code Online (Sandbox Code Playgroud)
我发现我可以通过用许多空格填充字符串 'Title' 来避免截断。该字符串的宽度似乎决定了输出的最大宽度。尽管如此,我观察到只有大约 60% 的打开的资源管理器窗口列出了路径。其余的只是一个空行。
我尝试了“$app.Windows() | Select-Object LocationName”,但输出仅包含资源管理器文件夹名称,而不包含资源管理器标题中显示的完整路径和文件夹。
另一个谜团是为什么脚本运行如此缓慢。如果我打开了 10 个资源管理器窗口,脚本将运行 30 秒,每条路径大约需要 3 秒。
对于这个脚本:
function Get-WindowTitle($handle) {
Get-Process | …
Run Code Online (Sandbox Code Playgroud) 我偶尔会在 Windows 和 Linux 上担任 Perl 开发人员。当 Perl 是合适的工具时,我每年都会编写或修改几次 Perl 脚本。偶尔使用,我从来没有成为一个真正的 Perl 专家,但我在这个论坛中得到的巨大帮助下取得了成功。
每当我构建或升级机器时,我都会获得最新的 Perl 版本。在 2020 年,我注意到 Activestate 在下载之前强制使用帐户登录。我就是这么做的,当时并没有想太多。后来我需要添加一些模块,发现PPM已被弃用并删除。
这似乎是一件大事——比如安装最新的 Ubuntu 并发现 apt-get 已被淘汰。我的理解是 Perl 用户应该回到 Activestate 并让他们构建一个捆绑所需模块的自定义安装程序,然后在每次更改时重新安装 Perl。这似乎是倒退了一步。这是朝着控制用户群并最终将免费的 Perl 变成“物美价廉的 Perl”迈出的一步吗?
Perl 社区对此有何看法,您有什么建议?我是否误解了状态工具及其工作原理?您是坚持使用 ActiveState、转向 Strawberry Perl 还是其他什么?
我正在尝试枚举COM端口的"友好名称".随着USB串行设备在运行时连接和断开,端口可能会动态变化.
基于此问题中描述的可能方法,我尝试使用SetupDiGetClassDevs方法.
我找到了这个示例代码,但它是为旧版本的setupapi单元编写的(homepages.borland.com的原始链接当然不起作用).
我尝试使用当前JVCL(JVCL340CompleteJCL221-Build3845)中的setupapi单元,但它似乎与Delphi 7不兼容.我收到编译器错误:
if SetupDiGetDeviceRegistryProperty(DevInfoHandle,DeviceInfoData,
RegProperty,
@PropertyRegDataType,
@S1[1],RequiredSize,@RequiredSize) then begin
Run Code Online (Sandbox Code Playgroud)
在函数SetupDiGetDeviceRegistryProperty的调用中,我在参数@PropertyRegDataType和@RequiredSize上得到错误"实际和形式参数的类型必须相同" .
Delphi3000站点说该代码是在2004年编写的,适用于Delphi 7,所以我不知道为什么它现在不适用于Delphi 7,除非setupapi已经改变.是否有人熟悉setupapi可能导致这些问题的更改?
我正在测试一个简单的控制台程序.uses语句是"windows,sysutils,classes,setupAPI,Registry;"
主要计划是:
begin
ComPortStringList := SetupEnumAvailableComPorts;
for Index := 0 to ComPortStringList.Count - 1 do
writeln(ComPortStringList[Index]);
end;
end.
Run Code Online (Sandbox Code Playgroud) delphi ×6
delphi-7 ×3
windows ×3
activestate ×1
batch-file ×1
enumerate ×1
excel ×1
explorer ×1
file ×1
forms ×1
icons ×1
perl ×1
powershell ×1
recaptcha ×1
serial-port ×1