Mir ging es ja um die Registerkarten.
Beiträge von DOheim
-
-
Ich habe beispielsweise mehrere IE-Instanzen (IE-Prozesse) gestartet mit jeweils mehreren Registerkarten.
Kann ich herausfinden ob sich darunter eine bestimmte - von mir gesuchte - Registerkarte (Titel und/oder Adresse) befindet, ohne die einzelnen IE-Instanzen zu aktivieren (z.B. mit WinActivate)? -
Recht vielen Dank Micha_he und Darnas !
[autoit]
Als ich Micha_he's Programm gestartet hatte, kam ein Hinweis, dass bei einem 64-Bit-System auch die 64-Bit-Variante zu starten ist. Das hat mich stutzen lassen!!!
Zu Beginn der Compilierung im Wrapper-Fenster hatte ich nur den Haken bei X64 gesetzt, aber den bei X86 nicht entfernt.
Und nun klappt alles.
Recht herzlichen Dank nochmals!
Gruß Dieter
[/autoit][autoit][/autoit][autoit][/autoit]
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GuiListView.au3>
Local $arr[300][3]
If Not WinActive("Program Manager") Then WinActivate("Program Manager")
$hwnd = ControlGetHandle("Program Manager", "", "SysListView321")
$hwnd = HWnd($hwnd)
For $i = 0 To _GUICtrlListView_GetItemCount($hwnd) - 1
$arr[$i][0] = _GUICtrlListView_GetItemText($hwnd, $i)
$pos = _GUICtrlListView_GetItemPosition($hwnd, $i)
$arr[$i][1]=$pos[0]
$arr[$i][2]=$pos[1]
Next
_ArrayDisplay($arr) -
Vielen Dank Micha_he für Deine Antwort.
Auch mit der .exe klappt es nicht.
Ich wäre Dir sehr dankbar, wenn Du mir Deine Source zur Verfügung stellen würdest.
Gruß
DieterSo sieht das Compilierungsprotokoll aus:
Spoiler anzeigen
>"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /ShowGui /in "D:\AU\#Test\Test1.au3"
+>13:06:32 Starting AutoIt3Wrapper v.14.801.2025.0 SciTE v.3.4.4.0 Keyboard:00000407 OS:WIN_7/Service Pack 1 CPU:X64 OS:X64 Environment(Language:0407)
+> SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE UserDir => C:\Users\ff\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\ff\AppData\Local\AutoIt v3\SciTE
-> No changes made..
>Running AU3Check (3.3.12.0) from:C:\Program Files (x86)\AutoIt3 input:D:\AU\#Test\Test1.au3
+>13:06:34 AU3Check ended.rc:0
>Running:(3.3.12.0):C:\Program Files (x86)\AutoIt3\aut2exe\aut2exe.exe /in "D:\AU\#Test\Test1.au3" /out "C:\Users\ff\AppData\Local\AutoIt v3\Aut2exe\~AU3nnccjqo.exe" /nopack /comp 2
+>13:06:36 Aut2exe.exe ended.C:\Users\ff\AppData\Local\AutoIt v3\Aut2exe\~AU3nnccjqo.exe. rc:0
+>13:06:36 Created program:D:\AU\#Test\Test1.exe
+>13:06:36 AutoIt3Wrapper Finished.
>Exit code: 0 Time: 5.045 -
Ich möchte die Namen und Position der Desktopsymbole ermitteln.
[autoit][/autoit][autoit][/autoit][autoit]
Das Beispiel von "owi dowi spin" am Ende von:
Position eines Icons auf dem Desktop ermitteln
funktioniert bei mir (Win7) nicht:#include <GuiListView.au3>
[/autoit][autoit][/autoit][autoit]
ShowBalloonTip("Papierkorb")
Sleep(4000)Func ShowBalloonTip($LinkName)
[/autoit]
If Not WinActive("Program Manager") Then WinActivate("Program Manager")
$hwnd = ControlGetHandle("Program Manager", "", "SysListView321")
$hwnd = HWnd($hwnd)
WinMinimizeAll()
For $i = 0 To _GUICtrlListView_GetItemCount($hwnd) - 1
$xx=_GUICtrlListView_GetItemText($hwnd, $i)
MsgBox(0,"xx",$xx)
If _GUICtrlListView_GetItemText($hwnd, $i)=$LinkName Then
$pos = _GUICtrlListView_GetItemPosition($hwnd, $i)
If IsArray($pos) Then
ToolTip("Das ist die Verknüpfung",$pos[0] + 24, $pos[1] + 27,"Hier",1,5)
ExitLoop
EndIf
EndIf
Next
EndFuncEs erscheint nur:
Was habe ich falsch gemacht?
Vielen Dank schon mal im Voraus für eine Antwort. -
Recht herzlichen Dank für die Antwort!
Die Funktion _IEPropertyGet habe ich einfach nicht erkannt.
Das kappt ja einwandfrei für die erste IE- Registerkarte.
Hättest Du noch eine Idee, wie man das für die aktive Registerkarte hinbekommt.
Ich habe herumexperimentiert, aber keinen Erfolg gehabt. -
Ich habe mir das Beispiel für die Funktion ControlGetText aus der AutoIt-Hilfe herauskopiert und entsprechend angepasst, um das Adressfeld des Internet Explorers auszulesen. Aber das funktioniert nicht.
[autoit][/autoit][autoit][/autoit][autoit]#include <MsgBoxConstants.au3>
[/autoit][autoit][/autoit][autoit]Example()
[/autoit][autoit][/autoit][autoit]Func Example()
[/autoit][autoit][/autoit][autoit]
; Run Notepad
Run("C:\Program Files\Internet Explorer\iexplore.exe"); Wait 10 seconds for the Notepad window to appear.
[/autoit][autoit][/autoit][autoit]
;Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)
Local $hWnd = WinWait("[CLASS:IEFrame]", "", 10); Set the edit control in Notepad with some text. The handle returned by WinWait is used for the "title" parameter of ControlSetText.
[/autoit][autoit][/autoit][autoit]
;ControlSetText($hWnd, "", "Edit1", "This is some text")
Sleep(1000)
ControlSetText($hWnd, "", "[ToolbarWindow322]", "This is some text"); Retrieve the text of the edit control in Notepad. The handle returned by WinWait is used for the "title" parameter of ControlGetText.
[/autoit][autoit][/autoit][autoit]
;Local $sText = ControlGetText($hWnd, "", "Edit1")
Local $sText = ControlGetText($hWnd, "", "ToolbarWindow322"); Display the text of the edit control.
[/autoit][autoit][/autoit][autoit]
MsgBox($MB_SYSTEMMODAL, "", "The text in Edit1 is: " & $sText); Close the Notepad window using the handle returned by WinWait.
[/autoit][autoit][/autoit][autoit][/autoit]
;WinClose($hWnd)
EndFunc ;==>ExampleWas habe ich falsch gemacht?
Vielen Dank schon mal für eine Antwort! -
Die habe ich dummerweise mit der deutschen Datei überschrieben.
Muss ich mir neu besorgen.
Vielen Dank für Deinen Hinweis.P.S.: Habe ich unter
https://www.autoitscript.com/autoit3/docs/l…el_BookOpen.htm
gefunden. -
Ich habe mir das aktuelle AutoIt heruntergeladen und installiert.
Jetzt funktionieren alle meine Programme, in welchen Excel verwendet wir nicht mehr.
In der Datei C:\Program Files (x86)\AutoIt3\Include\Excel.au3 steht beispielsweise nicht mehr die Funktion
_ExcelBookOpen sondern die Funktion
_Excel_BookOpen.
In der aktuellen Hilfe Deutsch: 12/23/2013 (Q) ist diese aber nicht beschrieben.
Finde ich irgendwo eine Beschreibung?
Zunächst habe ich mir damit geholfen, dass ich die Datei C:\Program Files (x86)\AutoIt3\Include\Excel.au3 einfach gegen die alte Datei Excel.au3 ausgetauscht habe. Aber das ist natürlich sehr unbefriedigend.Vielen Dank schon mal für eine Antwort.
-
Nachdem ich, wie von Aspirn Junkie empfohlen, das aktuelle AutoIt und das aktuelle SciTE installiert und mein Programm mit der Stripper-Anweisung kompiliert habe, konnte ich die Stelle in meinem Programm den Fehleridentifizieren.
[autoit]
Mein Programm sah so aus:
[/autoit]
...
GUISetOnEvent($GUI_EVENT_MOUSEMOVE, '_MausMove') ; der Mauszeiger wurde bewegt
...
Protokoll("xxxxxx")
GUISetState()
Protokoll("yyyyyy")
Global $Cursor=1
...
Func _MausMove()
If $cursor=0 Then
...
Wenn ich also - während GUISetState() das Fenster aufgebaut hat - bereits die Maus bewegt habe, ist das Programm unmittelbar nach Beendigung von GUISetState() nicht zu Protokoll("yyyyyy") sondern zur Funktion _MausMove() gesprungen. Da war natürlich $Cursor noch nicht definiert und If $cursor=0 hat den Fehler gebracht.Über den Weg von Jasfar hätte ich es bestimmt genauso gefunden. Aber so habe ich gleich mal mei AutoIt aktualisiert.
Nochmals vielen Dank Euch beiden. -
Lieber Aspirn Junkie und lieber Jasfar,
ich war nach meiner Frage zwei Tage außer Haus und bedanke mich deshalb erst jetzt für Eure Antworten.
Das werde ich jetzt alles ausprobieren.
Recht herzlichen Dank! -
Mein Programm hat (einschließlich Kommentaren) 1026 Zeilen.
Unter anderem ist diese Passage enthalten:Protokoll("xxxxxx")
GUISetState()
Protokoll("yyyyyy")Ungefähr in 80 % der Fälle arbeitet das Programm einwandfrei. Aber eben in den restlichen 20% der Starts erscheint zunächst das mit GUISetState() zu eröffnende Fenster und dann sofort diese Fehlermeldung:
AutoIt-Error
Line 4680 (File "D:\AU\Desktop2\Desktop2.exe")
Error: Variable used without being declared[Blockierte Grafik: http://www.autoit.de/index.php?page=Attachment&attachmentID=24682&h=2927f7171e4a2f175caebc76933ba5f1a791806e]
Und in meiner Protokoll-Datei steht als letztes die Zeile "xxxxxx".
Wie kann ich die Ursache für diesen Fehler ermitteln?
Wie kann ich mir die Zeile 4680 ansehen?Vielen Dank schon mal für eine Antwort.
-
Ich habe noch etwas herumprobiert und die Lösung gefunden:
Spoiler anzeigen
[autoit]#include <ClipBoard.au3>
[/autoit]
$datei=@SystemDir&"\notepad.exe"
$x=xClipboard($datei)
_ClipBoard_SetData($x,15)
MsgBox(0,"_ClipBoard_SetData","Jetzt Rechtsklick "&@CRLF&"auf den Desktop oder in einen Ordner, " _
&@CRLF&"danach 'Einfügen'."&@CRLF&"Dadurch wird notepad.exe kopiert.")
#cs -------------------------------------------------------------------------------------
Konvertiert den $dateipfad in das Format, welches für Kontextmenü/Einfügen benötigt wird.
#ce -------------------------------------------------------------------------------------
Func xClipboard($dateipfad)
Local $erg="0x1400000000000000000000000000000001000000" ; Vorspann
Local $len= StringLen($dateipfad)
Local $i
For $i=1 To $len
Local $a=Asc (StringMid($dateipfad,$i,1))
Local $h=Hex($a,2)
$erg=$erg&$h&"00"
Next
$erg=$erg&"00000000"
Return $erg
EndFunc -
Recht vielen Dank Micha_he, Andy und Globalhorst für Eure Antworten. Ich werde also mein Programm nach dem "Kopieren" nicht beenden, sondern den Vorschlag mit FileCopy aufgreifen.
Recht herzlichen Dank nochmals. -
Über das Kontextmenü kann man im Ordner1 eine Datei D:\Ordner1\xxxx.txt mit "Kopieren" in die Zwischenablage bringen und danach diese über das Kontextmenü in den Ordner2 "Einfügen".
Wie kann ich mit meinem Programm die Datei D:\Ordner1\xxxx.txt so in die Zwischenablage bringen, dass ich anschließend diese über das Kontextmenü in den Ordner2 "Einfügen" kann?
So geht es jedenfalls nicht: -
Recht herzlichen Dank für die ausführliche Antwort, Make Grafik,
da muss ich mein Programm ja ganz schön umorganisieren. Es hat schließlich schon 938 Befehlszeilen, und ich wollte nur "schnell mal" das mit den Kontextmenüs ergänzen. Da hat Hänschen aber die Rechnung ohne den Wirt gemacht.
Mit einer Zeile Deines Programms kommt mein SciTE ( und ich auch ) nicht klar. Es erscheint:>"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "D:\AU\#Test\Test4.au3"
D:\AU\#Test\Test4.au3 (36) : ==> Unable to parse line.:
($bState) ? (GUISetState(@SW_SHOW, $hChild)) : (GUISetState(@SW_HIDE, $hChild))
($bState) ^ ERROR
>Exit code: 1 Time: 0.215Es wäre nett, wenn Du dazu noch etwas sagen könntest.
Aber wundere Dich bitte nicht, wenn ich darauf dann nicht gleich reagiere. Denn heute Nacht geht es ab in den Urlaub.
Nochmals vielen Dank!
Gruß
Dieter -
Mein Programm erzeugt zunächst ein Fenster "zzzzzzzzzzz".
Wenn ich dort mit der rechten Maustaste hineinklicke, erscheint ein kleine Fenster.
Ich erwarte nun, dass die MsgBox "xxxxx" erscheint, wenn ich in das kleine Fenster mit der linken Maustaste klicke.
Aber das funktioniert nicht. Was habe ich falsch gemacht?
[autoit]
[/autoit][autoit][/autoit][autoit]
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>Opt('GUIOnEventMode', 1)
[/autoit][autoit][/autoit][autoit]
$winhandle=GUICreate("zzzzzzzzzz",500 ,300,400,400)
GUISetOnEvent($GUI_EVENT_SECONDARYUP, '_KlickRightUP')
GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseWindow')
GUISetState()
WinWaitClose($winhandle)Func _CloseWindow()
[/autoit][autoit][/autoit][autoit]
GUIDelete($winhandle)
EndFuncFunc _KlickRightUp()
[/autoit][autoit][/autoit][autoit]
Kontextmenue()
GUIDelete ( $winhandle)
EndFuncFunc Kontextmenue()
[/autoit][autoit][/autoit][autoit]
$kontexthandle=GUICreate("",60,100,430,430,$WS_POPUPWINDOW )
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_KlickDownKon')
GUISetState()
WinWaitClose($kontexthandle)
EndFuncFunc _KlickDownKon()
[/autoit]
MsgBox(0,"xxxxx","xxxxx")
GUIDelete ( $kontexthandle)
EndFuncNebenbei noch eine andere Frage: Wie erzeuge ich einen Spoiler? Wenn ich auf den SP-Button klicke und dann zwischen Spoiler und /spoiler
den Programmtext kopiere entsteht zwar ein Spoiler, der wird aber nicht in der SciTE-Form dargestellt, sondern nur in schwarzer Schrift.Spoiler anzeigen
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>Opt('GUIOnEventMode', 1)
$winhandle=GUICreate("zzzzzzzzzz",500 ,300,400,400)
GUISetOnEvent($GUI_EVENT_SECONDARYUP, '_KlickRightUP')
GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseWindow')
GUISetState()
WinWaitClose($winhandle)Func _CloseWindow()
GUIDelete($winhandle)
EndFuncFunc _KlickRightUp()
Kontextmenue()
GUIDelete ( $winhandle)
EndFuncFunc Kontextmenue()
$kontexthandle=GUICreate("",60,100,430,430,$WS_POPUPWINDOW )
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_KlickDownKon')
GUISetState()
WinWaitClose($kontexthandle)
EndFuncFunc _KlickDownKon()
MsgBox(0,"xxxxx","xxxxx")
GUIDelete ( $kontexthandle)
EndFunc -
Recht vielen Dank, chip und name22, für Eure schnellen Hinweise.
Das muss ich jetzt noch einmal unter diesen Aspekten richtig durchdenken.
Vielen Dank nochmals.
Gruß Dieter -
Wahrscheinlich bin ich mit Blindheit geschlagen.
In der AutoIt-Hilfe steht unter GUICtrlCreateContextMenu ein Beispiel.
Warum muss ich im Example1 auf das OK-Button mit der rechten Maustaste klicken, um das Kontextmenü anzeigen zu lassen, aber im Example2 mit der linken Maustaste auf Options oder Help?Vielen Dank schon mal für eine Antwort!
-
Um einzugrenzen wann der Fehler kommt, habe ich ein paar Protokollier-Punkte in mein Script gesetzt. Nun tritt der Fehler nicht mehr auf. Das ist zwar unbefriedigend, aber jetzt lasse ich es einfach so.
Vielen Dank für Eure Hinweise, lieber BigRox und YaeroxXO !