Autor Beitrag
Jörk Finkel
Hält's aus hier
Beiträge: 1



BeitragVerfasst: So 14.07.02 20:52 
Aloha zusammen.

Nachdem ich dieses Thema nun schon in einigen Foren gesteckt habe, mir aber bisher keiner helfen konnte, will ich es hier versuchen!

Ich hab einen WebSpace Anbieter wo ich meine HP hochladen will. Dieser erlaubt jedoch immer nur ein File zu uppen. Da meine HP aber einige Files umfasst und ich gerne Code, will ich dies automatisieren.

Auf dieser Seite gibt es eine EditBox vom Type=File (Name=file) wo mann entweder durch Klicken des Buttons DURCHSUCHEN ein File angeben kann, oder es manuel in die TextBox eingibt.

Mir will es aber pertu nicht gelingen über Delphi diesen FileNamen zu übergeben.

Folgendes hab ich versucht:Webbrowser1.OleObject.Document.Forms.item(0).elements.item('file').Value:='c:\config.sys';

Hier Passiert rein garnichts! Auch keine Fehlermeldung von Delphi. Ich weiss das ich die TextBox korrekt angesprochen habe. Da diese aber keine VALUE-Eigenschaft hat wird auch wohl nichts eingetragen.

Was anderes:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button3Click(Sender: TObject);
var
i: Integer;
EncodedStr: string;
Header: OleVariant;
Post: OleVariant;
begin
EncodedStr := 'file=c:\autoexec.bat';
The post must be an array. But without null terminator (-1)
Post := VarArrayCreate([0, Length(EncodedStr) - 1], varByte);
Put Post in array
for I := 1 to Length(EncodedStr) do
Post[I - 1] := Ord(EncodedStr[I]);
Header := 'Content-Type: application/x-www-form-urlencoded' + #10#13;
WebBrowser1.Navigate('http://de.groups.yahoo.com/group/ognd-m1cd-0/sfupld/ognd-m1cd-0?',
EmptyParam,
EmptyParam, Post, Header);


Hier wird ein Formular an den Server geschickt mit einer URL wie sie eventuell auch von der besagten HTML vom Browser an den Server geschickt wird. Aber hier gibt es nur eine Fehlermeldung vom Server das das File nicht grösser als 5 MB sein darf. Das die Autoexec.bat diese Grösse nicht erreicht muss ich wohl nicht schreiben ;)

Mir selbst Fällt nichts mehr ein wie ich dem Server klar machen kann wie der Filename lautet.

Vieleicht hat ja einer von Euch eine Lösung.
Hier die beschriebene Problem-HTML:
mitglied.lycos.de/otheriddlero/Problem.htm

Code-Tags eingefügt. Marc
Titel lt. Richtlinien geändert. Marc
Chatfix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1583
Erhaltene Danke: 10

Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
BeitragVerfasst: Di 16.07.02 15:46 
ich hätte mir mal nen ordentlichen titel gekauft..
Zum Thema selbst fällt mir spontan nix ein.. ich gugg mal was ich tun kann

_________________
Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
subTiTan
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 05.01.03 13:14 
Titel: Schon mit WinApi versucht?
Versuch es mal über die Winapi, ist zwar nicht besonders dynamisch, aber wenn es nur um diese eine Seite geht, sollte das ja egal sein.
Ich habe vor längerem mal ein ähnliches Problem gehabt, nur musste ich die Felder einer DatenbankAnwendung ausfüllen und nicht im Iexplorer.
Ich stelle mir das so vor:
Shellexecute( iexplore: DeineURL)
- GetHandle (iexplorer)
- sendmessage(Tabulator,HandleIexplorer) bis du das Feld findest
-sendmessage(Pfad,HandleIexplorer) //Pfad eingeben
-sendmessage(Enter,Handleiexplorer) //Enter schicken

Das ist der Code zum meiner WinApi-Applikation, du findest noch mehr info zur Winapi in der MSSDKoder im Forum.

ausblenden volle Höhe 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:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
function GetFocusEx(): HWND;
var  FgWnd: HWND;  FgTid: DWORD;  Tid: DWORD;
begin
Result := 0;
FgWnd := GetForegroundWindow();
FgTid := GetWindowThreadProcessId(FgWnd, nil);
Tid := GetCurrentThreadId();
if (FgTid = Tid) then
Result := GetFocus()
else
if AttachThreadInput(Tid, FgTid, True)
then
begin
Result := GetFocus();
AttachThreadInput(Tid, FgTid, False);
end;
end;

function send1key(Thread:HWND;Key1:Byte):boolean;
begin
SetForeGroundWindow(Thread);
keybd_event(Key1,MapVirtualKey(Key1,0),0,0);
keybd_event(Key1,MapVirtualKey(Key1,0),KEYEVENTF_KEYUP,0);
end;


function SendStr2Handle(Thread:HWND;Text:String):boolean;
begin
SendMessage(Thread,WM_SETTEXT,0,lParam(PChar(Text)));
result:=true;
end;

function send2keys(Thread:HWND;Key1:Byte;Key2:Byte):boolean;
var
vk1,vk2:UINT;
begin
SetForeGroundWindow(Thread);
vk1:=MapVirtualKey(Key1,0);
vk2:=MapvirtualKey(Key2,0);
keybd_event(Key1,vk1,0,0);
keybd_event(Key2,vk2,0,0);
keybd_event(Key1,vk1,KEYEVENTF_KEYUP,0);
keybd_event(Key2,vk2,KEYEVENTF_KEYUP,0);
result:=true;
end;


Mit GetfocusEx bekommst du den Handle des Aktiven Fensters, es gibt auch einen anderen weg an den Handle zu kommen, über den Namen des Prozesses, aber das habe ich vergessen, schau mal im Forum nach.
Oder noch besser: Shellexecute liefert den Handle, wenn ich mich recht erinnere.

Good Luck
subTiTan

_________________
Das Leben ist wie ein Klobrille: Da macht man was durch!