Problem mit Sendkeys() in Word/Excel

Anfängerfragen zum Programmieren mit PureBasic.
Rebon
Beiträge: 263
Registriert: 20.05.2009 19:13

Beitrag von Rebon »

Kaeru Gaman hat geschrieben:also, ich versteh auch nicht so ganz, warum du unbedingt den Weg über eine simulierte Tastatureingabe gehen willst, das ist echt nicht sonderlich unterhaltsam.
welches Interface man auch immer ansprechen will, es gibt einen "Grundsätzlich Richtigen" Weg, der meistens nichts mit Tastatursimulation zu tun hat.
Sorry Kaeru, ich weiß das simulierte Tastatureingaben und das
einbeziehen müssen von anderen Programmen,
sehr schlechtes programmieren ist.
Ich habe versucht die Demo_retrieve text from Word doc using GetObject.pb mit COMate zum laufen zu bringen, kam aber
die Fehlermeldung vom Compiler:
Line 17: Structure not Found: i
bezieht sich auf diese Zeile:

Code: Alles auswählen

Declare.i COMate_CreateObject(progID$, hWnd = 0, blnInitCOM = #True)
Aber da ich momentan nur PB4.00 im besitz habe,
was ich natürlich ändern werde, versuche ich
es später nochmal.
Btw Wo kann ich mir das aktuelle PB den bestellen?
Ich hatte irgendwo gelesen, da gibt es 2 Zulieferer?
Kaeru Gaman hat geschrieben: ...bzw. auch per emal, d.h. im shop läuft ein interpreter, der automatisierte emails interpretiert,
genau diese emails kann man auch client-seitig erzeugen
Mein Auftraggeber wollte nichts automatisiertes,
hab ich ganz am Anfang des Auftrags abgeklärt. :wink:
Kaeru Gaman hat geschrieben: oder verwechsel ich da jetzt was? willst du was ganz anderes?
die infos worum es eigentlich geht sind etwas sehr verstreut...
Ich versuche es mal in schritten darzustellen:
A = Macht das Programm Automatisch
M = Muß noch vom Anwender manuell durchgeführt werden.
1. (A)Laden der Shopwebseite in das Webgadget
und das Loginpasswort-bzw.den Benutzernamen eingeben(M).
2. Wenn eine neue Bestellung angezeigt wird,
laden der neuen Bestell-Seite in das Webgadget(M).
3. Herr, Frau, Firma mit Hilfe von 3 OptionGadget's auswählen(M).
(Ist für die Anrede, Sehr geehrte(r) Herr, Frau, Firma)
4. Verrechnungsart durch ein ComboBoxGadget auswählen,
welches zuvor mit einem CheckBoxGadget aktiviert(für Rechnung)
oder deaktiviert(für Lieferschein) werden kann(M).
5. Nummer der Bestellung, wird in einer Datei gespeichert und wird
am Anfang des Programms in ein SpinGadget geladen(A)
und beim beenden des Programms gespeichert(A).
6. ButtonGadget mit dem Namen Write in Word drücken(M)
und STRG + Y für das starten von Word und hineinschreiben(A).
Kaeru Gaman hat geschrieben: öh... also normal würde man doch die infos per PHP sich holen, vergiß das webgadget, und per COMate ins Excel rüberschieben....
das holen scheint ja wohl eh nich das problem zu sein...
Kein Problem, das mache ich so:

Code: Alles auswählen

URLDownloadToFile_(0,Verkntext$,"C:\AutoWrite\Dummy\Test.html",0,0)
ReadFile(0, "C:\AutoWrite\Dummy\Test.html")
*MemoryID = AllocateMemory(500)
  
While Ende = 0
      
FileSeek(0, laenge )
ReadData(0, *MemoryID, Anzahl)
      
;DIE BESTELNUMMER WIRD GESUCHT:
      
If PeekS(*MemoryID) = "<b>Bestellung " 
   Ende = 1
   Break
EndIf
      
laenge + 1
      
Wend

FreeMemory(*MemoryID-1) 
*MemoryID2 = AllocateMemory(500)
laenge+14
Anzahl = 1
      
While Ende2 = 0
      
FileSeek(0, laenge )
ReadData(0, *MemoryID2, Anzahl)
      
Select PeekS(*MemoryID2)
      
   Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" 
   BestellNr$ + PeekS(*MemoryID2)
   
   Case "<"
   Ende2 = 1
   Break
EndSelect
      
laenge + 1
      
Wend
      
FreeMemory(*MemoryID2-1)
;usw...Ja ich weiß, ganz schlecht und wiederverwendungswert = 0
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Eigentlich sollte der Webshop das alles alleine machen, einschließlich
Rechnungsschreibung usw.
Aber selbst wenn ich keinen Zugriff zur DB habe, werde ich die Daten
trotzdem in eine DB eintragen und nicht in einen Brief :mrgreen:
Notfalls genügt vielleicht eine Textdatenbank, auch die kann man mit Word
Dokumenten verknüpfen und SendKey ist da auch nicht nötig.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Rebon
Beiträge: 263
Registriert: 20.05.2009 19:13

Beitrag von Rebon »

ts-soft hat geschrieben:Eigentlich sollte der Webshop das alles alleine machen, einschließlich
Rechnungsschreibung usw.
Und wie erkennt der Webshop, ob es sich um ein Herr, Frau
oder Firma handelt?
Ich brauch nämlich diese Zeile in meiner Rechnung/Lieferschein:
Sehr geehrte(r) Herr, Frau, Firma + den Namen.
Und die Nummer der Bestellung dürfte auch ein Problem sein,
aufgrund von Storno's(wurde mir so berichtet).
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

> Und wie erkennt der Webshop, ob es sich um ein Herr, Frau oder Firma handelt?
Die Frage verstehe ich nun garnicht. Die Webseite enthält doch eine
Combobox, wo der Käufer auswählt, die Auswahl wird doch wohl mit PHP
ausgewertet und in die Datenbank eingetragen, egal wo die sich befindet.
Word wird dann anhand des Datenbankfeldes die richtige Anrede auswählen,
wird doch z.B. auch so mit jedem Serienbrief gemacht.

Deine Vorgehnsweise ist mir einfach nicht klar. Vorlage mit Word erstellen
und entsprechende Felder mit irgendeiner Art von DB verknüpfen, egal ob
Textbausteine, Anrede, Adresse oder Artikel.

Es gibts keinen Grund irgendwelche Texte an Word zu senden, die sind
entweder in der Vorlage definiert oder eben mit der DB verknüpft.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Rebon
Beiträge: 263
Registriert: 20.05.2009 19:13

Beitrag von Rebon »

ts-soft hat geschrieben:> Und wie erkennt der Webshop, ob es sich um ein Herr, Frau oder Firma handelt?
Die Frage verstehe ich nun garnicht. Die Webseite enthält doch eine
Combobox, wo der Käufer auswählt, die Auswahl wird doch wohl mit PHP
ausgewertet und in die Datenbank eingetragen, egal wo die sich befindet.
Als mir das Bestellen vorgeführt wurde, hab ich keine
Combobox gesehen.
Dann werde ich sicherheitshalber nochmal nachfragen,
danke für die Info! :allright:
Aber was ist wenn der Kunde per E-Mail storniert,
muß dann die Nummer der Bestellung manuell
abgeändert werden, oder wird beim Löschen in
der Datenbank automatisch die Nummern angepaßt?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Und wie erkennt der Webshop, ob es sich um ein Herr, Frau oder Firma handelt?

äh.. momendema..
es is doch egal, ob du mit sendkey arbeitest oder mit was auch immer...
es muss in dem Kundendatensatz ein Feld vorhanden sein, das die Anrede notiert.
also entweder ein 1,2,3 für Herr,Frau,Firma, oder in Klarschrift...
aber automatisieren wird man das eh nicht.

zumal, ich sag es nochmal, das einzige problem ist doch die DatenÜBETRAGUNG!
etwas anderes leisten die simulierten tastendrücke ja schließlich auch nicht.


> kam aber die Fehlermeldung vom Compiler: Line 17: Structure not Found: i

ja klar, Integer kennt der ja auch nicht, das ist "nur" ne Long in dem Fall.

> Btw Wo kann ich mir das aktuelle PB den bestellen?

ja bei André oder auf purebasic.com....

> Mein Auftraggeber wollte nichts automatisiertes

also, jetzt raff ich ganix mehr... :shock:

tastatureingaben zu simuleren, ist schließlich eine Automatisierung,
ansonsten nimmt man nen CSU-Wähler, kettet ihn vor die Tastatur und stellt sich mit der Peitsche dahinter... das wär manuell.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ich verstehe Deine Fragen nicht wirklich :mrgreen:
Andere Möglichkeit wäre, wie Falko schon sagte, eine Excel-Tabelle mit
COMate füllen. Diese wird dann mit dem Word-Dokument verknüpft, wie ein
Datenbank, macht ja auch keinen Unterschied, bis auf die Einschränkungen
von Excel.

An Word brauchste nichts senden, das nimmt dann die Daten aus der
Tabelle oder eben DB, wie Du es auch machst, nur SendKey braucht man
nicht.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Rebon
Beiträge: 263
Registriert: 20.05.2009 19:13

Beitrag von Rebon »

War auf der Website, gibt definitiv keine Combobox.
Kaeru Gaman hat geschrieben: > Mein Auftraggeber wollte nichts automatisiertes
also, jetzt raff ich ganix mehr... Shocked
tastatureingaben zu simuleren, ist schließlich eine Automatisierung...
Ich meinte Automatisch aus der Datenbank einen
Lieferschein bzw. Rechnung zu erstellen.
Kaeru Gaman hat geschrieben: ansonsten nimmt man nen CSU-Wähler, kettet ihn vor die Tastatur und stellt sich mit der Peitsche dahinter... das wär manuell.
Das ist DIE Lösung schlechthin! :mrgreen: :allright:
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Irgendwie verstehe ich auch Bahnhof.

Du schriebst, du lädst eine Datei mit
URLDownloadToFile_(0,Verkntext$,"C:\AutoWrite\Dummy\Test.html",0,0)
Was steht da denn in dieser Datei?
Alle Datenbankeinträge oder wie?

Für das direkte Auslesen der Datenbank brauchst du entweder einen
Account um mittels KundenID und SQL-Funktionen die Werte auszulesen.
Dann ginge alles sehr einfach.

Oder aber eine PHP-Datei, die Du speziell kennst, welche durch Dein
Programm irgendwie die Kundendaten abfragt, die du nicht kennst, dann
eine Text oder html erstellt, die Du dann mit

URLDownloadToFile_(0,Verkntext$,"C:\AutoWrite\Dummy\Test.html",0,0)

herunter lädst. Es wäre schön, wenn man genauer den Vorgang wüsste um
hier nicht raten zu müssen.

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Rebon
Beiträge: 263
Registriert: 20.05.2009 19:13

Beitrag von Rebon »

Kaeru Gaman hat geschrieben: ja klar, Integer kennt der ja auch nicht, das ist "nur" ne Long in dem Fall.
Ist das hier:

Code: Alles auswählen

Protected *error._COMateThreadErrors, i.i, sink.IDispatch
So richtig?(statt i.i i.l):

Code: Alles auswählen

Protected *error._COMateThreadErrors, i.l, sink.IDispatch
Falko hat geschrieben: Es wäre schön, wenn man genauer den Vorgang wüsste um
hier nicht raten zu müssen.
Tut mir leid Falko!
Nein, ich habe bis jetzt keinerlei Information
über die Datenbank, hab aber eine E-Mail
geschickt, mit der Frage ob ich Zugang
zu dieser bekomme.
Aber es gibt 100% eine Datenbank.
Die Datei von URLDownloadToFile_ ist
eine PHP-Datei die nur Daten einer einzigen
Bestellung enthält.
Antworten