我有一个VB应用程序,它启动了一个第三方非GUI应用程序的多个示例。为了跟踪这些示例,我使用SetWindowText()
函数更新了它们的标题。然而,这个应用程序有一个不好的习惯,那就是不断更新标题,所以每个SetWindowText都只是暂时的。只要你点击屏幕上的任何地方,磁贴改回来了。我找到了一种通过PowerShell更新标题的方法,使用以下代码:
$titletext = "My Title"
# Start a thread job to change the window title to $titletext
$null = Start-ThreadJob { param( $rawUI, $windowTitle )
Start-Sleep -s 2
if ( $rawUI.WindowTitle -ne $windowTitle ) {
$rawUI.WindowTitle = $windowTitle
}
}-ArgumentList $host.ui.RawUI, $titletext
& 'c:\Program Files\Application\Application.exe' '-id=userid -pass=password'
这工作得很完美,标题的更改 * 是 * 永久的,所以正是我想要的。唯一的问题是 * 所有内容 * 都被记录在Windows PowerShell日志中,包括参数-id=和-pass=。一个解决方案是如果我可以通过我的VB应用程序启动applicationiderexe,并通过PowerShell脚本进行重命名,但我不知道是否可以通过ThreadJob来实现。是否可以启动一个ThreadJob并重命名另一个窗口,也许可以通过它的句柄?
1条答案
按热度按时间w8rqjzmb1#
SetWindowText()
API函数来设置 * 另一个进程的 * 控制台窗口标题,但无法保证此 * 更改始终有效 *,因为与此类窗口的任何后续 * 交互 * 都会导致恢复 * 原始 * 窗口标题(此行为似乎内置于conhost.exe
中,conhost.exe
是Windows上常规控制台窗口的基础控制台主机)。SetConsoleWindow()
WinAPI函数所做的事情(基于shell和API的机制,如cmd.exe
中的title
和PowerShell中的[Console]::Title
/$hostUI.RawUI.WindowTitle
,可能最终会调用)。例如,假设您的VB. NET应用程序在启动PowerShell脚本之前创建了包含密码的环境变量
MYPWD
: