Qt реализует две функции, вы можете узнать из них:
static inline bool qFuzzyCompare(double p1, double p2)
{
return (qAbs(p1 - p2) <= 0.000000000001 * qMin(qAbs(p1), qAbs(p2)));
}
static inline bool qFuzzyCompare(float p1, float p2)
{
return (qAbs(p1 - p2) <= 0.00001f * qMin(qAbs(p1), qAbs(p2)));
}
И вам могут понадобятся следующие функции, поскольку
Обратите внимание, что сравнение значений, где p1 или p2 равно 0.0, не будет работать, а также не сравнивает значения, где одно из значений - NaN или бесконечность. Если одно из значений всегда 0.0, вместо этого используйте qFuzzyIsNull. Если одно из значений, вероятно, будет равным 0.0, одно решение должно добавить 1.0 к обоим значениям.
blockquote>static inline bool qFuzzyIsNull(double d) { return qAbs(d) <= 0.000000000001; } static inline bool qFuzzyIsNull(float f) { return qAbs(f) <= 0.00001f; }
Copy-Item $sourcepath $destination ## Get the lnk we want to use as a template
$shell = New-Object -COM WScript.Shell
$shortcut = $shell.CreateShortcut($destination) ## Open the lnk
$shortcut.TargetPath = "C:\path\to\new\exe.exe" ## Make changes
$shortcut.Description = "Our new link" ## This is the "Comment" field
$shortcut.Save() ## Save
Нашел версию кода VB здесь: http://www.tutorialized.com/view/tutorial/Extract-the-target-file-from-a-shortcut-file-.lnk / 18349
Я не думаю, что есть родной путь.
Этот DOS используется: Shortcut.exe .
Вам все равно нужно скопировать использовать в удаленной системе, а затем, возможно, вызвать его с помощью WMI, чтобы внести изменения, которые вы ищете.
Я думаю, что проще будет перезаписать и / или создать новый файл.
У вас есть доступ к этим системам через удаленный доступ?
Ниже приведены функции, которые я использую для работы с .lnk-файлами. Они являются модифицированными версиями функций, найденных здесь здесь , как упомянуто @Nathan Hartley. Я улучшил Get-Shortcut
, чтобы обрабатывать подстановочные знаки, такие как *
, передавая строки dir
, чтобы развернуть их в множества объектов FileInfo.
function Get-Shortcut {
param(
$path = $null
)
$obj = New-Object -ComObject WScript.Shell
if ($path -eq $null) {
$pathUser = [System.Environment]::GetFolderPath('StartMenu')
$pathCommon = $obj.SpecialFolders.Item('AllUsersStartMenu')
$path = dir $pathUser, $pathCommon -Filter *.lnk -Recurse
}
if ($path -is [string]) {
$path = dir $path -Filter *.lnk
}
$path | ForEach-Object {
if ($_ -is [string]) {
$_ = dir $_ -Filter *.lnk
}
if ($_) {
$link = $obj.CreateShortcut($_.FullName)
$info = @{}
$info.Hotkey = $link.Hotkey
$info.TargetPath = $link.TargetPath
$info.LinkPath = $link.FullName
$info.Arguments = $link.Arguments
$info.Target = try {Split-Path $info.TargetPath -Leaf } catch { 'n/a'}
$info.Link = try { Split-Path $info.LinkPath -Leaf } catch { 'n/a'}
$info.WindowStyle = $link.WindowStyle
$info.IconLocation = $link.IconLocation
New-Object PSObject -Property $info
}
}
}
function Set-Shortcut {
param(
[Parameter(ValueFromPipelineByPropertyName=$true)]
$LinkPath,
$Hotkey,
$IconLocation,
$Arguments,
$TargetPath
)
begin {
$shell = New-Object -ComObject WScript.Shell
}
process {
$link = $shell.CreateShortcut($LinkPath)
$PSCmdlet.MyInvocation.BoundParameters.GetEnumerator() |
Where-Object { $_.key -ne 'LinkPath' } |
ForEach-Object { $link.$($_.key) = $_.value }
$link.Save()
}
}