Astel064
Помог мой пост, ставь +!
- Сообщения
- 276
- Репутация
- 51
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
$frmMain = GUICreate("Form1", 364, 164, 192, 114)
$btn = GUICtrlCreateButton("Button1", 104, 48, 75, 25)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $btn
local $res = _WinAPI_GetModuleHandle(0)
if $res Then
$res = _WinAPI_LoadImage($res,99,$IMAGE_ICON,0,0,$LR_DEFAULTSIZE) ; 99 - ординал иконки в exe
if $res then
_WinAPI_PostMessage(WinGetHandle("Калькулятор"),$WM_SETICON,1,$res)
EndIf
EndIf
EndSwitch
WEnd
#include <WinAPIEX.au3>
#include <GUIConstantsEx.au3>
Global $hCalc, $hIcon, $hIconCopy, $aInfo, $tSize, $iW, $iH
$hCalc = WinGetHandle('[Class:CalcFrame]')
If Not $hCalc Then
Run('calc.exe')
$hCalc = WinWait('[Class:CalcFrame]', '', 3)
EndIf
If Not $hCalc Then Exit 1
$hIcon = _WinAPI_GetClassLongEx($hCalc, -14);$GCL_HICON = -14
If Not $hIcon Then Exit 2
$hIconCopy = _WinAPI_CopyIcon($hIcon)
_WinAPI_DestroyIcon($hIcon)
If Not $hIconCopy Then Exit 3
$aInfo = _WinAPI_GetIconInfo($hIconCopy)
If @error Then Exit 4
$tSize = _WinAPI_GetBitmapDimension($aInfo[5])
$iW = DllStructGetData($tSize, 1)
$iH = DllStructGetData($tSize, 2)
If Not $iW Then $iW = 32
If Not $iH Then $iH = 32
For $i = 4 To 5
_WinAPI_DeleteObject($aInfo[$i])
Next
$aInfo = 0
$tSize = 0
GUICreate('Test', $iW * 5, $iH * 3)
GUICtrlCreateIcon('', 0, $iW * 2, $iH, $iW, $iH)
GUICtrlSendMsg(-1, 0x0172, 1, $hIconCopy);$STM_SETIMAGE = 0x0172
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
_WinAPI_DestroyIcon($hIconCopy)
Смотрите пример к функции _WinAPI_GetIconInfoEx().возможно-ли получить путь и индекс используемой иконки
С дескриптором иконки файла, а не окнаАбсолютно так же, ведь по сути вы работаете всего лишь с дескриптором иконки, который уникален.
Посмотрел, ничего нужного не нашел в примереСмотрите пример к функции _WinAPI_GetIconInfoEx().
#include <WinAPIEX.au3>
;#include <apiconstants.au3>
#include <GUIConstantsEx.au3>
Global $hWnd, $hIcon, $hIconCopy, $aInfo, $tSize, $iW, $iH
$hWnd = WinGetHandle('[TITLE:Form1]')
If Not $hWnd Then Exit 1
$hIcon = _WinAPI_GetClassLongEx($hWnd, -14);$GCL_HICON = -14
If Not $hIcon Then Exit 2
$hIconCopy = _WinAPI_CopyIcon($hIcon)
_WinAPI_DestroyIcon($hIcon)
If Not $hIconCopy Then Exit 3
$aInfo = _WinAPI_GetIconInfo($hIconCopy)
If @error Then Exit 4
$tSize = _WinAPI_GetBitmapDimension($aInfo[5])
$iW = DllStructGetData($tSize, 1)
$iH = DllStructGetData($tSize, 2)
If Not $iW Then $iW = 32
If Not $iH Then $iH = 32
For $i = 4 To 5
_WinAPI_DeleteObject($aInfo[$i])
Next
$aInfo = 0
$tSize = 0
GUICreate('Test', $iW * 5, $iH * 3)
GUICtrlCreateIcon('', 0, $iW * 2, $iH, $iW, $iH)
GUICtrlSendMsg(-1, 0x0172, 1, $hIconCopy);$STM_SETIMAGE = 0x0172
_WinAPI_SaveHICONToFile ( @ScriptDir&"\000.ico", $hIconCopy )
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
_WinAPI_DestroyIcon($hIconCopy)
#Notrayicon
#AutoIt3Wrapper_Icon=Icon.ico
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 623, 443, 192, 124)
GUISetIcon ( "Explorer.exe", 1 )
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
А так?ничего нужного не нашел в примере
#include <WinAPIEX.au3>
#include <GUIConstantsEx.au3>
If _WinAPI_GetVersion() < '6.0' Then
MsgBox(16, 'Error', 'Require Windows Vista or later.')
Exit
EndIf
Global $hCalc, $hIcon, $aInfo
$hCalc = WinGetHandle('[Class:CalcFrame]')
If Not $hCalc Then
Run('calc.exe')
$hCalc = WinWait('[Class:CalcFrame]', '', 3)
EndIf
If Not $hCalc Then Exit 1
$hIcon = _WinAPI_GetClassLongEx($hCalc, -14);$GCL_HICON = -14
If Not $hIcon Then Exit 2
$aInfo = _WinAPI_GetIconInfoEx($hIcon)
If Not @error Then
ConsoleWrite('Path: ' & $aInfo[6] & @CR)
ConsoleWrite('ID: ' & $aInfo[5] & @CR)
For $i = 3 To 4
_WinAPI_DeleteObject($aInfo[$i])
Next
GUICreate('Test', 200, 200)
GUICtrlCreateIcon($aInfo[6], $aInfo[5], 30, 30)
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndIf
_WinAPI_DestroyIcon($hIcon)