Autor Beitrag
BigBen4ever
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 ? :shock:
BigBen4ever Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: 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:

ausblenden volle Höhe Delphi-Quelltext
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

//Der Button befindet sich auf dem Webbrowser und wird dann unsichtbar gemacht, damit der simmulierte Klick auf dem Webbrowser ist und somit den Fokus auf dem Webbrowser übergibt

button1.Visible:=false;
for z := 0 to 4 do
 begin
 WebBrowser1.Tag := 1;//damt es überhaupt losläuft
      //voriger Durchlauf ok?
    while (WebBrowser1.ReadyState < READYSTATE_COMPLETE) or (WebBrowser1.Tag = 0do
      Application.ProcessMessages;
    WebBrowser1.Tag := 0;
    mouse_event(MOUSEEVENTF_RIGHTDOWN, 0000);
    mouse_event(MOUSEEVENTF_RIGHTUP, 0000);
    sendkeystotitle('Project1',memo1.Lines[z]);

   //
    //Laden fertig?
    while (WebBrowser1.ReadyState < READYSTATE_COMPLETE) or (WebBrowser1.Tag = 0do
      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 user profile iconTino: Code- durch Delphi-Tags ersetzt.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: So 04.09.05 11:33 
benutze doch einfach mal die suche :!:

willst du sowas ?
ausblenden 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, 00);  
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: So 04.09.05 12:02 
Hallo,
user profile iconBigBen4ever 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: So 04.09.05 13:06 
user profile iconBigBen4ever 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.

user profile iconBigBen4ever 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var z,z2 : Integer;
    Arr : array [0..3of 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: So 04.09.05 14:43 
ja gerade mit dieser abbruchmöglichkeit hab ich meine schwierigkeiten
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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:
ausblenden 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..3of 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 08.09.05 07:57 
Hallo,
user profile iconBigBen4ever 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
begin
 //damit die Botschaftswarteschlange von Windows durchlaufen werden kann
 //ohne Application.ProcessMessages würde [Esc] 
 //erst nach Ende der Schleife ausgewertet werden
 Application.ProcessMessages;  
 if GetAsyncKeyState(VK_ESCAPE) <> 0 then //Taste [Esc] gedrückt?  
   begin                                  //Meldung ausgeben
   showmessage('Obere Schleife beim '+IntToStr(z)+' Durchlauf abgebrochen');  
   break;                                 //Schleife abbrechen  
 end;


Zu deiner anderen Frage,
user profile iconBigBen4ever 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Do 08.09.05 15:58 
manno das funktioniert nicht..

ausblenden volle Höhe Delphi-Quelltext
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


//Der Button befindet sich auf dem Webbrowser und wird dann unsichtbar gemacht, damit der simmulierte Klick auf dem Webbrowser ist und somit den Fokus auf dem Webbrowser übergibt


button1.visible:=false;
for z := 0 to 199 do
 begin
 WebBrowser1.Tag := 1;//damt es überhaupt losläuft
      //voriger Durchlauf ok?
    while (WebBrowser1.ReadyState < READYSTATE_COMPLETE) or (WebBrowser1.Tag = 0do
      Application.ProcessMessages;
    WebBrowser1.Tag := 0;
    mouse_event(MOUSEEVENTF_RIGHTDOWN, 0000);
    mouse_event(MOUSEEVENTF_RIGHTUP, 0000);
    mouse_event(MOUSEEVENTF_RIGHTDOWN, 0000);
    mouse_event(MOUSEEVENTF_RIGHTUP, 0000);
    mouse_event(MOUSEEVENTF_RIGHTDOWN, 0000);
    mouse_event(MOUSEEVENTF_RIGHTUP, 0000);
    sendkeystotitle('Project1',memo1.Lines[z]);
    label1.caption:=inttostr(z);

   //
    //Laden fertig?
    while (WebBrowser1.ReadyState < READYSTATE_COMPLETE) or (WebBrowser1.Tag = 0do
      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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 08.09.05 17:01 
user profile iconBigBen4ever 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:
ausblenden 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 //Taste [Esc] gedrückt?
      begin                                  //Meldung ausgeben
      showmessage('Schleife beim '+IntToStr(z)+' Durchlauf abgebrochen');
      break;                                 //Schleife abbrechen
      end;
    WebBrowser1.Tag := 1;//damt es überhaupt losläuft
//...


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 )