| Autor |
Beitrag |
BigBen4ever
      
Beiträge: 98
|
Verfasst: Sa 03.09.05 22:26
Hallo!
Ich würde gerne wissen, ob es möglich ist, an den Webbrowser einen Buchstaben (also einen Shortcut, der sich auf der angezeigten Seite befindet) zu schicken.
Habe es probiert mit der Sendkeys Unit:
Quelltext 1:
| sendkeystotitle('Project1','E'); |
Dabei hat sich allerdings das Programm mehrfach aufgehängt und es ist nichts passiert, gibt da doch sicherlich noch andere Möglichkeiten oder?
Wäre dankbar für Hilfe.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 03.09.05 22:27
ich verstehe nicht ganz was du vorhast
TWebbrowser ist eine Komponente, was willst du da mit irgendwelchen api befehlen hinschicken ? 
|
|
BigBen4ever 
      
Beiträge: 98
|
Verfasst: Sa 03.09.05 22:47
naja man kann doch wenn z.b. ein edit-feld den focus hat ein e an das project fenster schicken, dann wird ins edit ein e geschrieben.
sowas nur halt mit dem webbrowser.
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Sa 03.09.05 23:28
Hallo,
willst Du ein Formular ausfüllen, das sich in der angezeigten HTML-Seite im Webbrowser befindet?
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
BigBen4ever 
      
Beiträge: 98
|
Verfasst: Sa 03.09.05 23:40
nein das sind shortcuts für links, ruf mal www.lotgd.de auf, da auf der startseite ist ein beispiel:
einen charakter erstellen mit E wird dieser link aufgerufen
ich brauch einfach nur den fokus auf dem webbrowser, dann müsste das mit diesem sendkeystotitle eigentlich funktionieren, aber webbrowser1.setfocus; funktioniert irgendwie nicht.
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: So 04.09.05 01:07
Hallo,
mit den shortcuts werden doch auch nur Links aufgerufen,
kannst Du denn nicht direkt die Links verwenden?
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
BigBen4ever 
      
Beiträge: 98
|
Verfasst: So 04.09.05 01:28
nein denn wenn man im spiel eingeloggt ist funktioniert das mit einer variable die fortlaufend ist, die erst auszulesen, wäre zu aufwendig wie ich finde.
habe das aber jetzt ganz gut gelöst, glaub ich:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| procedure TForm1.Button1Click(Sender: TObject); var Flags, TargetFrameName, PostData, Headers : OleVariant; z : integer; begin
button1.Visible:=false; for z := 0 to 4 do begin WebBrowser1.Tag := 1; while (WebBrowser1.ReadyState < READYSTATE_COMPLETE) or (WebBrowser1.Tag = 0) do Application.ProcessMessages; WebBrowser1.Tag := 0; mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); sendkeystotitle('Project1',memo1.Lines[z]);
while (WebBrowser1.ReadyState < READYSTATE_COMPLETE) or (WebBrowser1.Tag = 0) do Application.ProcessMessages; end; end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin WebBrowser1.Tag := 1; end; |
Nur wie kann ich diese Schleife fortlaufend machen? (z also wieder auf 0 setzen?)
Vielleicht ne doofe Frage aber hab echt keine ahnung.
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 04.09.05 07:57
Bitte gewöhne dir an, die [delphi]-Tags und nicht die [code]-Tags zu verwenden. Danke.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 04.09.05 11:33
benutze doch einfach mal die suche
willst du sowas ?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure SendKey(Key: word); var Scan: SHORT; begin Scan := MapVirtualKey(key, 0); keybd_event(key, Scan, 0, 0); keybd_event(key, Scan, KEYEVENTF_KEYUP, 0); end; |
am besten nimmst du die sendkey unit, nimmst das handle von deinem webbrowser und fertig, wird wohl am besten sein 
Zuletzt bearbeitet von F34r0fTh3D4rk am So 04.09.05 11:40, insgesamt 1-mal bearbeitet
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: So 04.09.05 12:02
Hallo,
BigBen4ever hat folgendes geschrieben: | nein denn wenn man im spiel eingeloggt ist funktioniert das mit einer variable die fortlaufend ist, die erst auszulesen, wäre zu aufwendig wie ich finde....
...Nur wie kann ich diese Schleife fortlaufend machen? (z also wieder auf 0 setzen?)
Vielleicht ne doofe Frage aber hab echt keine ahnung. |
...erst auszulesen, wäre zu aufwendig ; kommt darauf an was Dein Ziel ist.
...Schleife fortlaufend machen? ; läuft doch von 0 bis 4
...z zurücksetzen; wofür?
In dem Code, den Du aus dem anderen Thread kopiert hast,
ging es darum mehrere Seiten hintereinander aufzurufen und den Quelltext auszulesen.
Ich vermute mal das in memo1.Lines deine Shortcuts stehen die Du abarbeiten willst.
Willst Du das Spiel damit steuern?
Etwas mehr Information Deinerseits würden eher zu einer Lösung führen.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
BigBen4ever 
      
Beiträge: 98
|
Verfasst: So 04.09.05 12:33
Elite das hab ich doch bereits, mein Problem ist ein anderes, hab ich mich wohl missverständlich ausgedrückt ...
| Zitat: |
...Schleife fortlaufend machen? ; läuft doch von 0 bis 4
...z zurücksetzen; wofür?
|
genau das sind die shortcuts die ich abarbeiten will, und das ist ein kreislauf, nachdem diese von 0-4 durchgelaufen sind, gehts wieder mit dem ersten los, kann jez natürlich z von 0-1000 laufen lassen und im memo die dinger alle eintragen, dachte nur es geht eleganter ...
sag mal hast du icq, dann kann ich dir mal mein jetziges programm zeigen, womit ich arbeite, ist allerdings mit einem timer geschrieben und deswegen natürlich etwas ungenauer, deswegen versuch ich mich mit dem webbrowser reinzufrimeln, damit ich möglichst keine zeitverluste hab ..
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: So 04.09.05 13:06
BigBen4ever hat folgendes geschrieben: | | ...sag mal hast du icq, ... |
wir sind hier in einem Forum, und das lebt von den Beiträgen.
Du kannst ja das jetzige Programm oder den relevanten Code hier anhängen, dann kommen eventuell mehr Vorschläge.
BigBen4ever hat folgendes geschrieben: |
...nachdem diese von 0-4 durchgelaufen sind, gehts wieder mit dem ersten los... |
da bietet sich eine verschachtelte Schleife an, so etwa in der Art:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var z,z2 : Integer; Arr : array [0..3] of Char; begin Arr[0] := 'E'; Arr[1] := 'F'; Arr[2] := 'H'; Arr[3] := 'X'; for z := 0 to 10 do for z2 := 0 to 3 do Memo1.Lines.Add(Arr[z2]); |
Denk aber daran eine Abbruchmöglichkeit einzubauen, findest bestimmt was dazu hier im Forum.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
BigBen4ever 
      
Beiträge: 98
|
Verfasst: So 04.09.05 14:43
ja gerade mit dieser abbruchmöglichkeit hab ich meine schwierigkeiten
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: So 04.09.05 14:59
Hallo,
ist abhängig davon, wie Du abbrechen willst.
z.B dies kannst Du mit der Taste [Esc] abbrechen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| var z,z2 : Integer; Arr : array [0..3] of Char; begin Arr[0] := 'E'; Arr[1] := 'F'; Arr[2] := 'H'; Arr[3] := 'X'; for z := 0 to 1000 do begin Application.ProcessMessages; if GetAsyncKeyState(VK_ESCAPE) <> 0 then begin showmessage('Obere Schleife beim '+IntToStr(z)+' Durchlauf abgebrochen'); break; end; for z2 := 0 to 3 do Memo1.Lines.Add(Arr[z2]); end; |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
BigBen4ever 
      
Beiträge: 98
|
Verfasst: Do 08.09.05 04:21
also es funktioniert soweit jetzt alles prima.
nur zwei sachen noch:
das mit dem abbruch bei esc funktioniert leider nicht, das wäre echt gut wenn mir da nochmal jemand n paar takte zu sagen kann.
und dann würde ich gerne wissen, ob es rein technisch gesehen möglichst ist, if-abfragen einzubauen , also sagen wir im memo stehen:
0 T
1 5
2 K
die schleife geht von z:=0 to 2 do
und jetzt möchte ich dass er z was für 0 steht beim ersten durchlauf nur ausführt, wenn im quelltext, den ich mir irgendwo anzeigen lasse, irgendein satz enthalten ist.. ...
z.b. sowas:
Levellabel.caption:=IntTostr(pos('Level 1 ',memo1.text));
if strtoint(Levellabel.caption) = 0 then
begin
...
end;
...bei z für 1 soll dann ein anderer satz enthalten sein und nur dann soll ausgeführt werden (das seite laden) wenn dieser enthalten ist, kann man das irgendwie hinkriegen, mir scheint ..als ob das rein technisch nicht möglich ist ...wenn immer die selbe abfrage wäre würde das wahrscheinlich gehen ..aber wenn sie verschieden is?
Hilfe 
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Do 08.09.05 07:57
Hallo,
BigBen4ever hat folgendes geschrieben: | | das mit dem abbruch bei esc funktioniert leider nicht, das wäre echt gut wenn mir da nochmal jemand n paar takte zu sagen kann. |
warum das nicht funktioniert?
Da ich nicht weiß wie Du die Abbruch-Routine in deinen Code eingebaut hast, ist es schwer dazu etwas zu sagen.
Ein paar Takte zum Code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| begin Application.ProcessMessages; if GetAsyncKeyState(VK_ESCAPE) <> 0 then begin showmessage('Obere Schleife beim '+IntToStr(z)+' Durchlauf abgebrochen'); break; end; |
Zu deiner anderen Frage,
BigBen4ever hat folgendes geschrieben: |
und dann würde ich gerne wissen, ob es rein technisch gesehen möglichst ist, if-abfragen einzubauen.... |
möglich ist das, aber neue Frage >> neuer Thread, wir sind hier eh schon zuweit vom Thema des Threads entfernt.
//Edit: und versuch es deutlicher zu beschreiben
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
BigBen4ever 
      
Beiträge: 98
|
Verfasst: Do 08.09.05 15:58
manno das funktioniert nicht..
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| procedure TForm1.Button1Click(Sender: TObject); var Flags, TargetFrameName, PostData, Headers : OleVariant; z : integer; begin
button1.visible:=false; for z := 0 to 199 do begin WebBrowser1.Tag := 1; while (WebBrowser1.ReadyState < READYSTATE_COMPLETE) or (WebBrowser1.Tag = 0) do Application.ProcessMessages; WebBrowser1.Tag := 0; mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); sendkeystotitle('Project1',memo1.Lines[z]); label1.caption:=inttostr(z);
while (WebBrowser1.ReadyState < READYSTATE_COMPLETE) or (WebBrowser1.Tag = 0) do Application.ProcessMessages; end; end; |
An welcher stelle muss ich das denn jez hier einbauen??
Ich habs ans ende gesetzt ..bei der zweiten while do schleife ..und da passiert reingarnix .
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Do 08.09.05 17:01
BigBen4ever hat folgendes geschrieben: | manno das funktioniert nicht..
An welcher stelle muss ich das denn jez hier einbauen??
Ich habs ans ende gesetzt ..bei der zweiten while do schleife ..und da passiert reingarnix . |
meinst Du mit das denn jez die Abbruch-Routine
und mit passiert reingarnix der Abbruch wird nicht ausgeführt,
oder was anderes?
Setz mal die Abbruch-Routine dahin:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| for z := 0 to 199 do begin Application.ProcessMessages; if GetAsyncKeyState(VK_ESCAPE) <> 0 then begin showmessage('Schleife beim '+IntToStr(z)+' Durchlauf abgebrochen'); break; end; WebBrowser1.Tag := 1; |
Sollte die Schleife dann nicht mit [Esc] abgebrochen werden, liegt es an deinem anderen Code.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
|