Meinst du so?
[autoit]For $i = 1 To 2
ShellExecute("http:\http://www.google.de")
WinWaitActive("Mozilla Firefox")
$Handle = WinGetHandle("Mozilla Firefox")
WinSetState($Handle,"",@SW_MAXIMIZE)
Sleep(1000)
Next
Meinst du so?
[autoit]For $i = 1 To 2
ShellExecute("http:\http://www.google.de")
WinWaitActive("Mozilla Firefox")
$Handle = WinGetHandle("Mozilla Firefox")
WinSetState($Handle,"",@SW_MAXIMIZE)
Sleep(1000)
Next
Hab ich auch schon dran gedacht.
Aber es wäre bei RGB einfach schöner, jede einzelne Farbe zu haben.
Ich werds mir überlegen.
Edit: Hier meine Lösung (sry für das Durcheinander, aber es ist eben halt nur ein Testskript):
#include<GDIplus.au3>
#include<WindowsConstants.au3>
#include<GUIConstants.au3>
#include<Constants.au3>
; Windows Konstanten
[/autoit] [autoit][/autoit] [autoit]#Region NotifyIcon Constants
Select
Case @OSBuild < 2195
$tagNOTIFYICONDATAW_TEMP = "DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; ptr hIcon; WCHAR szTip[64];"
Case Else
$tagNOTIFYICONDATAW_TEMP = "DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; ptr hIcon; WCHAR szTip[128];" & _
"DWORD dwState; DWORD dwStateMask; WCHAR szInfo[256]; UINT uTimeout; WCHAR szInfoTitle[64]; DWORD dwInfoFlags;"
EndSelect
Global Const $tagNOTIFYICONDATAW = $tagNOTIFYICONDATAW_TEMP
Global Const $tagNOTIFYICONDATA = $tagNOTIFYICONDATAW
Global Const $NIN_BALLOONSHOW = $WM_USER + 2
Global Const $NIN_BALLOONHIDE = $WM_USER + 3
Global Const $NIN_BALLOONTIMEOUT = $WM_USER + 4
Global Const $NIN_BALLOONUSERCLICK = $WM_USER + 5
Global Const $NIM_ADD = 0x00000000
Global Const $NIM_MODIFY = 0x00000001
Global Const $NIM_DELETE = 0x00000002
Global Const $NIM_SETFOCUS = 0x00000003
Global Const $NIM_SETVERSION = 0x00000004
Global Const $NIF_MESSAGE = 0x00000001
Global Const $NIF_ICON = 0x00000002
Global Const $NIF_TIP = 0x00000004
Global Const $NIF_STATE = 0x00000008
Global Const $NIF_INFO = 0x00000010
Global Const $NIF_GUID = 0x00000020
Global Const $NIF_REALTIME = 0x00000040
Global Const $NIF_SHOWTIP = 0x00000080
Global Const $NIS_VISIBLE = 0x00000000
Global Const $NIS_HIDDEN = 0x00000001
Global Const $NIS_SHAREDICON = 0x00000002
Global Const $NIIF_NONE = 0x00000000
Global Const $NIIF_INFO = 0x00000001
Global Const $NIIF_WARNING = 0x00000002
Global Const $NIIF_ERROR = 0x00000003
Global Const $NIIF_USER = 0x00000004
Global Const $NIIF_NOSOUND = 0x00000010
Global Const $NIIF_LARGE_ICON = 0x00000010
Global Const $NIIF_RESPECT_QUIET_TIME = 0x00000080
Global Const $NIIF_ICON_MASK = 0x0000000F
Global Const $WM_TRAYICONPROC = $WM_USER+100
[/autoit] [autoit][/autoit] [autoit]Global Const $HWND_For_TrayNotifications = GUICreate(@ScriptName&"TrayMsgWin",1,1,0,0,0,0,-3)
#EndRegion
Global $OldSlider1, $OldSlider2, $OldSlider3
[/autoit] [autoit][/autoit] [autoit]; function to add / modify / delete NotfyIcon
Func _Shell_NotifyIcon($dwMessage, ByRef $lpdata)
; Prog@ndy
Local $ptr
If IsDllStruct($lpdata) Then
$ptr = DllStructGetPtr($lpdata)
Else
$ptr = Ptr($lpdata)
EndIf
Local $result = DllCall("shell32.dll", "int", "Shell_NotifyIconW", "dword", $dwMessage, "ptr", $ptr)
If @error Then Return SetError(1, @error, 0)
Return SetError($result[0] = 0, 0, $result[0])
EndFunc ;==>_Shell_NotifyIcon
; function to create an Icon from a GDIplus-Bitmap
Func _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap)
; Prog@ndy
Local $result = DllCall($ghGDIPDLL, "int", "GdipCreateHICONFromBitmap", "ptr", $hBitmap, "ptr*", 0)
If @error Then Return SetError(1, @error, 0)
Return SetError($result[0], 0, $result[2])
EndFunc ;==>_GDIPlus_BitmapCreateHICONFromBitmap
; Ereignisse für die TrayIcons
GUIRegisterMsg($WM_TRAYICONPROC, "TRAYICONPROC")
; GDIPlus starten
_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
$hBitmap = _GDIPlus_BitmapCreateFromGraphics(16, 16, $hGraphics)
_GDIPlus_GraphicsDispose($hGraphics)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
$Brush1 = _GDIPlus_BrushCreateSolid(0xFF000000)
$Brush2 = _GDIPlus_BrushCreateSolid(0xFF000000)
$Pen = _GDIPlus_PenCreate(0xFF000000, 1)
_GDIPlus_GraphicsFillEllipse($hGraphics, 2, 2, 12, 12, $Brush1)
$prop = _GDIPlus_ImageLoadFromFile(@ScriptDir&"\black2.ico")
Opt("TrayAutoPause",0)
#Region ### START Koda GUI section ### Form=
$hwnd = GUICreate("TrayIcon", 200, 140, 193, 125)
$Slider1 = GUICtrlCreateSlider(2, 2, 150, 45)
GUICtrlSetLimit(-1, 255, 0)
GUICtrlSetData(-1, 0)
$Slider2 = GUICtrlCreateSlider(2, 50, 150, 45)
GUICtrlSetLimit(-1, 255, 0)
GUICtrlSetData(-1, 0)
$Slider3 = GUICtrlCreateSlider(2, 100, 150, 45)
GUICtrlSetLimit(-1, 255, 0)
GUICtrlSetData(-1, 0)
$chkzufall = GUICtrlCreateCheckbox("zufall",155,10,45,20)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$hIcon = _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap) ; Icon aus Bitmap erstellen
[/autoit] [autoit][/autoit] [autoit]$ICON_ID = 333
[/autoit] [autoit][/autoit] [autoit]$NOTIFYICONDATAW = DllStructCreate($tagNOTIFYICONDATAW) ; Daten für das Icon
DllStructSetData($NOTIFYICONDATAW, 1, DllStructGetSize($NOTIFYICONDATAW))
DllStructSetData($NOTIFYICONDATAW, "hWnd", $HWND_For_TrayNotifications)
DllStructSetData($NOTIFYICONDATAW, "uID", $ICON_ID) ; ID für das Icon
DllStructSetData($NOTIFYICONDATAW, "uFlags", BitOR($NIF_ICON, $NIF_TIP,$NIF_MESSAGE)) ; welche Eigenschaften sollen gesetzt werden
DllStructSetData($NOTIFYICONDATAW, "hIcon", $hIcon) ; Icon-Handle setzen
DllStructSetData($NOTIFYICONDATAW, "szTip", "Wert: 0") ; Tooltip setzen
DllStructSetData($NOTIFYICONDATAW, "uCallbackMessage", $WM_TRAYICONPROC) ; die WindowMessage zum Empfangen von Ereignissen festelgen
_Shell_NotifyIcon($NIM_ADD, $NOTIFYICONDATAW) ; Das Icon erzeugen
[/autoit] [autoit][/autoit] [autoit]_WinAPI_DestroyIcon($hIcon) ; Das Icon wieder löschen. Das TrayIcon hat eine Kopie davon erhalten.
DllStructSetData($NOTIFYICONDATAW, "uFlags", BitOR($NIF_ICON, $NIF_TIP)) ; Die gleiche Struktur wird später auch verwendet, aber nur, um
; das Icon und den tooltip zu ändern.
$OldSlider = 0
While 1
Switch GUIGetMsg()
Case - 3
Exit
Case $chkzufall
If BitAND(GUICtrlRead($chkzufall),1)=1 Then
AdlibRegister("ZufallsWert",400)
Else
AdlibUnRegister()
EndIf
EndSwitch
If GUICtrlRead($Slider1) <> $OldSlider1 Or GUICtrlRead($Slider2) <> $OldSlider2 Or GUICtrlRead($Slider3) <> $OldSlider3 Then
$Brush1 = _GDIPlus_BrushCreateSolid("0xFF"&StringRight(Hex(GUICtrlRead($Slider1)),2) & StringRight(Hex(GUICtrlRead($Slider2)),2) & StringRight(Hex(GUICtrlRead($Slider3)),2))
; Das Icon neu malen
_GDIPlus_GraphicsFillEllipse($hGraphics, 1, 1, 13, 13, $Brush1)
_GDIPlus_GraphicsDrawImageRect($hGraphics, $prop, 0, 0, 16, 16)
; Das Icon erzeugen
$hIcon = _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap)
; Das Icon setzen
DllStructSetData($NOTIFYICONDATAW, "hIcon", $hIcon)
DllStructSetData($NOTIFYICONDATAW, "szTip", "Wert: " & GUICtrlRead($Slider1))
; Das TrayIcon erhält eine Kopie.
_Shell_NotifyIcon($NIM_MODIFY, $NOTIFYICONDATAW)
; Das Icon löschen
_WinAPI_DestroyIcon($hIcon)
$OldSlider1 = GUICtrlRead($Slider1)
$OldSlider2 = GUICtrlRead($Slider2)
$OldSlider3 = GUICtrlRead($Slider3)
EndIf
WEnd
Func ZufallsWert()
GUICtrlSetData($Slider1,Random(0,255,1))
GUICtrlSetData($Slider2,Random(0,255,1))
GUICtrlSetData($Slider3,Random(0,255,1))
EndFunc
Func OnAutoItExit()
AdlibUnRegister()
; Aufräumen
_Shell_NotifyIcon($NIM_DELETE, $NOTIFYICONDATAW) ; das TrayIcon löschen
; GDIPlus freigeben
_GDIPlus_BrushDispose($Brush1)
_GDIPlus_BrushDispose($Brush2)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
EndFunc ;==>OnAutoItExit
Func TRAYICONPROC($hwnd, $uMsg, $wParam, $lParam)
; Ereignisse für das TrayIcon
Local $uTrayMsg = _WinAPI_LoWord($lParam)
Local $nID = _WinAPI_HiWord($lParam)
Switch $uTrayMsg
Case $NIN_BALLOONSHOW
ConsoleWrite("Balloon show" & @CRLF)
Case $NIN_BALLOONHIDE
ConsoleWrite("Balloon hide" & @CRLF)
Case $NIN_BALLOONTIMEOUT
ConsoleWrite("Balloon timeout" & @CRLF)
Case $NIN_BALLOONUSERCLICK
ConsoleWrite("Balloon userclick" & @CRLF)
Case $WM_LBUTTONUP
ConsoleWrite("left mousebutton Up" & @CRLF)
Case $WM_RBUTTONUP
ConsoleWrite("right mousebutton Up" & @CRLF)
Case $WM_LBUTTONDOWN
ConsoleWrite("left mousebutton Down" & @CRLF)
Case $WM_RBUTTONDOWN
ConsoleWrite("right mousebutton Down" & @CRLF)
Case $WM_CONTEXTMENU
ConsoleWrite("Context Menu" & @CRLF)
EndSwitch
Return _WinAPI_DefWindowProc($hwnd, $uMsg, $wParam, $lParam)
EndFunc ;==>TRAYICONPROC
Bild im Anhang
Hört sich gut an, aber ich bekomm folgendes nicht zum Laufen:
#include<GDIplus.au3>
#include<WindowsConstants.au3>
#include<GUIConstants.au3>
#include<Constants.au3>
; Windows Konstanten
Global Const $WM_RBUTTONDBLCLK = 0x206
Global Const $WM_RBUTTONDOWN = 0x204
Global Const $WM_RBUTTONUP = 0x205
Global Const $WM_LBUTTONDBLCLK = 0x203
Global Const $WM_LBUTTONDOWN = 0x201
;~ Global Const $WM_LBUTTONUP = 0x202
Global Const $WM_MBUTTONDBLCLK = 0x209
Global Const $WM_MBUTTONDOWN = 0x207
Global Const $WM_MBUTTONUP = 0x208
#Region NotifyIcon Constants
Select
Case @OSBuild < 2195
$tagNOTIFYICONDATAW_TEMP = "DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; ptr hIcon; WCHAR szTip[64];"
Case Else
$tagNOTIFYICONDATAW_TEMP = "DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; ptr hIcon; WCHAR szTip[128];" & _
"DWORD dwState; DWORD dwStateMask; WCHAR szInfo[256]; UINT uTimeout; WCHAR szInfoTitle[64]; DWORD dwInfoFlags;"
EndSelect
Global Const $tagNOTIFYICONDATAW = $tagNOTIFYICONDATAW_TEMP
Global Const $tagNOTIFYICONDATA = $tagNOTIFYICONDATAW
Global Const $NIN_BALLOONSHOW = $WM_USER + 2
Global Const $NIN_BALLOONHIDE = $WM_USER + 3
Global Const $NIN_BALLOONTIMEOUT = $WM_USER + 4
Global Const $NIN_BALLOONUSERCLICK = $WM_USER + 5
Global Const $NIM_ADD = 0x00000000
Global Const $NIM_MODIFY = 0x00000001
Global Const $NIM_DELETE = 0x00000002
Global Const $NIM_SETFOCUS = 0x00000003
Global Const $NIM_SETVERSION = 0x00000004
Global Const $NIF_MESSAGE = 0x00000001
Global Const $NIF_ICON = 0x00000002
Global Const $NIF_TIP = 0x00000004
Global Const $NIF_STATE = 0x00000008
Global Const $NIF_INFO = 0x00000010
Global Const $NIF_GUID = 0x00000020
Global Const $NIF_REALTIME = 0x00000040
Global Const $NIF_SHOWTIP = 0x00000080
Global Const $NIS_VISIBLE = 0x00000000
Global Const $NIS_HIDDEN = 0x00000001
Global Const $NIS_SHAREDICON = 0x00000002
Global Const $NIIF_NONE = 0x00000000
Global Const $NIIF_INFO = 0x00000001
Global Const $NIIF_WARNING = 0x00000002
Global Const $NIIF_ERROR = 0x00000003
Global Const $NIIF_USER = 0x00000004
Global Const $NIIF_NOSOUND = 0x00000010
Global Const $NIIF_LARGE_ICON = 0x00000010
Global Const $NIIF_RESPECT_QUIET_TIME = 0x00000080
Global Const $NIIF_ICON_MASK = 0x0000000F
Global Const $WM_TRAYICONPROC = $WM_USER+100
[/autoit] [autoit][/autoit] [autoit]Global Const $HWND_For_TrayNotifications = GUICreate(@ScriptName&"TrayMsgWin",1,1,0,0,0,0,-3)
#EndRegion
; function to add / modify / delete NotfyIcon
Func _Shell_NotifyIcon($dwMessage, ByRef $lpdata)
; Prog@ndy
Local $ptr
If IsDllStruct($lpdata) Then
$ptr = DllStructGetPtr($lpdata)
Else
$ptr = Ptr($lpdata)
EndIf
Local $result = DllCall("shell32.dll", "int", "Shell_NotifyIconW", "dword", $dwMessage, "ptr", $ptr)
If @error Then Return SetError(1, @error, 0)
Return SetError($result[0] = 0, 0, $result[0])
EndFunc ;==>_Shell_NotifyIcon
; function to create an Icon from a GDIplus-Bitmap
Func _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap)
; Prog@ndy
Local $result = DllCall($ghGDIPDLL, "int", "GdipCreateHICONFromBitmap", "ptr", $hBitmap, "ptr*", 0)
If @error Then Return SetError(1, @error, 0)
Return SetError($result[0], 0, $result[2])
EndFunc ;==>_GDIPlus_BitmapCreateHICONFromBitmap
; Ereignisse für die TrayIcons
GUIRegisterMsg($WM_TRAYICONPROC, "TRAYICONPROC")
; GDIPlus starten
_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
$hBitmap = _GDIPlus_BitmapCreateFromGraphics(16, 16, $hGraphics)
_GDIPlus_GraphicsDispose($hGraphics)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
$Brush1 = _GDIPlus_BrushCreateSolid(0xFF0000FF)
$Brush2 = _GDIPlus_BrushCreateSolid(0xFFFF0000)
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 16, 16, $Brush1)
Opt("TrayAutoPause",0)
#Region ### START Koda GUI section ### Form=
$hwnd = GUICreate("TrayIcon", 200, 52, 193, 125)
$Slider1 = GUICtrlCreateSlider(2, 2, 150, 45)
GUICtrlSetLimit(-1, 16, 0)
GUICtrlSetData(-1, 0)
$chkzufall = GUICtrlCreateCheckbox("zufall",155,10,45,20)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$hIcon = _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap) ; Icon aus Bitmap erstellen
[/autoit] [autoit][/autoit] [autoit]$ICON_ID = 333
[/autoit] [autoit][/autoit] [autoit]$NOTIFYICONDATAW = DllStructCreate($tagNOTIFYICONDATAW) ; Daten für das Icon
DllStructSetData($NOTIFYICONDATAW, 1, DllStructGetSize($NOTIFYICONDATAW))
DllStructSetData($NOTIFYICONDATAW, "hWnd", $HWND_For_TrayNotifications)
DllStructSetData($NOTIFYICONDATAW, "uID", $ICON_ID) ; ID für das Icon
DllStructSetData($NOTIFYICONDATAW, "uFlags", BitOR($NIF_ICON, $NIF_TIP,$NIF_MESSAGE)) ; welche Eigenschaften sollen gesetzt werden
DllStructSetData($NOTIFYICONDATAW, "hIcon", $hIcon) ; Icon-Handle setzen
DllStructSetData($NOTIFYICONDATAW, "szTip", "Wert: 0") ; Tooltip setzen
DllStructSetData($NOTIFYICONDATAW, "uCallbackMessage", $WM_TRAYICONPROC) ; die WindowMessage zum Empfangen von Ereignissen festelgen
_Shell_NotifyIcon($NIM_ADD, $NOTIFYICONDATAW) ; Das Icon erzeugen
[/autoit] [autoit][/autoit] [autoit]_WinAPI_DestroyIcon($hIcon) ; Das Icon wieder löschen. Das TrayIcon hat eine Kopie davon erhalten.
DllStructSetData($NOTIFYICONDATAW, "uFlags", BitOR($NIF_ICON, $NIF_TIP)) ; Die gleiche Struktur wird später auch verwendet, aber nur, um
; das Icon und den tooltip zu ändern.
$OldSlider = 0
While 1
Switch GUIGetMsg()
Case - 3
Exit
Case $chkzufall
If BitAND(GUICtrlRead($chkzufall),1)=1 Then
AdlibEnable("ZufallsWert",400)
Else
AdlibDisable()
EndIf
EndSwitch
$NewSlider = GUICtrlRead($Slider1)
If $NewSlider <> $OldSlider Then
; Das Icon neu malen
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 16, 16, $Brush1)
_GDIPlus_GraphicsFillRect($hGraphics, 0, 16-$NewSlider, 16, 16, $Brush2)
; Das Icon erzeugen
$hIcon = _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap)
; Das Icon setzen
DllStructSetData($NOTIFYICONDATAW, "hIcon", $hIcon)
DllStructSetData($NOTIFYICONDATAW, "szTip", "Wert: " & GUICtrlRead($Slider1))
; Das TrayIcon erhält eine Kopie.
_Shell_NotifyIcon($NIM_MODIFY, $NOTIFYICONDATAW)
; Das Icon löschen
_WinAPI_DestroyIcon($hIcon)
$OldSlider = $NewSlider
EndIf
WEnd
Func ZufallsWert()
GUICtrlSetData($Slider1,Random(0,16,1))
EndFunc
Func OnAutoItExit()
AdlibDisable()
; Aufräumen
_Shell_NotifyIcon($NIM_DELETE, $NOTIFYICONDATAW) ; das TrayIcon löschen
; GDIPlus freigeben
_GDIPlus_BrushDispose($Brush1)
_GDIPlus_BrushDispose($Brush2)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
EndFunc ;==>OnAutoItExit
Func TRAYICONPROC($hwnd, $uMsg, $wParam, $lParam)
; Ereignisse für das TrayIcon
Local $uTrayMsg = _WinAPI_LoWord($lParam)
Local $nID = _WinAPI_HiWord($lParam)
Switch $uTrayMsg
Case $NIN_BALLOONSHOW
ConsoleWrite("Balloon show" & @CRLF)
Case $NIN_BALLOONHIDE
ConsoleWrite("Balloon hide" & @CRLF)
Case $NIN_BALLOONTIMEOUT
ConsoleWrite("Balloon timeout" & @CRLF)
Case $NIN_BALLOONUSERCLICK
ConsoleWrite("Balloon userclick" & @CRLF)
Case $WM_LBUTTONUP
ConsoleWrite("left mousebutton Up" & @CRLF)
Case $WM_RBUTTONUP
ConsoleWrite("right mousebutton Up" & @CRLF)
Case $WM_LBUTTONDOWN
ConsoleWrite("left mousebutton Down" & @CRLF)
Case $WM_RBUTTONDOWN
ConsoleWrite("right mousebutton Down" & @CRLF)
Case $WM_CONTEXTMENU
ConsoleWrite("Context Menu" & @CRLF)
EndSwitch
Return _WinAPI_DefWindowProc($hwnd, $uMsg, $wParam, $lParam)
EndFunc ;==>TRAYICONPROC
Edit: Ok, also es scheint ein wenig veraltet zu sein.
Ich habe mal die Adlib-Funktionen angepasst.
#include<GDIplus.au3>
#include<WindowsConstants.au3>
#include<GUIConstants.au3>
#include<Constants.au3>
; Windows Konstanten
Global Const $WM_RBUTTONDBLCLK = 0x206
Global Const $WM_RBUTTONDOWN = 0x204
Global Const $WM_RBUTTONUP = 0x205
Global Const $WM_LBUTTONDBLCLK = 0x203
Global Const $WM_LBUTTONDOWN = 0x201
;~ Global Const $WM_LBUTTONUP = 0x202
Global Const $WM_MBUTTONDBLCLK = 0x209
Global Const $WM_MBUTTONDOWN = 0x207
Global Const $WM_MBUTTONUP = 0x208
#Region NotifyIcon Constants
Select
Case @OSBuild < 2195
$tagNOTIFYICONDATAW_TEMP = "DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; ptr hIcon; WCHAR szTip[64];"
Case Else
$tagNOTIFYICONDATAW_TEMP = "DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; ptr hIcon; WCHAR szTip[128];" & _
"DWORD dwState; DWORD dwStateMask; WCHAR szInfo[256]; UINT uTimeout; WCHAR szInfoTitle[64]; DWORD dwInfoFlags;"
EndSelect
Global Const $tagNOTIFYICONDATAW = $tagNOTIFYICONDATAW_TEMP
Global Const $tagNOTIFYICONDATA = $tagNOTIFYICONDATAW
Global Const $NIN_BALLOONSHOW = $WM_USER + 2
Global Const $NIN_BALLOONHIDE = $WM_USER + 3
Global Const $NIN_BALLOONTIMEOUT = $WM_USER + 4
Global Const $NIN_BALLOONUSERCLICK = $WM_USER + 5
Global Const $NIM_ADD = 0x00000000
Global Const $NIM_MODIFY = 0x00000001
Global Const $NIM_DELETE = 0x00000002
Global Const $NIM_SETFOCUS = 0x00000003
Global Const $NIM_SETVERSION = 0x00000004
Global Const $NIF_MESSAGE = 0x00000001
Global Const $NIF_ICON = 0x00000002
Global Const $NIF_TIP = 0x00000004
Global Const $NIF_STATE = 0x00000008
Global Const $NIF_INFO = 0x00000010
Global Const $NIF_GUID = 0x00000020
Global Const $NIF_REALTIME = 0x00000040
Global Const $NIF_SHOWTIP = 0x00000080
Global Const $NIS_VISIBLE = 0x00000000
Global Const $NIS_HIDDEN = 0x00000001
Global Const $NIS_SHAREDICON = 0x00000002
Global Const $NIIF_NONE = 0x00000000
Global Const $NIIF_INFO = 0x00000001
Global Const $NIIF_WARNING = 0x00000002
Global Const $NIIF_ERROR = 0x00000003
Global Const $NIIF_USER = 0x00000004
Global Const $NIIF_NOSOUND = 0x00000010
Global Const $NIIF_LARGE_ICON = 0x00000010
Global Const $NIIF_RESPECT_QUIET_TIME = 0x00000080
Global Const $NIIF_ICON_MASK = 0x0000000F
Global Const $WM_TRAYICONPROC = $WM_USER+100
[/autoit] [autoit][/autoit] [autoit]Global Const $HWND_For_TrayNotifications = GUICreate(@ScriptName&"TrayMsgWin",1,1,0,0,0,0,-3)
#EndRegion
; function to add / modify / delete NotfyIcon
Func _Shell_NotifyIcon($dwMessage, ByRef $lpdata)
; Prog@ndy
Local $ptr
If IsDllStruct($lpdata) Then
$ptr = DllStructGetPtr($lpdata)
Else
$ptr = Ptr($lpdata)
EndIf
Local $result = DllCall("shell32.dll", "int", "Shell_NotifyIconW", "dword", $dwMessage, "ptr", $ptr)
If @error Then Return SetError(1, @error, 0)
Return SetError($result[0] = 0, 0, $result[0])
EndFunc ;==>_Shell_NotifyIcon
; function to create an Icon from a GDIplus-Bitmap
Func _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap)
; Prog@ndy
Local $result = DllCall($ghGDIPDLL, "int", "GdipCreateHICONFromBitmap", "ptr", $hBitmap, "ptr*", 0)
If @error Then Return SetError(1, @error, 0)
Return SetError($result[0], 0, $result[2])
EndFunc ;==>_GDIPlus_BitmapCreateHICONFromBitmap
; Ereignisse für die TrayIcons
GUIRegisterMsg($WM_TRAYICONPROC, "TRAYICONPROC")
; GDIPlus starten
_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
$hBitmap = _GDIPlus_BitmapCreateFromGraphics(16, 16, $hGraphics)
_GDIPlus_GraphicsDispose($hGraphics)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
$Brush1 = _GDIPlus_BrushCreateSolid(0xFF0000FF)
$Brush2 = _GDIPlus_BrushCreateSolid(0xFFFF0000)
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 16, 16, $Brush1)
Opt("TrayAutoPause",0)
#Region ### START Koda GUI section ### Form=
$hwnd = GUICreate("TrayIcon", 200, 52, 193, 125)
$Slider1 = GUICtrlCreateSlider(2, 2, 150, 45)
GUICtrlSetLimit(-1, 16, 0)
GUICtrlSetData(-1, 0)
$chkzufall = GUICtrlCreateCheckbox("zufall",155,10,45,20)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$hIcon = _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap) ; Icon aus Bitmap erstellen
[/autoit] [autoit][/autoit] [autoit]$ICON_ID = 333
[/autoit] [autoit][/autoit] [autoit]$NOTIFYICONDATAW = DllStructCreate($tagNOTIFYICONDATAW) ; Daten für das Icon
DllStructSetData($NOTIFYICONDATAW, 1, DllStructGetSize($NOTIFYICONDATAW))
DllStructSetData($NOTIFYICONDATAW, "hWnd", $HWND_For_TrayNotifications)
DllStructSetData($NOTIFYICONDATAW, "uID", $ICON_ID) ; ID für das Icon
DllStructSetData($NOTIFYICONDATAW, "uFlags", BitOR($NIF_ICON, $NIF_TIP,$NIF_MESSAGE)) ; welche Eigenschaften sollen gesetzt werden
DllStructSetData($NOTIFYICONDATAW, "hIcon", $hIcon) ; Icon-Handle setzen
DllStructSetData($NOTIFYICONDATAW, "szTip", "Wert: 0") ; Tooltip setzen
DllStructSetData($NOTIFYICONDATAW, "uCallbackMessage", $WM_TRAYICONPROC) ; die WindowMessage zum Empfangen von Ereignissen festelgen
_Shell_NotifyIcon($NIM_ADD, $NOTIFYICONDATAW) ; Das Icon erzeugen
[/autoit] [autoit][/autoit] [autoit]_WinAPI_DestroyIcon($hIcon) ; Das Icon wieder löschen. Das TrayIcon hat eine Kopie davon erhalten.
DllStructSetData($NOTIFYICONDATAW, "uFlags", BitOR($NIF_ICON, $NIF_TIP)) ; Die gleiche Struktur wird später auch verwendet, aber nur, um
; das Icon und den tooltip zu ändern.
$OldSlider = 0
While 1
Switch GUIGetMsg()
Case - 3
Exit
Case $chkzufall
If BitAND(GUICtrlRead($chkzufall),1)=1 Then
AdlibRegister("ZufallsWert",400)
Else
AdlibUnRegister()
EndIf
EndSwitch
$NewSlider = GUICtrlRead($Slider1)
If $NewSlider <> $OldSlider Then
; Das Icon neu malen
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 16, 16, $Brush1)
_GDIPlus_GraphicsFillRect($hGraphics, 0, 16-$NewSlider, 16, 16, $Brush2)
; Das Icon erzeugen
$hIcon = _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap)
; Das Icon setzen
DllStructSetData($NOTIFYICONDATAW, "hIcon", $hIcon)
DllStructSetData($NOTIFYICONDATAW, "szTip", "Wert: " & GUICtrlRead($Slider1))
; Das TrayIcon erhält eine Kopie.
_Shell_NotifyIcon($NIM_MODIFY, $NOTIFYICONDATAW)
; Das Icon löschen
_WinAPI_DestroyIcon($hIcon)
$OldSlider = $NewSlider
EndIf
WEnd
Func ZufallsWert()
GUICtrlSetData($Slider1,Random(0,16,1))
EndFunc
Func OnAutoItExit()
AdlibUnRegister()
; Aufräumen
_Shell_NotifyIcon($NIM_DELETE, $NOTIFYICONDATAW) ; das TrayIcon löschen
; GDIPlus freigeben
_GDIPlus_BrushDispose($Brush1)
_GDIPlus_BrushDispose($Brush2)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
EndFunc ;==>OnAutoItExit
Func TRAYICONPROC($hwnd, $uMsg, $wParam, $lParam)
; Ereignisse für das TrayIcon
Local $uTrayMsg = _WinAPI_LoWord($lParam)
Local $nID = _WinAPI_HiWord($lParam)
Switch $uTrayMsg
Case $NIN_BALLOONSHOW
ConsoleWrite("Balloon show" & @CRLF)
Case $NIN_BALLOONHIDE
ConsoleWrite("Balloon hide" & @CRLF)
Case $NIN_BALLOONTIMEOUT
ConsoleWrite("Balloon timeout" & @CRLF)
Case $NIN_BALLOONUSERCLICK
ConsoleWrite("Balloon userclick" & @CRLF)
Case $WM_LBUTTONUP
ConsoleWrite("left mousebutton Up" & @CRLF)
Case $WM_RBUTTONUP
ConsoleWrite("right mousebutton Up" & @CRLF)
Case $WM_LBUTTONDOWN
ConsoleWrite("left mousebutton Down" & @CRLF)
Case $WM_RBUTTONDOWN
ConsoleWrite("right mousebutton Down" & @CRLF)
Case $WM_CONTEXTMENU
ConsoleWrite("Context Menu" & @CRLF)
EndSwitch
Return _WinAPI_DefWindowProc($hwnd, $uMsg, $wParam, $lParam)
EndFunc ;==>TRAYICONPROC
Es funktioniert allerdings immer noch nicht.
Edit:
Einfach mal die störenden Zeilen rausgenommen.
Jetzt funktionierts. Ich hoffe, dass es nun trotzdem nicht "unsauber" läuft.
Naja, ich werds mal auf mein Beispiel übertragen, wenn möglich, und berichte dann.
Ok, erstmal vielen Dank. Und zu dem Code:
Wie gesagt, ich hab mir einfach aus den Beispielen alles zusammenkopiert, bis es näherungsweise gut lief.
Oder meinst du ich würde ein Programm so, ohne Einrückung, hier im Forum posten?
Wie man sieht ist das ganz durcheinander gewürfelt und dient nur zu Testzwecken meines richtigen Programms.
Ich werde sobald wie möglich versuchen deine Aliegen umzusetzen.
Also ich habe mal ein GDI+-Beispiel-Skript benutzt, um nen Lüfter mit der Farbe "rot" darzustellen.
#include <GuiConstants.au3>
#include <GdiPlus.au3>;das include
#include <Misc.au3>
OnAutoItExitRegister("_end") ; die Funktion _end am Ende des Scriptes ausführen
[/autoit] [autoit][/autoit] [autoit]$x = 0+10;x und y deklarieren
$y = 0+10
$Gui = GUICreate("Beispiel", 100, 100, Default, Default)
GUISetState(@SW_SHOW)
_GDIPlus_Startup() ;Gdi starten
[/autoit] [autoit][/autoit] [autoit]$figur = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\black.ico")
$height = _GDIPlus_ImageGetHeight($figur)
$width = _GDIPlus_ImageGetWidth($figur)
$verhaelnis = $height / $width
$graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
$Brush1 = _GDIPlus_BrushCreateSolid(0xFFff0000)
$bk = _GDIPlus_GraphicsFillEllipse($graphic, 5, 5, 90, 90, $Brush1)
$pen = _GDIPlus_PenCreate(0xFF000000,5)
$ring = _GDIPlus_GraphicsDrawEllipse($graphic, 5, 5, 90, 90, $Pen)
$bitmap = _GDIPlus_BitmapCreateFromGraphics(100, 100, $graphic);----------------- geändert ----------------------
$buffer = _GDIPlus_ImageGetGraphicsContext($bitmap);----------------- geändert ----------------------
_GDIPlus_GraphicsDrawImageRect($buffer, $bk, 5, 5, 90, 90);----------------- geändert ----------------------
_GDIPlus_GraphicsDrawImageRect($buffer, $ring, 5, 5, 90, 90);----------------- geändert ----------------------
_GDIPlus_GraphicsDrawImageRect($buffer, $figur, $x, $y, 80, 80 * $verhaelnis);----------------- geändert ----------------------
_GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0);----------------- geändert ----------------------
_GDIPlus_ImageSaveToFile($bitmap, @ScriptDir & "\GDIPlus_Image.png")
[/autoit] [autoit][/autoit] [autoit]While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
Select
Case _IsPressed(25)
$x -= 3
Case _IsPressed(26)
$y -= 3
Case _IsPressed(27)
$x += 3
Case _IsPressed(28)
$y += 3
EndSelect
_GDIPlus_GraphicsDrawImageRect($buffer, $bk, 5, 5, 90, 90);----------------- geändert ----------------------
_GDIPlus_GraphicsDrawImageRect($buffer, $ring, 5, 5, 90, 90);----------------- geändert ----------------------
_GDIPlus_GraphicsDrawImageRect($buffer, $figur, $x, $y, 80, 80 * $verhaelnis);----------------- geändert ----------------------
_GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0);----------------- geändert ----------------------
Sleep(30)
[/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit] [autoit][/autoit] [autoit]Func _end();die Exit funktion
_GDIPlus_GraphicsDispose($graphic);Grafik Objekt freigeben
_GDIPlus_GraphicsDispose($buffer);----------------- geändert ----------------------
_GDIPlus_BitmapDispose($bitmap);----------------- geändert ----------------------
_GDIPlus_ImageDispose($figur);Bild Objekt 1 freigeben
_GDIPlus_ImageDispose($bk);Bild Objekt 2 freigeben
_GDIPlus_ImageDispose($ring)
_GDIPlus_PenDispose($pen)
_GDIPlus_Shutdown();Ressourcen freigeben
EndFunc ;==>_end
Das Problem ist, dass nach dem Minimieren und Wiederherstellen des Fensters nur noch der Lüfter zu sehen ist. Zum anderen wird auch nur dieser in das PNG gespeichert.
Außerdem soll es ja das Format ICO sein, da es als TrayIcon verwendet werden soll. Könnt ihr mir helfen?
Ich guck mal, versprechen kann ich aber nix.
@BB genau das will ich ja machen, nur ich weiß ja nicht wie.
@Bulli-IT gute Idee, Danke! Ich werds mal später versuchen. Und wozu willste das Skript? Hast du denn nen Arduino oder Ähnliches?
Der Schwerpunkt meiner Frage liegt nicht darin, das Icon zu setzen, sondern erstmal das Icon einzufärben.
Hallo,
ich habe mir eine RGB-Steuerung geschrieben, mit der ich die LED-Farbe meines Lüfters steuern kann.
Nun möchte ich, dass das Trayicon in den Farbton gefärbt wird,
welchen ich gerade für den Lüfter festgelegt habe.
Dabei gibt es Pixel, welche den Rahmen und den Propellerrand darstellen.
Diese sind immer schwarz, d.h. es müssen nur bestimmte Pixel des Icons
gefärbt werden und zwar alle außer den schwarzen.
Wie realisiere ich mein Vorhaben?
Unsauberer Lösungsvorschlag:
Ich lese z.B. per ImageSearch die Position des Trayicons auf der Taskleiste aus
und male dieses dann per GDI+ über. Dies ist natürlich nicht gerade elegant,
wäre aber im Notfall eine Überlegung wert.
Ok, vielen Dank! Ich werds mir anschauen.
Ich möchte um Geld zu sparen einen nachgebauten Arduino Mega kaufen.
Würde es dieser hier tun?
http://www.ebay.de/itm/SainSmart-MEGA-2560-ATMEGA-2560-AVR-Module-Board-Free-Cable-DE-shipping-/320858965905?pt=Wissenschaftliche_Ger%C3%A4te&hash=item4ab4af4791
Von der Hardware ist es ja eigentlich das gleiche, aber lässt er sich mit der normalen Arduino-Software programmieren?
Danke für den Tipp, aber es klappt mit 100ms recht gut.
Danke, die Funktion klappt, Xorianator.
Ich kopiere eine Datei und frage in einer Schleife die Größe mit FileGetSize() ab.
Windows 7 arbeitet ja übers Cache, da aktualisiert sich die Größe die ersten 2s und danach erst wieder, wenn die Datei komplett kopiert wurde.
Komischerweise erfolgt auch eine Aktualisierung, wenn man per Rechtsklick->Eigenschaften die Größe nachgucken will. Wie macht Windows das?
Kann man diese Aktualisierung irgendwie erzwingen?
Oder gibt es Alternativen zu FileGetSize?
Hier die (glaube ich) richtige Formatierung:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Global $Form1 = GUICreate("TEST", 393, 415, -1, -1)
GUISetOnEvent(-3, "_Exit")
TCPStartup()
$Main_IP = @IPAddress1
$Master_IP = "192.168.0.100"
$Master_Port = 54545
Global $iSocket = 0
Global $Master = ""
_Master_Verbinden()
[/autoit] [autoit][/autoit] [autoit]Func _Master_Verbinden()
GUISetState(@SW_SHOW, $Form1)
$Master = "" ; Offline = "", Online = "ONLINE"
Do
ConsoleWrite("Warte auf Server IP: " & $Master_IP & @CRLF)
$iSocket = TCPConnect($Master_IP, $Master_Port)
Sleep(1000)
Until $iSocket > 0
GUISetState(@SW_HIDE, $Form1)
_ComputerName_Senden()
Sleep(1000)
$Master = "ONLINE"
ConsoleWrite("Server online." & @CRLF)
EndFunc ;==>_Master_Verbinden
While 1
If $Master = "ONLINE" Then
Dim $recv = ""
$recv &= TCPRecv($iSocket, 1024)
If StringInStr($recv, "TASKMANAGER") Then
MsgBox(0, "Info", "Taskmanager killen.", 10) ;... ;...
ElseIf StringInStr($recv, "CMD") Then
MsgBox(0, "Info", "CMD killen", 5) ;... ;...
Else
ConsoleWrite("Warte auf Action..." & @CRLF)
EndIf
TCPSend($iSocket, "")
If @error Then
$Master = "OFFLINE"
_Master_Verbinden()
EndIf
EndIf
Sleep(100)
WEnd
Func _ComputerName_Senden()
Local $ComputerName
$ComputerName = @ComputerName & "|" & @ComputerName & "|" & @ComputerName
TCPSend($iSocket, $ComputerName)
If @error Then
TCPCloseSocket($iSocket)
$iSocket = 0
GUISetState(@SW_SHOW, $Form1)
_Master_Verbinden()
EndIf
EndFunc ;==>_ComputerName_Senden
Func _Exit()
TCPCloseSocket($iSocket)
TCPShutdown()
Exit
EndFunc ;==>_Exit
Gute Idee. Lässt sich bestimmt noch ausbauen.
Mein Ergebnis
Time: 60 seconds
_______________________
Correct chars: 190
Chars/second: 3.17
Correct words: 25
Errors...........: 0
Hallo,
wenn ich eine Datei auswähle und mit Rechtsklick das Parameter an meine Exe sende klappt alles ganz gut.
Aber wenn ich mehrere auswähle, wird die Exe so oft gestartet, wie die Anzahl der selektierten Dateien.
Kann man das irgendwie umgehen, d.h. alle Dateien in einem Parameter(evtl. Array) zu übergeben und die Exe nur
einmal zu starten?
Ich würde AdlibRegister nehmen.
Ich hab nichts geändert.