Danke @chesstiger
Funktioniert einwandfrei unter Win 10 64bit
Beiträge von Tweaky
-
-
Hi,
ich habe folgendes SkriptSpoiler anzeigen
AutoIt
Alles anzeigen#AutoIt3Wrapper_UseX64= y #NoTrayIcon #include <AutoItObject.au3> #include <WinAPI.au3> Global Const $TBPF_NOPROGRESS = 0 Global Const $TBPF_INDETERMINATE = 0x1 Global Const $TBPF_NORMAL = 0x2 Global Const $TBPF_ERROR = 0x4 Global Const $TBPF_PAUSED = 0x8 Global $goflag = False ; register to receive the message that our button is ready GUIRegisterMsg(_WinAPI_RegisterWindowMessage("TaskbarButtonCreated"), "_TaskbarReady") ; register error handler and startup AIO Global $oError = ObjEvent("AutoIt.Error", "_ErrFunc") _AutoItObject_StartUp() ; get interfaces Global $CLSID_TaskBarlist = _AutoItObject_CLSIDFromString("{56FDF344-FD6D-11D0-958A-006097C9A090}") ; ITaskbarList3: http://msdn.microsoft.com/en-us/library/dd391692(VS.85).aspx Global $IID_ITaskbarList3 = _AutoItObject_CLSIDFromString("{ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf}") ; create the ITaskbarList3 interface instance Global $pTB3 _AutoItObject_CoCreateInstance(DllStructGetPtr($CLSID_TaskBarlist), 0, 1, DllStructGetPtr($IID_ITaskbarList3), $pTB3) If Not $pTB3 Then MsgBox(16, "Error", "Failed to create ITaskbarList3 interface, exiting.") _AutoItObject_Shutdown() Exit EndIf ; setup AIO wrapper for the interface Global $tagInterface = _ "QueryInterface long(ptr;ptr;ptr);" & _ "AddRef ulong();" & _ "Release ulong();" & _ "HrInit long();" & _ "AddTab long(hwnd);" & _ "DeleteTab long(hwnd);" & _ "ActivateTab long(hwnd);" & _ "SetActiveAlt long(hwnd);" & _ "MarkFullscreenWindow long(hwnd;int);" & _ "SetProgressValue long(hwnd;uint64;uint64);" & _ "SetProgressState long(hwnd;int);" & _ "RegisterTab long(hwnd;hwnd);" & _ "UnregisterTab long(hwnd);" & _ "SetTabOrder long(hwnd;hwnd);" & _ "SetTabActive long(hwnd;hwnd;dword);" & _ "ThumbBarAddButtons long(hwnd;uint;ptr);" & _ "ThumbBarUpdateButtons long(hwnd;uint;ptr);" & _ "ThumbBarSetImageList long(hwnd;ptr);" & _ "SetOverlayIcon long(hwnd;ptr;wstr);" & _ "SetThumbnailTooltip long(hwnd;wstr);" & _ "SetThumbnailClip long(hwnd;ptr);" ; create the AIO object using the wrapper Global $oTB3 = _AutoItObject_WrapperCreate($pTB3, $tagInterface) If Not IsObj($oTB3) Then MsgBox(16, "Error", "Something has gone horribly awry...") _AutoItObject_Shutdown() Exit EndIf ; call the HrInit method to initialize the ITaskbarList3 interface $oTB3.HrInit() Global $gui = Number(GUICreate("Toolbar Progress", 250, 80)) Global $b1 = GUICtrlCreateButton("Start Progress Bar", 10, 10) GUISetState() While 1 <> 2 Switch GUIGetMsg() Case $b1 _GoProgressTest() Case -3 ExitLoop EndSwitch WEnd $oTB3 = 0 _AutoItObject_Shutdown() Func _GoProgressTest() While Not $goflag Sleep(10) WEnd ConsoleWrite("here we go..." & @CRLF) ; go through various states and progress $oTB3.SetProgressState($gui, $TBPF_INDETERMINATE) Sleep(3000) For $i = 0 To 33 $oTB3.SetProgressValue($gui, $i, 100) Sleep(50) Next $oTB3.SetProgressState($gui, $TBPF_PAUSED) For $i = 34 To 66 $oTB3.SetProgressValue($gui, $i, 100) Sleep(50) Next $oTB3.SetProgressState($gui, $TBPF_ERROR) For $i = 67 To 100 $oTB3.SetProgressValue($gui, $i, 100) Sleep(50) Next $oTB3.SetProgressState($gui, $TBPF_NORMAL) Sleep(1500) $oTB3.SetProgressState($gui, $TBPF_NOPROGRESS) EndFunc ;==>_GoProgressTest Func _TaskbarReady($hWnd, $msg, $wParam, $lParam) Switch $hWnd Case $gui ; the taskbar button is ready ConsoleWrite("taskbar button ready" & @CRLF) $goflag = True EndSwitch EndFunc ;==>_TaskbarReady Func _ErrFunc() ConsoleWrite("! COM Error ! Number: 0x" & Hex($oError.number, 8) & " ScriptLine: " & $oError.scriptline & " - " & $oError.windescription & @CRLF) Return EndFunc ;==>_ErrFuncUnter Win 7 64bit und Win 10 32bit funktioniert dies einwandfrei.
Unter Win 10 64bit kommt allerdings folgender FehlerIch verwende die aktuelle autoitobject.au3 (1.2.8.2) von https://www.autoitscript.com/forum/topic/110379-autoitobject-udf/
Der Fehler taucht in der Funktion _AutoItObject_StartUp(), dann __Au3Obj_Mem_DllOpen() und dann __Au3Obj_PointerCall() auf.
Hat jemand eine Ahnung was man da ändern muß

-
Hi,
in meinen Skripten habe ich gemerkt, dass ich verschiedene Arten habe wie der Skriptbereich aussieht wo ich Dateien auf eine GUI ziehe.
Was von den folgenden Methoden ist besser? Oder ist es egal?Spoiler anzeigen
AutoIt
Alles anzeigen#Region ;************ Includes ************ #include <WinAPISys.au3> #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #EndRegion ;************ Includes ************ Global $aFileList Opt("GUIOnEventMode", 1) Global $GUI = GUICreate("Test", 100, 100, -1, -1, -1, $WS_EX_ACCEPTFILES) GUISetState() GUISetOnEvent($GUI_EVENT_CLOSE, "_beenden") ;mehrere Dateien auf die GUI ziehen und so einlesen Global $g_hDll = DllCallbackRegister('_WinProc', 'ptr', 'hwnd;uint;wparam;lparam') Global $g_pDll = DllCallbackGetPtr($g_hDll) Global $g_hProc = _WinAPI_SetWindowLong($GUI, $GWL_WNDPROC, $g_pDll) _WinAPI_DragAcceptFiles($GUI) While 1 Sleep(10) WEnd Func _WinProc($hWnd, $iMsg, $wParam, $lParam) Switch $iMsg Case $WM_DROPFILES $aFileList = _WinAPI_DragQueryFileEx($wParam) _WinAPI_DragFinish($wParam) _WinAPI_MessageBeep(0) ;Ton erzeugen For $i = 1 To UBound($aFileList) - 1 ConsoleWrite($aFileList[$i] & @CR) Next Return 0 EndSwitch Return _WinAPI_CallWindowProc($g_hProc, $hWnd, $iMsg, $wParam, $lParam) EndFunc ;==>_WinProc Func _beenden() ;mehrere Dateien auf die GUI ziehen und so einlesen _WinAPI_SetWindowLong($GUI, $GWL_WNDPROC, $g_hProc) DllCallbackFree($g_hDll) Exit EndFunc ;==>_beendenSpoiler anzeigen
AutoIt
Alles anzeigen#Region ;************ Includes ************ #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #EndRegion ;************ Includes ************ Opt("GUIOnEventMode", 1) Global $GUI = GUICreate("Test", 100, 100, -1, -1, -1, $WS_EX_ACCEPTFILES) GUISetState() GUISetOnEvent($GUI_EVENT_CLOSE, "_beenden") GUIRegisterMsg(0x233, "On_WM_DROPFILES") While 1 Sleep(10) WEnd Func On_WM_DROPFILES($hWnd, $msg, $wParam, $lParam) Local $tDrop, $aRet, $iCount ;string buffer for file path $tDrop = DllStructCreate("char[260]") ;get file count $aRet = DllCall("shell32.dll", "int", "DragQueryFile", _ "hwnd", $wParam, _ "uint", -1, _ "ptr", DllStructGetPtr($tDrop), _ "int", DllStructGetSize($tDrop) _ ) $iCount = $aRet[0] ;get file paths For $r = 0 To $iCount - 1 $aRet = DllCall("shell32.dll", "int", "DragQueryFile", _ "hwnd", $wParam, _ "uint", $r, _ "ptr", DllStructGetPtr($tDrop), _ "int", DllStructGetSize($tDrop) _ ) Sleep(10) ConsoleWrite(DllStructGetData($tDrop, 1) & @cr) Next ;finalize DllCall("shell32.dll", "int", "DragFinish", "hwnd", $wParam) Return EndFunc ;==>On_WM_DROPFILES Func _beenden() Exit EndFunc ;==>_beenden -
du musst noch die Einstellungen aus Post 4 dieses Threads durchführen
-
Danke water, funktioniert einwandfrei
-
-
Danke für die schnelle Antwort @water,
leider klappt es auch dann nicht.
Es kommt dann folgende Fehlermeldung. -
Hi,
seit ich auf 3.3.14.1 umgestiegen bin funktioniert _Excel_RangeFind nicht mehr. In 3.3.12.0 klappt es.So kommt bei dem Beispiel aus der Hilfe
Spoiler anzeigen
AutoIt
Alles anzeigen#include <Array.au3> #include <Excel.au3> #include <MsgBoxConstants.au3> ; Create application object and open an example workbook Local $oExcel = _Excel_Open() If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended) Local $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & "\Extras\_Excel1.xls") If @error Then MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind Example", "Error opening workbook '" & @ScriptDir & "\Extras\_Excel1.xls'." & @CRLF & "@error = " & @error & ", @extended = " & @extended) _Excel_Close($oExcel) Exit EndIf ; ***************************************************************************** ; Find all occurrences of value "37000" (partial match) ; ***************************************************************************** Local $aResult = _Excel_RangeFind($oWorkbook, "37000") If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind Example 1", "Error searching the range." & @CRLF & "@error = " & @error & ", @extended = " & @extended) MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind Example 1", "Find all occurrences of value '37000' (partial match)." & @CRLF & "Data successfully searched.") _ArrayDisplay($aResult, "Excel UDF: _Excel_RangeFind Example 1", "", 0, "|", "Sheet|Name|Cell|Value|Formula|Comment")'folgender Fehler:
AutoIt"C:\Program Files (x86)\AutoIt3\Include\Excel.au3" (656) : ==> The requested action with this object has failed.: $aResult[$iIndex][1] = $oMatch.Name.Name $aResult[$iIndex][1] = $oMatch^ ERROR
Ich nutze wie vorher auch Office 2010 32bit SP2 unter Win 7 64Bit SP1. -
Danke @eukalyptus
Funktioniert nun wieder einwandfrei. -
Nachdem ich nun von 3.3.12.0 auf 3.3.14.1 umgestiegen bin habe ich ein Problem mit _ManageArray festgestellt.
Wenn eine Funktion mehrfach aufgerufen wird in der ein Array deklariert wird, so kommt nun ein Fehler.
Mit der 3.3.12.0 hat es noch einwandfrei funktioniert.
Kann man dies beheben oder muss ich alle Skript umändern und die Arrays am Anfang außerhalb der Funktion als Global deklarieren? -
In 2 Tagen gehts los. Mitmachen!!!
-
Danke Oscar,
so passt es nun. -
Danke für das Beispiel.
Gibt es auch die Möglichkeit gleichzeitig 2 Dateien auf die freie Fläche neben "Datei 1" und "Datei 2" zu ziehen? -
Hi,
ich habe eine GUI in 3.3.12.0
Darauf ziehe ich Dateien aus dem Explorer.
Ich will die Datei entweder auf eines der beiden Labels links oder das große frei Feld rechts ziehen.Soweit funktioniert dies momentan.
Fragen:
Geht dies auch ohne das "Dummy-Label" für den rechten Bereich?
Beim beenden kommt in der Console die Meldung "!>15:37:27 AutoIt3.exe ended.rc:-1073741819"Spoiler anzeigen
AutoIt
Alles anzeigen#Region ;************ Includes ************ #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <WinAPISys.au3> #EndRegion ;************ Includes ************ Opt("GUIOnEventMode", 1) Global $GUI = GUICreate("Test", 500, 55) Global $haupt = GUICtrlCreateLabel("", 60, 0, 440, 55) Global $idLabel_datei1 = GUICtrlCreateLabel("Datei 1:", 10, 10, 50, 20) Global $idLabel_datei2 = GUICtrlCreateLabel("Datei 2:", 10, 30, 50, 20) ;mehrere Dateien auf die GUI ziehen und so einlesen Global $g_hDll = DllCallbackRegister('_WinProc', 'ptr', 'hwnd;uint;wparam;lparam') Global $g_pDll = DllCallbackGetPtr($g_hDll) Global $g_hProc = _WinAPI_SetWindowLong($GUI, $GWL_WNDPROC, $g_pDll) _WinAPI_DragAcceptFiles($GUI) GUISetState() GUISetOnEvent($GUI_EVENT_CLOSE, "_beenden") GUICtrlSetOnEvent($idLabel_datei1, "_test") GUICtrlSetOnEvent($idLabel_datei2, "_test") GUICtrlSetOnEvent($haupt, "_test") While 1 Sleep(10) WEnd Func _test() MsgBox(0, 0, @GUI_CtrlId) EndFunc ;==>_test Func _WinProc($hWnd, $iMsg, $wParam, $lParam) Local $aFileList Switch $iMsg Case $WM_DROPFILES $aFileList = _WinAPI_DragQueryFileEx($wParam) _WinAPI_DragFinish($wParam) _WinAPI_MessageBeep(0) ;Ton erzeugen MouseClick("") Return 0 EndSwitch Return _WinAPI_CallWindowProc($g_hProc, $hWnd, $iMsg, $wParam, $lParam) EndFunc ;==>_WinProc Func _beenden() _WinAPI_SetWindowLong($GUI, $GWL_WNDPROC, $g_hProc) DllCallbackFree($g_hDll) Exit EndFunc ;==>_beenden -
Los Leute umso mehr (ernsthaft) mitmachen um so spannender ist es.
-
Danke Friesel RegJump macht genau das was ist will (und mit meinem eigenen Tool bereits unter Win 7 erreicht hatte)
-
Meinte natürlich, dass es unter Win 7 problemlos funktioniert.
Ich will lediglich in der Regedit zu einem bestimmten Zweig springen.
Zum bearbeiten nehme ich natürlich die reg... Funktionen
-
Hi,
folgendes Skript funktioniert unter Win 7 64bit problemlosAutoIt$titel = "Registrierungs-Editor" ShellExecute("Regedit.exe") WinWait($titel) $winhandle = WinGetHandle($titel) $treehandle = ControlGetHandle($winhandle, '', "SysTreeView321") ControlFocus($winhandle, '', $treehandle) $exist = ControlTreeView($winhandle, "", 1, "Exists", "Computer") ;Prüfung ob der Pfadteil existiert If $exist = 0 Then MsgBox(16, "Pfad existiert nicht", "nicht möglich")Unter Win 10 64bit findet er jedoch "Computer" nicht.
Hat jemand eine Lösung.
Laut dem AutoIt Window Info-Tool sollte es passen. -
Ja den von Oscar.
Du hast recht Raupi.
Hab gar nicht darauf geachtet, welches Icon Oscar verwendet hat.
Dachte er hat meines übernommen.Somit ist der Hintergrund transparent
-
Ok, darauf wäre ich nie gekommen.
Aber statt dem DllCall kann man auch _WinAPI_ShellNotifyIcon verwenden, oder?Geht es auch, dass der weiße Hintergrund der Schrift transparent ist?