Что нового

[Окна, Диалоги] Скрыть программу на панели задач

damien2008

Осваивающий
Сообщения
178
Репутация
34
Всем привет.
Тема вроде не новая, тем не менее, есть вопросы.
Как скрыть иконку (не именно иконку, а весь "Button" с иконкой, который добавляется) на панели задач для запущенной программы?

Есть библиотека Sys_Tray UDF, но она хорошо работает только с треем (ну,там возле часов иконки висят :smile:), а надо именно: Advanced (Class): [CLASS:MSTaskListWClass; INSTANCE:1].

Вот есть грубый пример, но даже окно не находит... (особо не изменял)
Код:
#Include <GuiToolBar.au3>

HotKeySet("{ESC}", "_Quit")

Opt("WinTitleMatchMode", 2)
Global $hTray = WinGetHandle("[CLASS:Shell_TrayWnd]")
Global $hToolbar = ControlGetHandle($hTray, "", "[CLASSNN:MSTaskListWClass1]")
Global $iCnt = _GUICtrlToolbar_ButtonCount($hToolbar)
ConsoleWrite("Debug: $iCnt = " & $iCnt & @LF)
Global $iCmdVolume = -1
Global $sMsg, $sText, $iCmd
For $n = 0 To $iCnt - 1
    $sMsg = "Index: " & $n
    $iCmd = _GUICtrlToolbar_IndexToCommand($hToolbar, $n)
    $sMsg &= "  CommandID: " & $iCmd
    $sText = _GUICtrlToolbar_GetButtonText($hToolbar, $iCmd)
    If StringInStr($sText, "Resource Hacker") Then $iCmdVolume = $iCmd
    $sMsg &= "  Text: " & $sText
    ConsoleWrite("Debug: " & $sMsg & @LF)
Next
ConsoleWrite("Debug: $iCmdVolume = " & $iCmdVolume & @LF)

Global $bolVisible = True
While 1
    $bolVisible = Not $bolVisible
    If $bolVisible Then
        _GUICtrlToolbar_SetButtonState($hToolbar, $iCmdVolume, $TBSTATE_ENABLED)
    Else
        _GUICtrlToolbar_SetButtonState($hToolbar, $iCmdVolume, $TBSTATE_HIDDEN)
    EndIf
    Sleep(1000)
WEnd

Func _Quit()
    _GUICtrlToolbar_SetButtonState($hToolbar, $iCmdVolume, $TBSTATE_ENABLED)
    Exit
EndFunc


Система Win 7 x86
 
Автор
damien2008

damien2008

Осваивающий
Сообщения
178
Репутация
34
чужую "Resource Hacker" например.
(не именно иконку, а весь "Button" с иконкой, который добавляется) на панели задач для запущенной программы.

тут обсуждение было, получается, нельзя?
 
Автор
damien2008

damien2008

Осваивающий
Сообщения
178
Репутация
34
попробовал, даже стиль менял
Код:
_TargetStyle("set", 1, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_DLGMODALFRAME, $hwnd)

с помощью ANYGUIv2.8.

не работает.

UPD. нашет такой метод: ITaskbarList interface.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
Example()

Func Example()
    ; Declare the CLSID, IID and interface description for ITaskbarList.
    ; It is not necessary to describe the members of IUnknown.
    Local Const $sCLSID_TaskbarList = "{56FDF344-FD6D-11D0-958A-006097C9A090}"
    Local Const $sIID_ITaskbarList = "{56FDF342-FD6D-11D0-958A-006097C9A090}"
    Local Const $sTagITaskbarList = "HrInit hresult(); AddTab hresult(hwnd); DeleteTab hresult(hwnd); ActivateTab hresult(hwnd); SetActiveAlt hresult(hwnd);"

    ; Create the object.
    Local $oTaskbarList = ObjCreateInterface($sCLSID_TaskbarList, $sIID_ITaskbarList, $sTagITaskbarList)

    ; Initialize the iTaskbarList object.
    $oTaskbarList.HrInit()

    ; Run Notepad.
    Run("notepad.exe")

    ; Wait for the Notepad window to appear and get a handle to it.
    Local $hNotepad = WinWait("[CLASS:Notepad]")

    ; Tell the user what to look for.
    MsgBox($MB_SYSTEMMODAL, "", "Look in the Taskbar and you should see an entry for Notepad." & @CRLF & @CRLF & "Press OK to continue.")

    ; Delete the Notepad entry from the Taskbar.
    $oTaskbarList.DeleteTab($hNotepad)

    ; Tell the user to look again.
    MsgBox($MB_SYSTEMMODAL, "", "Look in the Taskbar.  There should no longer be a Notepad entry but Notepad is still running." & @CRLF & @CRLF & "Press OK to continue.")

    ; Close Notepad.
    WinClose($hNotepad)
EndFunc   ;==>Example
 
Автор
damien2008

damien2008

Осваивающий
Сообщения
178
Репутация
34
inververs
Блокнот скрывает, а Resource Hacker - нет. (
может с помощью ITaskBarList UDF как-то можно?
 
Автор
damien2008

damien2008

Осваивающий
Сообщения
178
Репутация
34
Resource Hacker:
Title:Resource Hacker
Class:TMainForm
и так и так не определяется...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
А зачем скрывать Resource Hacker? Он же умеет работать с командной строкой.
 
Автор
damien2008

damien2008

Осваивающий
Сообщения
178
Репутация
34
Yashied
Resource Hacker, это для примера, первое что попалось под руку.
например "AlReader2" скрывает.

Подозреваю, что если написано на Delphi, то не скрывается... :scratch:
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
damien2008
У меня на Win7 x86 кнопка Resource Hacker 4.2.4 скрывается нормально.
Код:
Const $sCLSID_TaskbarList = "{56FDF344-FD6D-11D0-958A-006097C9A090}"
Const $sIID_ITaskbarList = "{56FDF342-FD6D-11D0-958A-006097C9A090}"
Const $sTagITaskbarList = "HrInit hresult(); AddTab hresult(hwnd); DeleteTab hresult(hwnd); ActivateTab hresult(hwnd); SetActiveAlt hresult(hwnd);"
$oTaskbarList = ObjCreateInterface($sCLSID_TaskbarList, $sIID_ITaskbarList, $sTagITaskbarList)
$oTaskbarList.HrInit()
$hWnd = WinWait("Resource Hacker")
$oTaskbarList.DeleteTab($hWnd)
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
InnI сказал(а):
У меня на Win7 x86 кнопка Resource Hacker 4.2.4 скрывается нормально.
Windows 7, Resource Hacker 3.6.0.92

Кнопка не скрывается.
 
Автор
damien2008

damien2008

Осваивающий
Сообщения
178
Репутация
34
InnI :laugh:
Вот оно что: !!!!!!!!!!!!!!

RES Hacker v 3.4.079 скрывает нормально...

title:Программа на Delphi;class:TApplication

если программа написана на Delphi и класс окна TMainForm, то указываю класс окна TApplication и все работает, а если класс окна TForm1, то не работает :scratch:

что-то тут не так...

TMainForm это программа на С++ наверно?
ничего не понимаю посмотрел через PEid: проги написаны в "Borland Delphi 6.0 - 7.0" одни нормально скрываются, другие - нет...
RES Hacker v 3.4.079 -> Borland Delphi 3.0

UPD. нашел программу называется: Taskbar Hide. В ней класс окна: TApplication и совсем другие заголовки для некоторых программ. поправил. теперь скрывает, только надо предварительно проверить заголовок и класс окна.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
damien2008
У Delphi-программ есть "главное" окно с размерами 0:0 класса TApplication (почти, как у AutoIt :smile:). На ранних версиях Delphi кнопка в панели задач создавалась именно этим окном. В последних версиях, вероятно, это изменилось и кнопка принадлежит первой "форме", т.к. для версии RH 4.2.4 указание TApplication не скрывает кнопку, а вот указание TForm - работает.

Чтобы увидеть все окна процесса, используйте
Код:
_WinAPI_EnumProcessWindows()
 
Верх