Beiträge von tommii
-
-
-
-
Also, dass was ich geschwärzt habe, ist der Name meiner Abteilung. Anhand des Namens könnte man herausfinden, in welchem Unternehmen ich tätig bin. SkillDB heißt einfach, dass es eine Excel Tabelle (als Quelle eine Datenbank) ist, in der die Mitarbeiter meiner Abteilung mit ihren verschiedenen "Rängen" und Fähigkeiten gelistet ist. Das ganze wird für ein Freistellungsantragtool, sprich mein Autoit Script soll den @Username in der liste finden, dann gucken, in welcher Schicht er ist und daraus dann erkennen, welches die Schcihtleiter sind, damit diese die Abwesenheitsantrag per Mail bekommen.
Hoffe, das ganze wird so klar. Für Spielautomaten bin ich zu alt
Lieben Gruß Thomas
-
-
Tipp1: Auch wenn es wohl nur ein Workbook-Passwort ist, solltest du es hier nicht mit veröffentlichen.
Tipp2: Die Fehlermeldung sagt doch schon alles. Bevor du die Datei schließt solltest du eine der folgenden Funktionen nutzen:Denn aktuell änderst du nur etwas, ohne den Speicherbefehl auszuführen. Dann ist klar das du solch eine Fehlermeldung bekommst.Sorry, hab nicht gesehen, das du nur die Daten einlesen willst. Dann würde ich an deiner Stelle folgendes probieren:
AutoIt
Alles anzeigen; Create application object Local $bVisible = False Local $oExcel = _Excel_Open($bVisible) Local $bReadOnly = True Local $var = 1 Local $sPassword = "IrgendeinPasswort" Local $R = "D" & $var & ":" & "E" & $var Local $sWorkbook = @ScriptDir & "\Subfiles\SkillDB.xlsm" Local $oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook, $bReadOnly, $bVisible, $sPassword) Local $aResult = _Excel_RangeRead($oWorkbook) _Excel_BookClose($oWorkbook, False) ;nicht speichern _Excel_Close($oExcel, False, True) ;Änderungen nicht speichern, ForceClose For $i = 0 To UBound($aResult, 1) - 1 If $aResult[$i][0] = @UserName Then Global $xName = StringSplit($aResult[$i][1], ",") Global $varLogin = $aResult[$i][0] Global $varName = $aResult[$i][1] Global $varSchicht = $aResult[$i][2] EndIf Next
Tipp 3: Ich hoffe, dass dies alles in einer Funktion steht, ansonsten sind alle deine Variablen Global, auch wenn du sie als Local definiert hast!
hey Moombas,
das Passwort war extra Forumtauglich gewählt
danke für deine Tips, ich werde es direkt gleich testen und melde mich dann!
Liebe Gruß Thomas
-
Hi an alle,
kurze Frage zur Excel UDF...ich öffne eine Excel Datei, um Daten in einer Variablen zu speichern. Das klappt auch soweit, aber das sauber schließen haut nicht hin, d.h. ich bekomme immer "Alerts" aus der Excel Marke "Es befindet sich schon eine Datei am Speicherort mit selben Namen" oder "soll die Datei ersetzt werden?" (wenn ich das Speichern force)...
liegt es daran, dass es eine xlsm ist? Damit gab es in der Vergangenheit ja Probleme....danke euch im Voraus
Lieben Gruß Thomas
Code
Alles anzeigen; Create application object Local $bVisible = False Local $oExcel = _Excel_Open($bVisible) ;Local $oExcel = _Excel_Open() Local $bReadOnly = True Local $bVisible = False Local $var = 1 Local $sPassword = "Apfelmus22#" Local $R = "D" & $var & ":" & "E" & $var Local $sWorkbook = @ScriptDir & "\Subfiles\SkillDB.xlsm" Local $oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook, $bReadOnly, $bVisible, $sPassword) Local $aResult = _Excel_RangeRead($oWorkbook) For $i = 0 To UBound($aResult, 1) - 1 If $aResult[$i][0] = @UserName Then Global $xName = StringSplit($aResult[$i][1], ",") Global $varLogin = $aResult[$i][0] Global $varName = $aResult[$i][1] Global $varSchicht = $aResult[$i][2] EndIf Next _Excel_BookClose($oWorkbook, True) _Excel_Close($oExcel, 1, 0)
-
Okay, hat alles hingehauen, vielen dank
-
Ja klar XD
Du musst ja auch $hOwnHandle mit dem Handle deines Fensters versehen das auf den entsprechenden Monitor gepackt werden soll, das war nur ein Platzhalter.
Gleiches gilt für $Monitornumber dort trägst du die Monitornummer ein, wo das Fenster hin soll.
autsch...ich doof, ich teste das, danke
-
Du kannst doch Fenster direkt auf Monitor X öffnen lassen ohne die Hauptanzeige zu ändern (und somit mit ggf. anderen Anzeigen in die Quere zu kommen).
Am Start des Programms das eigne Handle und die Monitornummer an folgende Funktion übergeben:
AutoIt
Alles anzeigenGlobal $__MonitorList[1][5] $__MonitorList[0][0] = 0 _CenterOnMonitor($hOwnHandle, $Monitornumber) ;================================================================================================== ; Function Name: _CenterOnMonitor($hWindow[, $Monitor = -1]]) ; Description:: Center a window on a specific monitor (or the monitor the mouse is on) ; Parameter(s): $Title The title of the window to Move/Maximize ; optional: $Text The text of the window to Move/Maximize ; optional: $Monitor The monitor to move to (1..NumMonitors) defaults to monitor mouse is on ; Note: Should probably have specified return/error codes but haven't put them in yet ; Author(s): xrxca (autoit@forums.xrx.ca) ;================================================================================================== Func _CenterOnMonitor($hWindow, $Monitor = -1) ;~ Local $hWindow = WinGetHandle($Title, $Text) If Not @error Then If $Monitor == -1 Then $Monitor = _GetMonitorFromPoint() ElseIf $__MonitorList[0][0] == 0 Then _GetMonitors() EndIf If ($Monitor > 0) And ($Monitor <= $__MonitorList[0][0]) Then ; Restore the window if necessary Local $WinState = WinGetState($hWindow) If BitAND($WinState, 16) Or BitAND($WinState, 32) Then WinSetState($hWindow, '', @SW_RESTORE) EndIf Local $WinSize = WinGetPos($hWindow) Local $x = Int(($__MonitorList[$Monitor][3] - $__MonitorList[$Monitor][1] - $WinSize[2]) / 2) + $__MonitorList[$Monitor][1] Local $y = Int(($__MonitorList[$Monitor][4] - $__MonitorList[$Monitor][2] - $WinSize[3]) / 2) + $__MonitorList[$Monitor][2] WinMove($hWindow, '', $x, $y) EndIf EndIf EndFunc ;==>_CenterOnMonitor ;================================================================================================== ; Function Name: _GetMonitors() ; Description:: Load monitor positions ; Parameter(s): n/a ; Return Value(s): 2D Array of Monitors ; [0][0] = Number of Monitors ; [i][0] = HMONITOR handle of this monitor. ; [i][1] = Left Position of Monitor ; [i][2] = Top Position of Monitor ; [i][3] = Right Position of Monitor ; [i][4] = Bottom Position of Monitor ; Note: [0][1..4] are set to Left,Top,Right,Bottom of entire screen ; hMonitor is returned in [i][0], but no longer used by these routines. ; Also sets $__MonitorList global variable (for other subs to use) ; Author(s): xrxca (autoit@forums.xrx.ca) ;================================================================================================== Func _GetMonitors() $__MonitorList[0][0] = 0 ; Added so that the global array is reset if this is called multiple times Local $handle = DllCallbackRegister("_MonitorEnumProc", "int", "hwnd;hwnd;ptr;lparam") DllCall("user32.dll", "int", "EnumDisplayMonitors", "hwnd", 0, "ptr", 0, "ptr", DllCallbackGetPtr($handle), "lparam", 0) DllCallbackFree($handle) Local $i = 0 For $i = 1 To $__MonitorList[0][0] If $__MonitorList[$i][1] < $__MonitorList[0][1] Then $__MonitorList[0][1] = $__MonitorList[$i][1] If $__MonitorList[$i][2] < $__MonitorList[0][2] Then $__MonitorList[0][2] = $__MonitorList[$i][2] If $__MonitorList[$i][3] > $__MonitorList[0][3] Then $__MonitorList[0][3] = $__MonitorList[$i][3] If $__MonitorList[$i][4] > $__MonitorList[0][4] Then $__MonitorList[0][4] = $__MonitorList[$i][4] Next Return $__MonitorList EndFunc ;==>_GetMonitors ;================================================================================================== ; Function Name: _GetMonitorFromPoint([$XorPoint = -654321[, $Y = 0]]) ; Description:: Get a monitor number from an x/y pos or the current mouse position ; Parameter(s): ; optional: $XorPoint X Position or Array with X/Y as items 0,1 (ie from MouseGetPos()) ; optional: $Y Y Position ; Note: Should probably have specified return/error codes but haven't put them in yet, ; and better checking should be done on passed variables. ; Used to use MonitorFromPoint DLL call, but it didn't seem to always work. ; Author(s): xrxca (autoit@forums.xrx.ca) ;================================================================================================== Func _GetMonitorFromPoint($XorPoint = 0, $y = 0) If @NumParams = 0 then local $MousePos = MouseGetPos() Local $myX = $MousePos[0] Local $myY = $MousePos[1] Elseif ( @NumParams = 1 ) and IsArray($XorPoint) Then $myX = $XorPoint[0] $myY = $XorPoint[1] Else $myX = $XorPoint $myY = $y EndIf If $__MonitorList[0][0] == 0 Then _GetMonitors() EndIf Local $i = 0 Local $Monitor = 0 For $i = 1 To $__MonitorList[0][0] If ($myX >= $__MonitorList[$i][1]) _ And ($myX < $__MonitorList[$i][3]) _ And ($myY >= $__MonitorList[$i][2]) _ And ($myY < $__MonitorList[$i][4]) Then $Monitor = $i Next Return $Monitor EndFunc ;==>_GetMonitorFromPoint ;================================================================================================== ; Function Name: _MonitorEnumProc($hMonitor, $hDC, $lRect, $lParam) ; Description:: Enum Callback Function for EnumDisplayMonitors in _GetMonitors ; Author(s): xrxca (autoit@forums.xrx.ca) ;================================================================================================== Func _MonitorEnumProc($hMonitor, $hDC, $lRect, $lParam) #forceref $hDC, $lParam Local $Rect = DllStructCreate("int left;int top;int right;int bottom", $lRect) $__MonitorList[0][0] += 1 ReDim $__MonitorList[$__MonitorList[0][0] + 1][5] $__MonitorList[$__MonitorList[0][0]][0] = $hMonitor $__MonitorList[$__MonitorList[0][0]][1] = DllStructGetData($Rect, "left") $__MonitorList[$__MonitorList[0][0]][2] = DllStructGetData($Rect, "top") $__MonitorList[$__MonitorList[0][0]][3] = DllStructGetData($Rect, "right") $__MonitorList[$__MonitorList[0][0]][4] = DllStructGetData($Rect, "bottom") Return 1 ; Return 1 to continue enumeration EndFunc ;==>_MonitorEnumProc
Dann wäre das Fenster Zentriert auf dem jeweiligen Monitor.
leider bekomme ich folgenden fehler, wenn ich das so in eine testdatei einfüge und ausführen will
"X:\My Documents\Autoit\Autostarttool\tests\monitore auslesen.au3" (122) : ==> Variable used without being declared.:
_CenterOnMonitor($hOwnHandle, $Monitornumber)
_CenterOnMonitor(^ ERROR
-
Hallo ihr zwei,
Mega nett, danke euch vielmals....ich habe morgen urlaub, werde es dann richtung woxhenende aber testen und mich melden.
Danke euch
-
Hallo an alle,
bei mir im Betrieb gibt es einen Arbeitsplatz mit sieben Monitoren, sechs sind riesige LED TV's einer ist ein Desktopmonitor, an dem quaisie aktiv gearbeitet wird....leider ist dieser (warum auch immer) nicht der Hauptbildschirm.
Ist es machbar, die Hauptanzeige temporär via autoit zu ändern, danach mein script durchlaufen lassen und am ende wieder die alte hauptanzeige einzustellen?
problem ist, dass sich die aufgerufenen Fenster/Programme immer im Hauptbildschirm öffnen, was für meine zwecke unschön ist (da ich leider mit Mousemove arbeiten muss, da ich in einem SunAwtFrame unterwegs bin, wo ich einige Prozeduren starten möchte, diese aber halt nur mit Mousemove/Mouseclick erreiche)
Würde mich über eine Antwort freuen
Lieben Gruß
Tommii
-
Hi,
wie in folgendem Beitrag gezeigt, brauchst du dafür noch den Parameter "AllDayEvent=1" beim Aufruf von _OL_ItemCreate.
nichts für Ungut, ich danke dir vielmals
-
chapeau...da bni ich drüber weggerutscht. danke dir vielmals.
ps: Verrätst du mir noch, wie ich daraus ein ganztägiges ereigniss mache? Ich habe das schon gelesen, finde es aber nicht wieder...
danke im voraus
lg tommii
-
Hi an alle,
Ich habe mit waters outlookEX udf schon einige Sachen realisiert. Aktuell versuche ich einen outlooktermin zu erstellen und einige leute dazu einzuladen (sind immer die gleichen empfänger.
Lässt sich das auch mit der UDF realisieren? Habe es bisher noch inbekommen, da alles in verbdinung eher mit einem termin zusammen hämgt, nicht direkt mit iner besprechnung
danke euch vielmals
Lieben Gruß Tommii
-
Ja sollte - wenn Java sich halt überall wo es ausgeführt werden soll auch ordentlich in PATH eingetragen hat.
Kleiner Tipp zu den Anführungszeichen in Strings: Es gibt zwei Zeichen für Strings in AutoIt womit man diese Dopplungen umgehen kann:
super, danke dir
-
stimmt
also reicht es den code so abzuändern?
-
Guten Tag an alle,
leider hat mir die SuFu nicht weiter geholfen... ich muss eine java Datei ausführen....statisch funktioniert es auch mit folgendem Befehl
CodeRunWait("""C:\Program Files (x86)\Java\jre1.8.0_291\bin\javaws.exe"" ""https://xyz.com:443/main/system/launch/client/test.jnlp""",@ScriptDir,@SW_HIDE)
Der Pfad zur javaws.exe muss aber variabel gestaltet werden...egal, wie ich es mit Anführungsstrichen einzeln und doppel versucht habe, ich bekomme es nicht hin...
könnt ihr mir dort bitte mal auf die Sprünge helfen?
Danke euch im Voraus
tommii
-
Kleines Update...mir ist folgendes Aufgefallen, was wahrscheinlich "sämtliche" von euch angebotene Hilfen zum Erfolgführen lässt
der kleine "Pfeil", den man klicken muss, um die Trays zu sehen, ist "class:Button"...
das Trayfenster selber ist dann class:NotifyIconOverflowWindow
ändere ich das also in euren Snippets und lasse vorher via Mausklick auf den Button klicken, funktionieren alle eure Vorschläge
Danke euch Vielmals
-
Hey Racer, leider nicht so ganz...ich stehe mittlerweile ziemlich auf dem schlauch von meinen ganzen testfiles...naja, im schlimmsten fall muss ich das ätzenderweise über mousemoves machen
danke dir/euch trotzdem