Webobjekt mit Dateiamen speichern - wie?

Anfängerfragen zum Programmieren mit PureBasic.
Fanpost
Beiträge: 97
Registriert: 27.01.2013 14:43

Webobjekt mit Dateiamen speichern - wie?

Beitrag von Fanpost »

Ich speicher mein HTML-Formular wie folgt ab:

Code: Alles auswählen

Procedure FormularSpeichern()
   Protected WebObject.IWebBrowser2
   WebObject = GetWindowLong_(GadgetID(#Adresse), #GWL_USERDATA)
   WebObject\ExecWB(#OLECMDID_SAVEAS, #OLECMDEXECOPT_DontPROMPTUSER, 0, 0)
 EndProcedure  
 
Mit dieser Prozedur wird mit dem Dateinamen "blank" gespeichert.
Wie kann ich einen Dateinamen hinzufügen?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von Kiffi »

Code: Alles auswählen

#VT_BSTR = 8

Procedure FormularSpeichern(Filename.s)
  
  Protected WebObject.IWebBrowser2
  
  WebObject = GetWindowLong_(GadgetID(#Adresse), #GWL_USERDATA)
  
  Protected filename_Unicode
  
  ; convert to unicode
  filename_Unicode = AllocateMemory(Len(Filename) * 2 + 2)
  MultiByteToWideChar_(#CP_ACP, 0, @Filename, -1, filename_Unicode, Len(Filename) * 2 + 2)                
  
  Protected filename_BSTR
  
  ; create bstr
  filename_BSTR = SysAllocString_(filename_Unicode)
  
  ; fill variant
  Protected VariantIn.VARIANT
  VariantIn\vt = #VT_BSTR
  VariantIn\bstrVal = filename_BSTR
  
  If WebObject\ExecWB(#OLECMDID_SAVEAS, #OLECMDEXECOPT_DONTPROMPTUSER, @VariantIn, 0) = #S_OK
    MessageRequester("","Saved sucessfully")
  Else
    MessageRequester("","could not save file")
  EndIf
  
  FreeMemory(filename_Unicode)
  SysFreeString_(filename_BSTR)   
  
EndProcedure
(habe ich Dir am 23. Juni per Mail gesendet)

Grüße ... Peter
a²+b²=mc²
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

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von ts-soft »

Kiffi hat geschrieben:

Code: Alles auswählen

  WebObject = GetWindowLong_(GadgetID(#Adresse), #GWL_USERDATA)
Besser mit GetWindowLongPtr_

Code: Alles auswählen

WebObject = GetWindowLongPtr_(GadgetID(#Adresse), #GWL_USERDATA)
Zuletzt geändert von ts-soft am 24.11.2015 16:04, insgesamt 1-mal geändert.
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
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von NicTheQuick »

Diese zwei Zeilen würde ich aber ändern von

Code: Alles auswählen

filename_Unicode = AllocateMemory(Len(Filename) * 2 + 2)
  MultiByteToWideChar_(#CP_ACP, 0, @Filename, -1, filename_Unicode, Len(Filename) * 2 + 2)       
in

Code: Alles auswählen

CompilerIf #PB_Compiler_Unicode
	filename_Unicode = @Filename
CompilerElse
	filename_Unicode = AllocateMemory((Len(Filename) + 1) * SizeOf(Unicode))
	PokeS(filename_Unicode, Filename, -1, #PB_Unicode)
CompilerEndIf
Dafür muss am Ende aber auch noch das hier hin:

Code: Alles auswählen

CompilerIf Not #PB_Compiler_Unicode
	FreeMemory(filename_Unicode)
CompilerEndIf
@ts-soft: :?:
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von RSBasic »

@NicTheQuick
64 Bit-Kompatibilität.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von NicTheQuick »

RSBasic hat geschrieben:64 Bit-Kompatibilität.
Was möchtest du damit sagen?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von RSBasic »

NicTheQuick hat geschrieben:@ts-soft: :?:
Gegenfrage: Was wolltest du damit sagen? Ich dachte, du wüsstest nicht, warum ts-soft gesagt hat, dass GetWindowLongPtr_() besser sei, als GetWindowLong_().
Oder was hast du damit gemeint?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von NicTheQuick »

Sein Post war vorher noch kaputt formatiert und unvollständig, da hab ich nicht kapiert, was er sagen wollte. Jetzt hat er es ja wieder editiert.
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

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von ts-soft »

Noch etwas kürzer :wink:

Code: Alles auswählen

filename_Unicode = AllocateMemory(StringByteLength(Filename.s, #PB_Unicode) + 2)
PokeS(filename_Unicode, Filename, -1, #PB_Unicode)

;
;
FreeMemory(filename_Unicode)
PS: Beim ersten Posting von mir fehlte noch ein [ /code ]. Das sah einfach nur schrecklich aus :lol:
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
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von NicTheQuick »

Ich vermeide das Kopieren lieber, wenn es nicht notwendig ist. :)
Antworten