PDA

Показать полную графическую версию : [решено] Изменение заголовка окна программы


ES
15-10-2014, 20:20
Добрый день!

Мне хотелось бы, чтобы можно было изменить заголовок главного окна запущенной программы.
То есть, чтобы вместо, например, "Калькулятор" у меня бы светилось "Супер-калькулятор".

Причем желательно, чтобы это можно было сделать из BAT-ника.
Например, батник, который сначала запускает мою программу, а потом меняет ей заголовок:

calc.exe
заменить_заголовок "Супер-калькулятор"

Подскажите возможно ли это сделать?
Существуют ли для этого какие-нибудь сервисные программы, утилиты?

LehaMechanic
15-10-2014, 20:26
AutoIt скорее всего сможет. Но это универсальный инструмент, а не однокнопочный, с ним разбираться надо.

Blast
15-10-2014, 20:40
Пример: Captain (http://www.donationcoder.com/Software/Skrommel/index.html#Captain) - рядом со скомпилированным исполняемым файлом есть ahk проект, правда от старой версии наверное.

Iska
15-10-2014, 22:31
с ним разбираться надо. »
Ничего особо сложного. В простых случаях:
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"

Iska
15-10-2014, 23:01
Более сложный вариант — с запуском приложения и смены заголовка именно этого приложения (скажем — нам нужны пять калькуляторов, у трёх из которых свой заголовок; пример, понятно, надуманный). »
То же самое на 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 прямого доступа к окну по идентификатору процесса).

ES
27-10-2014, 06:28
Спасибо, ребята за помощь.
У меня еще есть вопросы:

Более сложный вариант — с запуском приложения и смены заголовка именно этого приложения (скажем — нам нужны пять калькуляторов, у трёх из которых свой заголовок; пример, понятно, надуманный). »
Именно этот вариант мне и нужен: я запускаю несколько экземпляров одной и той же программы (около 10 экземпляров), и между ними очень неудобно переключаться, так как заголовки у всех одинаковые. Пока найдешь нужную программу - замучаешься.
Поэтому и возникла идея с назначением заголовков - для удобства переключения.

Более сложный вариант — с запуском приложения и смены заголовка именно этого приложения (скажем — нам нужны пять калькуляторов, у трёх из которых свой заголовок; пример, понятно, надуманный). Сам скрипт: »
а этот скрипт на чем написан?

Пример: Captain - рядом со скомпилированным исполняемым файлом есть ahk проект, правда от старой версии наверное. »
Пока попробовал этот вариант: программой Captain.
Работает хорошо, но есть один недостаток: периодически назначенные мной заголовки слетают.
То есть надо, чтобы периодически они обновлялись, причем программа должна помнить у какого окна какой заголовок, это можно сделать?

Iska
27-10-2014, 09:39
а этот скрипт на чем написан? »
На AutoIt.

ES
09-11-2014, 20:47
А как быть все-таки со следующей проблемой:

Работает хорошо, но есть один недостаток: периодически назначенные мной заголовки слетают.
То есть надо, чтобы периодически они обновлялись, причем программа должна помнить у какого окна какой заголовок, это можно сделать? »

В общем периодически заголовки слетают.
Например, выключил компьютер в сон, снова включил - заголовки сбросились...

ES
01-02-2015, 07:47
В общем периодически заголовки слетают »

Разобрался с программой KillOK.

В ней есть возможность замены заголовка окна.
В настройках указываются те заголовки, которые KillOK ищет, и новые заголовки, которые она устанавливает.
Причем она постоянно следит за окнами, и если заголовок у окна слетел (как у меня было в Captain), то KillOK снова заменит заголовок.




© OSzone.net 2001-2012