Показать полную графическую версию : [решено] Изменение заголовка окна программы
Добрый день!
Мне хотелось бы, чтобы можно было изменить заголовок главного окна запущенной программы.
То есть, чтобы вместо, например, "Калькулятор" у меня бы светилось "Супер-калькулятор".
Причем желательно, чтобы это можно было сделать из BAT-ника.
Например, батник, который сначала запускает мою программу, а потом меняет ей заголовок:
calc.exe
заменить_заголовок "Супер-калькулятор"
Подскажите возможно ли это сделать?
Существуют ли для этого какие-нибудь сервисные программы, утилиты?
LehaMechanic
15-10-2014, 20:26
AutoIt скорее всего сможет. Но это универсальный инструмент, а не однокнопочный, с ним разбираться надо.
Пример: Captain (http://www.donationcoder.com/Software/Skrommel/index.html#Captain) - рядом со скомпилированным исполняемым файлом есть ahk проект, правда от старой версии наверное.
с ним разбираться надо. »
Ничего особо сложного. В простых случаях:
calc.exe
заменить_заголовок "Супер-калькулятор"
достаточно простого же:
AutoItSetOption("MustDeclareVars", 1)
Run("calc.exe")
WinWait("Калькулятор")
WinSetTitle("Калькулятор", "", "Супер-калькулятор")
Exit(0)
На AutoHotKey:
Run, calc.exe
WinWait, Калькулятор
WinSetTitle, Калькулятор, , Супер-калькулятор
Более сложный вариант — с запуском приложения и смены заголовка именно этого приложения (скажем — нам нужны пять калькуляторов, у трёх из которых свой заголовок; пример, понятно, надуманный). Сам скрипт:
#include <MsgBoxConstants.au3>
AutoItSetOption("MustDeclareVars", 1)
If Not $CmdLine[0] = 2 Then
MsgBox($MB_OK + $MB_ICONINFORMATION, "Usage", "Usage: " & @CRLF & @CRLF & @ScriptName & " <File to execute> <New title>")
Exit(1)
EndIf
Local $sFile = $CmdLine[1]
Local $sNewTitle = $CmdLine[2]
If FileExists($sFile) Then
Local $lPID = Run($sFile)
If $lPID = 0 Then
MsgBox($MB_OK + $MB_ICONERROR, "Error", "Can't execute file [" & $sFile & "].")
Exit(2)
EndIf
Local $hWnd = 0
Local $aWinList
Local $i
Do
Sleep(100)
$aWinList = WinList()
For $i = 1 To $aWinList[0][0]
If $lPID = WinGetProcess($aWinList[$i][1]) Then
$hWnd = $aWinList[$i][1]
ExitLoop
EndIf
Next
Until $hWnd <> 0
WinSetTitle($hWnd, "", $sNewTitle)
Else
MsgBox($MB_OK + $MB_ICONERROR, "Error", "Can't find file [" & $sFile & "] for execute.")
EndIf
Exit(0)
и пример к этому скрипту для нашей надуманной ситуации с пятью калькуляторами:
calc.exe
calc.exe
Script.exe "c:\windows\system32\calc.exe" "Супер-калькулятор 1"
Script.exe "c:\windows\system32\calc.exe" "Супер-калькулятор 2"
Script.exe "c:\windows\system32\calc.exe" "Супер-калькулятор 3"
Более сложный вариант — с запуском приложения и смены заголовка именно этого приложения (скажем — нам нужны пять калькуляторов, у трёх из которых свой заголовок; пример, понятно, надуманный). »
То же самое на AutoHotKey:
IfNotEqual, 0, 2
{
MsgBox, 64, Usage, Usage: %A_ScriptName% <File to execute> <New title>
Exit, 1
}
IfNotExist, %1%
{
MsgBox, 16, Error, Can't find file [%1%] for execute
Exit, 2
}
Run, %1%, , UseErrorLevel, PID
IfEqual, ErrorLevel, ERROR
{
MsgBox, 16, Error, Can't execute file [%1%]
Exit, 3
}
WinWait, ahk_pid %PID%
WinSetTitle, , , %2%
(пример многим проще из-за внутренней поддержки AHK прямого доступа к окну по идентификатору процесса).
Спасибо, ребята за помощь.
У меня еще есть вопросы:
Более сложный вариант — с запуском приложения и смены заголовка именно этого приложения (скажем — нам нужны пять калькуляторов, у трёх из которых свой заголовок; пример, понятно, надуманный). »
Именно этот вариант мне и нужен: я запускаю несколько экземпляров одной и той же программы (около 10 экземпляров), и между ними очень неудобно переключаться, так как заголовки у всех одинаковые. Пока найдешь нужную программу - замучаешься.
Поэтому и возникла идея с назначением заголовков - для удобства переключения.
Более сложный вариант — с запуском приложения и смены заголовка именно этого приложения (скажем — нам нужны пять калькуляторов, у трёх из которых свой заголовок; пример, понятно, надуманный). Сам скрипт: »
а этот скрипт на чем написан?
Пример: Captain - рядом со скомпилированным исполняемым файлом есть ahk проект, правда от старой версии наверное. »
Пока попробовал этот вариант: программой Captain.
Работает хорошо, но есть один недостаток: периодически назначенные мной заголовки слетают.
То есть надо, чтобы периодически они обновлялись, причем программа должна помнить у какого окна какой заголовок, это можно сделать?
а этот скрипт на чем написан? »
На AutoIt.
А как быть все-таки со следующей проблемой:
Работает хорошо, но есть один недостаток: периодически назначенные мной заголовки слетают.
То есть надо, чтобы периодически они обновлялись, причем программа должна помнить у какого окна какой заголовок, это можно сделать? »
В общем периодически заголовки слетают.
Например, выключил компьютер в сон, снова включил - заголовки сбросились...
В общем периодически заголовки слетают »
Разобрался с программой KillOK.
В ней есть возможность замены заголовка окна.
В настройках указываются те заголовки, которые KillOK ищет, и новые заголовки, которые она устанавливает.
Причем она постоянно следит за окнами, и если заголовок у окна слетел (как у меня было в Captain), то KillOK снова заменит заголовок.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC