Schau dir mal die Hilfe an. Ich habe eine Vermutung:
Versuch mal (alles Default, nur der letzte Wert nicht):
$aExpo = _ArrayUnique($aExportables, 0, 0, 0, $ARRAYUNIQUE_COUNT, 4)
SUPER, vielen Dank!! Es hat funktioniert!
Schau dir mal die Hilfe an. Ich habe eine Vermutung:
Versuch mal (alles Default, nur der letzte Wert nicht):
$aExpo = _ArrayUnique($aExportables, 0, 0, 0, $ARRAYUNIQUE_COUNT, 4)
SUPER, vielen Dank!! Es hat funktioniert!
Bitte poste ein direkt ausführbares Minimalbeispiel, was diesen Fehler reproduziert und welches andere direkt bei sich selbst ausführen können.
Naja, da das Script eins unserer Programme auf der Arbeit steuern soll, ist das nicht 100% ausführbar. Aber ich kann mal die Funktion posten, die den Fehler versursacht:
Func GetExportableItems ( $hWnd, $sSearchString )
WinActivate( $hWnd )
$hNextItem = _GUICtrlTreeView_GetItemHandle( $hWnd ) ; Handle to start from
Local $aExportables[0]
Local $hLevel0Item = 0
While $hNextItem <> 0
$iLevel = _GUICtrlTreeView_Level( $hWnd, $hNextItem ) ; Das Item-Level wird abgefragt
Switch $iLevel
Case 0
$hLevel0Item = $hNextItem
_GUICtrlTreeView_SelectItem( $hWnd, $hLevel0Item )
_GUICtrlTreeView_Expand( $hWnd, $hLevel0Item )
Case 1
_GUICtrlTreeView_SelectItem( $hWnd, $hNextItem )
Case 2
_GUICtrlTreeView_SelectItem( $hWnd, $hNextItem )
$sLevel2Text = _GUICtrlTreeView_GetText( $hWnd, $hNextItem )
If StringInStr( $sLevel2Text, $sSearchString, 1 ) > 0 Then
_ArrayAdd( $aExportables, $hLevel0Item )
_GUICtrlTreeView_SelectItem( $hWnd, $hLevel0Item )
_GUICtrlTreeView_Expand( $hWnd, $hLevel0Item, False )
Else
$hNext = _GUICtrlTreeView_GetNext( $hWnd, $hNextItem )
If _GUICtrlTreeView_Level( $hWnd, $hNext ) = 0 Then
_GUICtrlTreeView_SelectItem( $hWnd, $hLevel0Item )
_GUICtrlTreeView_Expand( $hWnd, $hLevel0Item, False )
EndIf
EndIf
EndSwitch
$hNextItem = _GUICtrlTreeView_GetNext( $hWnd, $hNextItem )
WEnd
Local $aExpo = _ArrayUnique( $aExportables )
_ArrayDisplay( $aExpo )
Return $aExpo
EndFunc
Alles anzeigen
Zum Verständnis:
Die Funktion geht einen TreeView durch, wenn in Level 2 ein Eintrag gefunden wird, der dem Suchstring entspricht, wird das dazugehörige Level 0 Item in den Array gespeichert, mit _ArrayAdd. Am Ende gibt es mehrere Einträge mit dem gleichen Level 0 Item (Handle). Darum möchte ich den Array kürzen lassen.
Hallo zusammen!
Ich habe in einer Funktion einen 1D-Array erstellen lassen in dem Handles stehen. Da allerdings in dem Array mehrere Handles mehrfach vorkommen, wollte ich diese mit _ArrayUnique( $Array ) auf einen Eintrag pro Handle kürzen.
Mein Problem ist, dass AutoIt immer wieder aussteigt mit der Meldung:
ZitatC:\Program Files (x86)\AutoIt3\Include\Array.au3" (1830) : ==> The requested action with this object has failed.:
$oDictionary.Item($vElem)
$oDictionary^ ERROR
Was mache ich da falsch? Oder ist das ein Bug?
VG
Du lässt das #RequireAdmin zu Beginn des Skriptes weg.
Bereiche (Menüpunkte), die Adminrechte erfordern, prüfst Du mittels IsAdmin .
Wird das kompilierte Skript 'normal' gestartet, dann werden diese Bereiche nicht ausgeführt.
Startest Du das Skript aber mit Als Administrator ausführen erscheint eine UAC-Abfrage (vorausgesetzt es wurde nichts deaktiviert). Bestätigst Du die UAC-Abfrage (ggf. Admindaten eingeben), dann läuft Dein Skript mit Adminrechten.
Super, vielen Dank! Es funktioniert!
Du kannst doch bei Aufruf des jeweiligen Menüpunktes vor dem Ausführen abfragen, ob der angemeldete User Admin ist.
OK, klingt gut, aber wie? Am liebsten wäre mir natürlich, dass man dann, wie bei #RequireAdmin aufgefordert wird, das Administratorpassowrt einzugeben, aber es geht auch mit einer Fehlermeldung. Für die Fehlermeldung muss ich dann nur wissen, zu welcher Gruppe der aktuelle Benutzer gehört.
Hallo zusammen!
Gibt es eine Möglichkeit, mit der ich einzelne Funktionen oder Menüpunkte in einem GUI nur als Admin ausführen kann? Also nicht das komplette Script.
Der Hintergrund ist folgender: Man soll als normaler DAU-User das Programm bedienen können. Ich habe allerdings im Menü Programmpunkte zum Aufruf der INI-Dateien im Editor, was man nur als Admin können soll.
#RequireAdmin gilt ja für das komplette Programm und RunAs lässt mich Programmteile mit vorgegebenem Benutzer ausführen, wenn ich das richtig verstanden hab.
VG
Hallo und willkommen!
Ich bin zwar auch noch recht neu hier, aber ich versuch es mal
Zu 1.:
Func Funktion1()
MouseClick("left", 1372, $koord1, 1)
sleep(Random(500,1000))
MouseClick("left", 522, 487, 1)
sleep(Random(500,1000))
For $a = 1 To $H
a()
Next
MouseClick("left", 522, 487, 1)
sleep(Random(500,1000))
Send("{LEFT}")
sleep(Random(300,600))
For $a = 1 To $R
b()
Next
Alles anzeigen
Warum machst du nicht einen array mit den Koordinaten, die du dann als Paramter an deine Funktion übergibst?
Also entweder vorher:
$aKoords = [ [ 12, 120 ], [ 540, 230] ]
Funktion ( $aKoords )
Func Funktion( $aAdress )
For $i = 0 To UBound( $aAdress ) Step 1
MouseClick("left", 1372, $aAdress[$i], 1)
... weiterer Code
Next
EndFunc
Oder halt mit der For-Schleife außerhalb der Funktion:
$aKoords = [ [ 12, 120 ], [ 540, 230] ]
For $i = 0 To UBound( $aKoords ) Step 1
Funktion( $aKoords[$i] )
Next
Func Funktion ( $iAdresse ) ; ist die Adresse eine eizelne Zahl, oder 2 Zahlen? Dann musst du das anpassen
... ; = Funktionsinhalte
EndFunc
Zu 2.:
Guck dir mal die Funktion "_ClipBoard_GetData" an, die gibt dir einen String zurück, wenn nur Text in der Zwischenablage ist, den du dann mit den Stringfunktionen bearbeitetn kannst.
VG
funkey hat dir dazu doch oben ein Beispiel geschrieben.
Oh sorry, da war ich zu voreilig. Habs jetzt so wie es sein soll.
DANKE!!
Danke an alle!
Ich denke die Vermutung von BugFix passt und das zweite SetColor gehört ins else
Danke, das hat jetzt zumindest mit der Farbe funktioniert. Leider färbt es halt das komplette Edit-Field.
Ich dachte, ich könnte die Farbe pro Zeile einstellen, darum erst auf Rot, dann Zeile ausgeben und sofort wieder auf Schwarz.
Hallo zusammen!
Ich habe eine Funktion:
Func UpdateEditField( $idEditField, $sString, $bError )
Local $sValue = GUICtrlRead( $idEditField )
If $bError = True Then
Beep( 500, 500 )
GUICtrlSetColor( $idEditField, $COLOR_RED )
GUICtrlSetData( $idEditField, $sValue & @CRLF & $sString )
GUICtrlSetColor( $idEditField, $COLOR_BLACK )
Else
GUICtrlSetData( $idEditField, $sValue & @CRLF & $sString )
EndIf
EndFunc
Alles anzeigen
Die soll in einem Editfield Fehlermeldungen und Hinweise ausgeben. Bei einer Fehlermeldung soll sie den Text in rot ausgeben, ansonsten in schwarz. Leider funktioniert das nicht so, wie ich es mir vorgestellt habe. Das EditField steht auf "Readonly". Liegt es an Readonly, oder muss ich einen Refresh auf meine GUI machen? Wenn ja, wie mache ich das vernünftig, oder muss ich das komplette GUI mit @SW_SHOW einfach neu aufbauen?
VG
AutoIt: _GUICtrlMenu_GetContextMenu_Example.au3 Alles anzeigen;-- TIME_STAMP 2021-11-13 22:20:09 ;~ #include <AutoItConstants.au3> #include <WindowsConstants.au3> ;~ #include <Array.au3> #include <GuiMenu.au3> #include <Process.au3> #include <SendMessage.au3> #include <WinAPISysWin.au3> _GUICtrlMenu_GetContextMenu_Example() Func _GUICtrlMenu_GetContextMenu_Example() Local $hDesktop = _WinAPI_GetDesktopWindow() Local $hWnd, $hPopUp, $hActive, $hParent, $hRoot, $hRootOwner, $sMenuText $hActive = WinGetHandle('[ACTIVE]') ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $hActive --> " & $hActive & @CRLF & @CRLF & 'Open a popup menu...' & @CRLF & @CRLF) Do Sleep(250) $hWnd = WinGetHandle('[CLASS:#32768]') Until $hWnd $hParent = _WinAPI_GetAncestor($hWnd, $GA_PARENT) $hRoot = _WinAPI_GetAncestor($hWnd, $GA_ROOT) $hRootOwner = _WinAPI_GetAncestor($hWnd, $GA_ROOTOWNER) Local $iPID = WinGetProcess($hWnd) $sProcessName = _ProcessGetName($iPID) ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $iPID --> " & $iPID & @CRLF) ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $sProcessName --> " & $sProcessName & @CRLF) ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $hWnd --> " & $hWnd & @TAB & 'Title = "' & WinGetTitle($hWnd) & '"' & @CRLF) ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $hParent --> " & $hParent & @TAB & 'Title = "' & WinGetTitle($hParent) & '"' & @CRLF) ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $hRoot --> " & $hRoot & @TAB & 'Title = "' & WinGetTitle($hRoot) & '"' & @CRLF) ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $hRootOwner --> " & $hRootOwner & @TAB & 'Title = "' & WinGetTitle($hRootOwner) & '"' & @CRLF) $hPopUp = _SendMessage($hWnd, $MN_GETHMENU) ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $hPopUp --> " & $hPopUp & @CRLF) Local $sItemText, $aSplit, $aRect, $iItemCount = _GUICtrlMenu_GetItemCount($hPopUp), $hSub, $iSubItemCount, $sSubItemText, $iIndent = 16 ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $iItemCount --> " & $iItemCount & @CRLF) For $iItem = 0 To $iItemCount - 1 Step 1 $sItemText = _GUICtrlMenu_GetItemText($hPopUp, $iItem) If $sItemText = '' Then $sItemText = '--------------------------------' ; Separator line $aSplit = StringSplit($sItemText & @TAB, @TAB, $STR_NOCOUNT) $aRect = _GUICtrlMenu_GetItemRect($hDesktop, $hPopUp, $iItem); Mit $hPopUp funktioniert es! ConsoleWrite(StringFormat('> $sItemText #%02i: %-48s %s $aRect[%5i,%5i,%5i,%5i]\n', $iItem, $aSplit[0], $aSplit[1], $aRect[0], $aRect[1], $aRect[2], $aRect[3])) $hSub = _GUICtrlMenu_GetItemSubMenu($hPopUp, $iItem) If $hSub Then $iSubItemCount = _GUICtrlMenu_GetItemCount($hSub) ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $hSub --> " & $hSub & @CRLF) For $iSubItem = 0 To $iSubItemCount - 1 Step 1 $sSubItemText = _GUICtrlMenu_GetItemText($hSub, $iSubItem) $aSplit = StringSplit($sSubItemText & @TAB, @TAB, $STR_NOCOUNT) $aRect = _GUICtrlMenu_GetItemRect($hDesktop, $hSub, $iSubItem) ; Mit $hSub funktioniert es nicht! ConsoleWrite(StringFormat('+ %'&$iIndent&'s$sSubItemText #%02i: %-48s %s $aRect[%5i,%5i,%5i,%5i]\n', '', $iSubItem, $aSplit[0], $aSplit[1], $aRect[0], $aRect[1], $aRect[2], $aRect[3])) Next EndIf Next EndFunc ;==>_GUICtrlMenu_GetContextMenu_Example
Ah super! Genau sowas hab ich gesucht! DANKE!!
Schau mal, ob dir das hier weiterhilft:
Das Ermitteln des Handles für $hWnd, $hMain, $hDatei und die Keys bei ControlSend musst du natürlich entsprechend anpassen!
AutoIt Alles anzeigen;-- TIME_STAMP 2021-11-10 21:53:36 v 0.1 #include <AutoItConstants.au3> #include <GuiMenu.au3> Opt('SendKeyDelay', 10) ; Mit ControlSend kommt der Text oft fehlerhaft an, wenn KeyDelay auf 5 (Default) steht! Bei mir funktioniert es mit 10 sehr gut. ;~ Opt('SendKeyDownDelay', 20) Example_GUICtrlMenu_GetMenu() Opt('SendKeyDelay', 5) ;~ Opt('SendKeyDownDelay', 5) Func Example_GUICtrlMenu_GetMenu() Local $hWnd, $hMain, $hDatei ; Open Notepad Local $iPID = Run("notepad.exe") WinWaitActive("[CLASS:Notepad]") $hWnd = WinGetHandle("[CLASS:Notepad]") $hMain = _GUICtrlMenu_GetMenu($hWnd) Local $hDatei = _GUICtrlMenu_GetItemSubMenu($hMain, 0) ; Handle für das Menu "Datei" Writeln("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $hDatei --> " & $hDatei & @LF) Local $sItemText, $aSplit, $iItemCount = _GUICtrlMenu_GetItemCount($hDatei) For $iItem = 0 To $iItemCount - 1 Step 1 $sItemText = _GUICtrlMenu_GetItemText($hDatei, $iItem) If $sItemText = '' Then $sItemText = '--------------------------------' ; Separator line $aSplit = StringSplit($sItemText & @TAB, @TAB, $STR_NOCOUNT) Writeln(StringFormat('> $sItemText #%02i: %-32s %s\n', $iItem, $aSplit[0], $aSplit[1])) Next Writeln(@CRLF) ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; Namen der SubMenues, deren AcceleratorKeys und den dazu passenden ControlSend ausgeben. Local $sMenuText, $iMenuCount = _GUICtrlMenu_GetItemCount($hMain), $iKeyPos, $sAccelatorKey, $sSend Writeln("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $iMenuCount --> " & $iMenuCount & @LF) For $iMenu = 0 To $iMenuCount - 1 Step 1 ; Datei | Bearbeiten | Format | Ansicht | Hilfe $sMenuText = _GUICtrlMenu_GetItemText($hMain, $iMenu) $iKeyPos = StringInStr(StringReplace($sMenuText, '&&', '##'), '&') + 1 $sAccelatorKey = $iKeyPos ? StringMid($sMenuText, $iKeyPos, 1) : '' ; Das ist das Zeichen hinter dem "&" - falls vorhanden! $sSend = $sAccelatorKey ? "ControlSend($hWnd, '', '', '" & '!' & $sAccelatorKey & "', $SEND_DEFAULT)" : '' Writeln(StringFormat('> $sMenuText #%02i: %-32s Alt+%-32s %s\n', $iMenu, $sMenuText, $sAccelatorKey, $sSend)) Next Writeln(@CRLF) ; Get/Set File menu help context ID Writeln("> File (Datei) help context ID: " & _GUICtrlMenu_GetMenuContextHelpID($hDatei) & '\n') _GUICtrlMenu_SetMenuContextHelpID($hDatei, 1234) Writeln("> File (Datei) help context ID: " & _GUICtrlMenu_GetMenuContextHelpID($hDatei) & '\n') ; Möchten Sie die Änderungen an Unbekannt speichern? ; Wenn kein HotKey vorhanden ist. ;~ ControlSend($hWnd, "", "", StringFormat('!du{Enter}'), $SEND_DEFAULT) ; Send AcceleratorKey (Alt+du{Enter}) "Dateimenu öffnen" ; Wenn ein HotKey vorhanden ist. ControlSend($hWnd, "", "", StringFormat('^+s{Enter}'), $SEND_DEFAULT) ; Send HotKey (Strg+Shift+s{Enter}) "Dateimenu öffnen" MsgBox(64 + 262144, @ScriptName, 'Press Ok for Exit') ProcessClose($iPID) EndFunc ;==>Example_GUICtrlMenu_GetMenu ; Write a line of text to Notepad Func Writeln($sText) ControlSend("[CLASS:Notepad]", "", "Edit1", StringFormat($sText), $SEND_RAW) EndFunc ;==>Writeln
OK, danke, aber das ist leider nicht das, was ich wollte.
Ich möchte das Kontextmenü auslesen, also das, was erscheint, wenn man die rechte Maustaste bzw. die Kontextmenütaste drückt, auslesen.
Im Fall von Editor wäre das bei einem leeren Dokument:
01: Rückgängig (inaktiv)
02: ------------------------------
03: Ausschneiden (inaktiv)
04: Kopieren (inaktiv)
05: Einfügen (aktiv wenn etwas in der Zwischenablage ist)
06: Löschen (inaktiv)
07: ------------------------------
08: Alle Auswählen (inaktiv)
09: ------------------------------
10: Rechts-nach-Links-Lesefolge
11: ...
Und falls es noch Unterpunkte gibt, dann die natürlich auch.
Kann man das?
Hallo zusammen!
Ist es möglich mit AutoIt das Kontextmenü eines fremden Programms auszulesen? Da dieses Programm einen kleinen Bug hat, den man nicht beheben kann, ist es nicht sicher, ob immer alle Einträge vorhanden sind, oder nicht. Ich würde gerne den Handle in einem Array abspeichern für alle Einträge, bei denen das Kontextmenü nicht vollständig war um später darauf zurück zu kehren.
Zur Erläuterung des Bugs: Ich lade einen Datensatz und es erscheint der Titel in einem TreeView-Fenster. Auf dem Titel in dem FEnster kann ich das Kontextmenü öffnen. Bei manchen Datensätzen ist das Kontextmenü unvollständig. Wenn ich allerdings einen anderen Datensatz lade, bei dem das Kontextmenü vollständig ist und kehre dann zu dem ersten Datensatz zurück, dann ist dort das Kontextmenü auch vollständig. Ich habe leider keinen Plan, warum das so ist und wie man das ändern kann. Ich muss halt damit leben -.- (ist ein Fremdprogramm)
"ES LEBT!"
Vielen lieben Dank! Es hat funktioniert, ich bin im Programm angekommen und kann (zumindest schon mal) das richtige Menü aufrufen. Das Programm beendet sich sogar ohne die Nachfrage, ob man wirklich beenden möchte, was man beim Klicken auf "X" sonst bekommt Das hätte ich alleine nicht hinbekommen!
Jetzt muss ich nur noch raus kriegen, wie ich die Listfelder, ausgelesen bekomme und darauf reagieren kann.
Hier mal ein kleines Bsp. mit notepad.exe:
AutoIt: Notepad_Example.au3 Alles anzeigen#include <AutoItConstants.au3> _Example() Func _Example() Local $iPID = ProcessExists('notepad.exe') If Not $iPID Then $iPID = Run('notepad.exe') ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $iPID --> " & $iPID & @LF) Local $hNotepad = WinWait('[REGEXPTITLE:.*Editor;CLASS:Notepad]', '', 3) ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $hNotepad --> " & $hNotepad & @LF) If IsHWnd($hNotepad) Then WinActivate($hNotepad) ; Text einfügen ControlSend($hNotepad, '', '', 'Mit AutoIt Text in andere Programme einfügen ist ganz einfach...' & @LF, $SEND_RAW) ControlSend($hNotepad, '', '', 'aber möglichst mit ControlSend anstelle Send...' & @CRLF, $SEND_RAW) ControlSend($hNotepad, '', '', 'Und jetzt speichern wir das in eine Datei.' & @LF, $SEND_RAW) ControlSend($hNotepad, '', '', '^+s', $SEND_DEFAULT) ; Send STRG+SHIFT+S - Menü "Datei" -->> "Speichern unter..." Local $hSaveAs = WinWait('[TITLE:Speichern unter; CLASS:#32770]', '', 3) ; 3 Sekunden auf Fenster warten. ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $hSaveAs --> " & $hSaveAs & @LF) Sleep(1000) ; Etwas warten, bis das Fenster komplett aufgebaut ist, da wir sonst evtl. kein Handle für die ToolBar (Pfadname) oder das Edit (Dateiname) bekommen. Local $hToolBar = ControlGetHandle($hSaveAs, '', '[CLASS:ToolbarWindow32; INSTANCE:4]') ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $hToolBar --> " & $hToolBar & @LF) ControlSetText($hToolBar, '', '', @ScriptDir) ; Pfad ändern, in dem die Datei gespeichert werden soll. Local $hEdit = ControlGetHandle($hSaveAs, '', '[CLASS:Edit; INSTANCE:1]') ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $hEdit --> " & $hEdit & @LF) ControlSetText($hEdit, '', '', 'Test_mit_AutoIt.txt') ; Hier kommt der Dateiname hin. Sleep(5000) ; Kleine Pause, damit wir sehen können, ob der Pfad/Name korrekt geändert wurde. ControlClick($hSaveAs, '', '[CLASS:Button; INSTANCE:2]') ; Text speichern. ConsoleWrite('Done...' & @CRLF) Sleep(3000) ; Aufräumen If FileExists(@ScriptDir & '\Test_mit_AutoIt.txt') Then FileDelete(@ScriptDir & '\Test_mit_AutoIt.txt') ; Testdatei wieder löschen... ProcessClose($iPID) ; Notepad beenden. EndIf EndFunc ;==>_Example
OK ... das sieht schon mal sehr nice aus. Das Skript läuft auch. Wenn ich allerdings die Befehle in meinem Programm ausprobiere, dann passiert leider nichts. Es gibt z. B. keine Möglichkeit mit STRG irgendwas zu steuern, ich müsste wissen, wie ich die Alt-Taste abfrage, bzw. ansteuere. In der Hilfe von AutoIt hab ich dazu leider nichts gefunden. Mit dem AutoIt Info-Tool bekomme ich zwar die ID von dem Menüpunkt, weiß aber nicht, wie mich das weiter bringt.
Wo ist das Script eigentlich her? Gibts dafür eine ausführliche Dokumentation?
VG
Wenn ich mich richtig erinnere: Das Beispielscript für die Automation von Notepad funktioniert nur mit einem engl. Windows, da der Titel des Fensters sprachabhängig ist.
Dein Beispiel: autoit.Send ist sicher verkehrt, da dies nur für die ActiveX Version funktioniert. Versuche "Send" bzw. - was ich SEHR empfehle - ist die Automation von Controls also "ControlSend".
Hallo,
danke für die Antwort, leider hat mich das bis jetzt auch nicht weiter gebracht. Ich bekomme kein Lebenszeichen von AutoIt in dieses Programm gesetzt -.- Mit SEND oder ControlSend tut sich bis jetzt noch nicht, aber ich muss mir ControlSend noch genauer angucken.
Hallo,
ich möchte ein Tool, was zum Export von Bilddateien genutzt wird, mit AutoIt fernsteuern. Leider funktioniert das Script nur bis zum Start des Programms, danach tut sich leider gar nichts mehr. Auch das Beispielscript zum öffnen von Notepad, in dem eine Textzeile eingegeben wird und sich danach schließt ohne zu speichern, funktioniert auch nur bis zum Programmstart von Notepad, danach ist Funkstille.
Kann es sein, dass AutoIt unter dem aktuellen Windows (21H2) mit der Programmsteuerung Probleme hat, oder muss ich vlt. irgend etwas aufrufen, was die Steuerung dann ermöglicht? Ich möchte erst einmal Im Programmmenü den Punkt "Record" aufrufen und dort dann "Load All". Das weitere Vorgehen, denke ich, werde ich dann alleine hin bekommen, allerdings muss ich erst mal das Programmfenster richtig ansteuern können.
Für Hinweise wäre ich sehr dankbar!
VG
Mein Code sieht im Moment so aus (die auskommentierten Zeilen sind erfolglose Versuche. Der Send-Befehl funktioniert übrigens auch nicht):
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>
#include <AutoItConstants.au3>
#include <File.au3>
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <String.au3>
Global $pHeyexePath = "C:\Studien-Heyexe"
Global $pExportPath = "C:\Heyex_XML_RAW_Export"
If DirectoryCheck( $pHeyexePath, $pExportPath ) == 0 Then
MsgBox( $MB_SYSTEMMODAL, "Error", "Heyex not installed" )
Exit
EndIf
$sProgramToRun = SelectStudy()
If $sProgramToRun == "0" Then
MsgBox( $MB_SYSTEMMODAL, "Error", "Please select a study" )
Else
$sProgramToRun = StringTrimRight( $sProgramToRun, 22 )
Run( $sProgramToRun & "\heyex.exe", $sProgramToRun )
; WinWaitActive( "Heidelberg Eye Explorer" )
; Sleep( 10000 )
; WinMenuSelectItem( "Heidelberg Eye Explorer", "", "&Record", "Load All" )
; ControlFocus( "Heidelberg Eye Explorer", "Ja", 254 )
; WinWaitClose( "Loading Patients" )
autoit.send( '{ALT}+{R}+{ENTER}' )
EndIf
Alles anzeigen