OK, Danke dir.
Beiträge von BugFix
-
-
Ja, leck mich - Tatsache, so gehts. Aber wie soll man denn auf diese Elementbezeichnungen kommen? Im Quelltext steht doch folgendes:
CodeUsername: <input type="hidden" name="username" id="username" value=""> Passwort: <input type="hidden" name="password" id="password" value="">
Ich weiß schon, warum ich mich bisher immer gegen den FF gesträubt habe.
Aber leider tuts mein geliebtes K-Meleon nicht so richtig unter Win7.
-
OK, ich hatte vermutet, dass deshalb meine Eingabefelder leer bleiben.
Nun habe ich aber alle Returns ausgewertet, MozRepl funktioniert und somit werden die FF-Funktionen auch ausgeführt.
Seltsamerweise zeigen alle Funktionen Erfolg - aber meine Felder bleiben leer.Spoiler anzeigen
[autoit]#include <FF.au3>
[/autoit] [autoit][/autoit] [autoit]Local $class = '[CLASS:MozillaWindowClass]', $sPath, $hWnd
[/autoit] [autoit][/autoit] [autoit]
Local $url = "http://webmailer.1und1.de/"
Local $user = "meine-mail@online.de"
Local $pw = "password"
Local $btLogin = "https://webmailcluster.1und1.de/img/main_Login_Webmailer.png"If Not ProcessExists('firefox.exe') Then
[/autoit] [autoit][/autoit] [autoit]
$sPath = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 4.0\bin', 'PathToExe')
Run($sPath)
WinWait($class)
EndIfIf Not WinActive($class) Then
[/autoit] [autoit][/autoit] [autoit]
$hWnd = WinActivate($class) ; ohne jede Wirkung, obwohl ohne Fehler ausgeführt
WinSetState($hWnd, '', @SW_SHOW) ; -"-
EndIf_FFConnect()
[/autoit] [autoit][/autoit] [autoit]
_FFTabAdd("about:blank")
_FFOpenURL($url)_FFSetValue($user, "username", "name") ; Funktion erfolgreich - Feld ist aber leer
[/autoit] [autoit][/autoit] [autoit]
;~ __FFSend: try{window.content.top.document.getElementsByName('username')[0].value='meine-mail@online.de'}catch(e){'_FFCmd_Err';};
;~ __FFRecv: [email='meine-mail@online.de'][/email]_FFSetValue($pw, "password", "name") ; Funktion erfolgreich - Feld ist aber leer
[/autoit] [autoit][/autoit] [autoit]
;~ __FFSend: try{window.content.top.document.getElementsByName('password')[0].value='password'}catch(e){'_FFCmd_Err';};
;~ __FFRecv: password_FFClick("login_b", "id")
[/autoit]
;~ __FFSend: try{FFau3.simulateEvent(FFau3.WCD.getElementById('login_b'),'MouseEvents','click');}catch(e){'_FFCmd_Err';};
;~ __FFRecv: 1
Und noch etwas Seltsames: Wenn ich obiges Skript auf eine geöffnete FF-Sitzung anwende (das im Moment im Hintergrund ist) werden die Funktionen WinActivate() / WinSetState() erfolgreich ausgeführt, aber das Fenster bleibt trotzdem verdeckt. SetWinOnTop hilft auch nicht. :wacko: -
Hast du auch die aktuelle MozRepl? (MozRepl 1.1Beta2 hab ich)
guckst du
Installiert ist MozRepl 1.1beta2,
-
Nicht für die Installation - um die FF.au3 zu nutzen muß FF mit MozRepl kommunizieren, tut es aber hier nicht.
Daher meine Frage ob irgendwer FF.au3 in Verbindung mit dem FF4 nutzen kann. -
Ja aber wo ist das Problem? Einfach, wie schon mehrfach gesagt:
Spoiler anzeigen
[autoit]#Include <GuiEdit.au3>
[/autoit] [autoit][/autoit] [autoit]
GUICreate('')
$edit = GUICtrlCreateEdit('', 10, 10, 300, 200)
GUICtrlSetData(-1, @CRLF & @CRLF & @CRLF & @CRLF & 'Ilse')
$btInsert = GUICtrlCreateButton('Einfügen hinter Ilse', 10, 230, 120, 20)
GUISetState()While 1
[/autoit]
Switch GUIGetMsg()
Case -3
Exit
Case $btInsert
$iPos = StringInStr(GUICtrlRead($edit), 'Ilse', 1)
If $iPos Then
_GUICtrlEdit_InsertText($edit, @CRLF & "Dieser Code wird eingefügt", $iPos + StringLen('Ilse'))
EndIf
EndSwitch
WEnd -
Hat jemand von euch die FF.au3 mit dem FF4 verwenden können?
Ich bekomme folgenden Fehler:
__FFWaitForRepl ==> MozRepl Exception: !!! [Exception... "Component is not available" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"
Installiert ist MozRepl 1.1beta2, das einzige Mozrepl-Plugin, das sich im FF4 installieren ließ. -
-
bin langsam am Ende mit den Nerven
Ilse, zeig doch bitte mal den Text, den du verarbeiten möchtest. Und dann sag wo, was eingefügt werden soll. Deine Gehversuche verwirren uns mehr als dass sie Klarheit in dein Problem bringen. -
TheLuBu
[autoit]
Du hast einige Fehler drin:$search = StringinStr($aZielRead[$i],"ilse") ;String wird gesucht
[/autoit][autoit]
$search = StringinStr($aZielRead[$i],"ilse", 1) ; hier sollte man CaseSens arbeiten um nicht Teilstrings zu finden_GUICtrlEdit_InsertText($Ziel, @CRLF& "Text", $search) ; fügt den Text hinter dem gefundenen ein
[/autoit]
; Falsch! $search gibt die Startposition des gesuchten Strings an - also wird DAVOR eingefügt -
Um Daten auf meinem PC zu löschen reicht der 'normale' Löschvorgang völlig aus. Ich brauch mich nicht selbst davor zu schützen, dass ich meine Daten wiederherstellen könnte.

Interessant wird es nur, falls z.B. ein Laptop in der Firma von einem Mitarbeiter zum andren wechselt und man private Daten drauf hatte. Dazu verwende ich dann auch Acronis. Kommt aber nur alle 5 Jahre mal vor.
-
Ich verstehe nicht, weshalb du _StringBetween() verwendest. Du möchtest doch die Position im Edit herausfinden, dazu brauchst du StringInStr(). :wacko:
-
Lies mal mein Array-Tut, dann verstehst du auch das Warum.

-
Das hat nicht direkt mit dem Tab zu tun. Das passiert dir mit jedem GUI-Ctrl das du auf das Fenster setzt.
Meine Erklärung, die ich mir aus dem Verhalten erstellt habe:
Wenn du das Fenster mit gesetztem Ctrl minimierst passiert nix - aber beim Wiederherstellen wird erst der Fokus gesetzt und bekommt dann sofort die Kill-Message. Vermutlich, weil dann das Ctrl den Fokus hat.
Da du aber den Fokus des Fensters abfragst bekommst du dort keine Änderungen mehr - es hat ihn ja abgegeben.Edit:
Übrigens gibt $wParam immer das 'entgegengesetzte' Handle zurück:
- KILLFOCUS, wParam = Fenster, das den Fokus erhalten hat
- SETFOCUS, wParam = Fenster, das den Fokus verloren hatAber so richtig verständlich ist es nicht. Minimiere mal und hol zurück. Seltsamerweise bekommt das Tab (oder das entsprechende Ctrl) den Fokus, verliert ihn aber nicht, zumindest läuft keine Msg dazu auf.
Spoiler anzeigen
[autoit]#include <WindowsConstants.au3>
[/autoit] [autoit][/autoit] [autoit]$hGui = GUICreate("", 400, 300)
[/autoit] [autoit][/autoit] [autoit]
$hTab = GUICtrlCreateTab(0, 0, 400, 300)
GUISetState()ConsoleWrite('hWnd TAB: ' & GUICtrlGetHandle($hTab) & @CRLF)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite('hWnd GUI: ' & $hGui & @CRLF)GUIRegisterMsg($WM_KILLFOCUS, "WM_KILLFOCUS")
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_SETFOCUS, "WM_SETFOCUS")While GUIGetMsg() <> -3
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
WEndFunc WM_KILLFOCUS($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite('Fokus erhalten: ' & $wParam & @CRLF)
ConsoleWrite("!KILLFOCUS " & $hGui & " " & $hWnd & " " & $wParam & @CRLF)
EndFunc ;==>WM_KILLFOCUSFunc WM_SETFOCUS($hWnd, $Msg, $wParam, $lParam)
[/autoit]
ConsoleWrite('Fokus verloren: ' & $wParam & @CRLF)
ConsoleWrite("+SETFOCUS " & $hGui & " " & $hWnd & " " & $wParam & @CRLF)
EndFunc ;==>WM_SETFOCUS -
Stelle suchen, wo eingefügt werden soll und Position übergeben:
Spoiler anzeigen
[autoit]#include <GuiEdit.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]$Debug_Ed = False ; Check ClassName being passed to Edit functions, set to True and use a handle to another control to see it work
[/autoit] [autoit][/autoit] [autoit]_Main()
[/autoit] [autoit][/autoit] [autoit]Func _Main()
[/autoit] [autoit][/autoit] [autoit]
Local $hEdit, $iPos; Create GUI
[/autoit] [autoit][/autoit] [autoit]
GUICreate("Edit Insert Text", 400, 300)
$hEdit = GUICtrlCreateEdit("", 2, 2, 394, 268, BitOR($ES_WANTRETURN, $WS_VSCROLL))
GUISetState(); Set Margins
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlEdit_SetMargins($hEdit, BitOR($EC_LEFTMARGIN, $EC_RIGHTMARGIN), 10, 10); Set Text
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlEdit_SetText($hEdit, "1324890")
MsgBox(0, '', 'jetzt zwischen 4 und 8 "567" einfügen'); zwischen 4 und 8 soll 567 eingefügt werden
[/autoit] [autoit][/autoit] [autoit]
$iPos = StringInStr(GUICtrlRead($hEdit), '8'); Insert text
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlEdit_InsertText($hEdit, "567", $iPos); Loop until user exits
[/autoit] [autoit][/autoit] [autoit][/autoit]
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>_Main -
Kann es nicht probieren, da ich kein 64er System habe. Aber wie Greenhorn schon richtig bemerkte: die DEVMODE-Struktur ist voll daneben, sollte so aussehen
Spoiler anzeigen
Code
Alles anzeigentypedef struct_devicemode { WCHAR dmDeviceName[CCHDEVICENAME]; WORD dmSpecVersion; WORD dmDriverVersion; WORD dmSize; WORD dmDriverExtra; DWORD dmFields; short dmOrientation; short dmPaperSize; short dmPaperLength; short dmPaperWidth; short dmScale; short dmCopies; short dmDefaultSource; short dmPrintQuality; short dmColor; short dmDuplex; short dmYResolution; short dmTTOption; short dmCollate; BCHAR dmFormName[CCHFORMNAME]; WORD dmLogPixels; DWORD dmBitsPerPel; DWORD dmPelsWidth; DWORD dmPelsHeight; DWORD dmDisplayFlags; DWORD dmDisplayFrequency; DWORD dmDisplayOrientation; } DEVMODE;das entspricht dann auch der bereits angeführten Lösung von KaFu in AutoIt
Spoiler anzeigen
[autoit]$DEVMODE = DllStructCreate("char dmDeviceName[32];ushort dmSpecVersion;ushort dmDriverVersion;short dmSize;" & _
[/autoit]
"ushort dmDriverExtra;dword dmFields;short dmOrientation;short dmPaperSize;short dmPaperLength;" & _
"short dmPaperWidth;short dmScale;short dmCopies;short dmDefaultSource;short dmPrintQuality;" & _
"short dmColor;short dmDuplex;short dmYResolution;short dmTTOption;short dmCollate;" & _
"byte dmFormName[32];dword dmBitsPerPel;int dmPelsWidth;dword dmPelsHeight;" & _
"dword dmDisplayFlags;dword dmDisplayFrequency") -
Der Grundgedanke scheitert doch schon an einer einzigen Frage (ohne die programmiertechnischen Belange zu betrachten): Was ist besser?
Ist schneller besser oder gründlicher/genauer? Besser ist immer subjektiv und läßt sich (außer bei mathematischer Fragestellung) niemals klar definieren.
-
Ich verstehe nur nicht was die DLL bringen soll ?
Ist hier nur als Beispiel gedacht um zu zeigen wie man (rechenintensive) Vorgänge und Ressourcen auslagern kann.
(Wenn ich das Anliegen von RR04 richtig verstanden habe) -
[OT] Auch wenn ich mich bei dem Pixel-Gedöns nicht wohl fühle: Solange kein Regelverstoß vorliegt gebe ich es frei. [/OT]
Zum Thema: Die Funktion gibt bei Erfolg ein Array zurück. Also prüfe die Rückgabe mit IsArray().
-
Na dann lass dir mal die Childs auflisten. Oder verwende zum Anschauen mal ein brauchbares Tool, wie "Winspector Spy" oder "Sysinternals Process Explorer".