Seite 1 von 1
RunProgram / WriteProgramString
Verfasst: 21.09.2015 19:04
von rollovanoyten
Hallo PB-Gemeinde,
mit RunProgram rufe ich ein Programm auf und übergebe ihm einen DateiNamen.
Das aufgerufene Programm startet und lädt die Datei ordnungsgemäß.
Ein (konstruiertes) Beispiel:
Wordpad.exe soll die Daten in Fettschrift darstellen und die Datei speichern.
Das sind Aufgaben, die im Menü dieses Programms zur Auswahl angeboten werden.
Würde ich Wordpad selbst steuern, müsste ich eingeben:
[Ctl] + A . . alles markieren
[Ctl] + B . . Fettschrift
[Alt] + D . . Menü Datei
S . . . . . . . Datei speichern
[Alt] + D . . Menü Datei
B . . . . . . . Beenden
Kann ich diese Befehlssequenz vom PB-Programm an Wordpad.exe übergeben?
Und wenn es geht, wie muss ich solche Dinge wie [Alt] und [Ctl] codieren?
Ich hab' es schon mit WriteProgramString... versucht, es hat leider nicht funktioniert.
Mache ich etwas falsch oder geht es gar nicht?
Wer ist so nett, einem Neuling auf die Sprünge zu helfen?
Schon mal vielen Dank vorab!
rollovanoyten
Re: RunProgram / WriteProgramString
Verfasst: 21.09.2015 19:09
von RSBasic
Entweder führst du Tastenkombinationen aus (keybd_event_()) oder du löst Menü-Events aus. (
http://www.rsbasic.de/aktualisierung/wi ... 3%B6sen.pb )
Wenn es aber darum geht, einen RTF-Text (Text mit Formatierungen) zu erstellen, warum erstellst du nicht selber deinen RTF-Text? Weitere Informationen:
https://de.wikipedia.org/wiki/Rich_Text_Format (siehe Beispiel)
Re: RunProgram / WriteProgramString
Verfasst: 23.09.2015 17:38
von rollovanoyten
Danke für die Antwort. Ich hab sie ehrfurchtsvoll gelesen, aber ich komme damit nicht weiter.
Das liegt sicher an meinem bescheidenen Wissensstand.
Zu den vorgeschlagenen Möglichkeiten 'keybd_event' sowie zu Menü-Events
habe ich in der Hilfe und im Manual nichts gefunden.
Und das Beispiel klappt gut bei Notepad, nicht aber bei Wordpad.
Natürlich kann ich meinen RTF-Text auch per Hand erstellen, aber ich nutze die Wordpad-Formatierung,
um große Verzeichnisse per Programm zu formatieren. Das schafft ein Programm schneller.
Es würde mir sehr helfen, wenn mir ein freundlicher Kollege die Codierung
für die - oben - in Großschrift genannten Befehle aufschreiben könnte.
Wenn ich wenigstens wüsste, mit welchen - im Manual oder in der Hilfe auffindbaren -
Commands ich das Problem anpacken kann, könnte ich mich ja weiter voranwühlen.
Für jeden Hinweis bin ich dankbar!
Re: RunProgram / WriteProgramString
Verfasst: 23.09.2015 19:01
von RSBasic
rollovanoyten hat geschrieben:Zu den vorgeschlagenen Möglichkeiten 'keybd_event' sowie zu Menü-Events habe ich in der Hilfe und im Manual nichts gefunden.
Das wirst du auch nie in der Hilfe finden können, weil das keine PB-Funktion ist, sondern eine von Windows bereitgestellte WinAPI-Funktion.
Die Dokumentation dieser Funktionen findest du auf der Microsoft-MSDN-Seite. Beispielsweise für keybd_event_():
https://msdn.microsoft.com/de-de/librar ... 85%29.aspx
rollovanoyten hat geschrieben:Und das Beispiel klappt gut bei Notepad, nicht aber bei Wordpad.
Der Beispielcode funktioniert natürlich nur bei Notepad, weil bei WordPad die Menüeinträge andere Eventnummer haben. Diese musst du erst herausfinden.
rollovanoyten hat geschrieben:Natürlich kann ich meinen RTF-Text auch per Hand erstellen, aber ich nutze die Wordpad-Formatierung,
um große Verzeichnisse per Programm zu formatieren. Das schafft ein Programm schneller.
Wenn du deine eigene Funktion zum Erstellen eines formatierten RTF-Textes erstellst, dann hast du ja auch ein Programm, welches genauso schnell ist wie WordPad.
Lieber eine eigene und unabhängige Anwendung programmieren. Sonst kann es passieren, dass deine externe Methode irgendwann nicht mehr funktioniert, beispielsweise bei einer neuen Version von WordPad.
Re: RunProgram / WriteProgramString
Verfasst: 23.09.2015 21:17
von rollovanoyten
Das ist das Problem des Anfängers: Er weiß nicht weiter und muss fragen.
Und das ist das Problem des Spezialisten: Er versteht oft nicht, wie man sowas fragen kann.
Ich bedanke mich für die Vorlesung, aber ich bin nicht einen Schritt weiter.
Dabei möchte ich doch nur wissen, ob es mit PureBasic möglich ist,
ein anderes Programm Menü-Befehle ausführen zu lassen,
und wenn es möglich ist, wie man das machen muss.
Noch hab' ich die Hoffnung nicht aufgegeben, dass es jemanden gibt,
der eine Antwort auf meine Fragen weiß und sie mir mitteilt.
Hinweis von NicTheQuick: Nutze bitte nicht [ size], wenn es nicht nötig ist.
Re: RunProgram / WriteProgramString
Verfasst: 24.09.2015 09:53
von RSBasic
rollovanoyten hat geschrieben:Dabei möchte ich doch nur wissen, ob es mit PureBasic möglich ist,
ein anderes Programm Menü-Befehle ausführen zu lassen,
und wenn es möglich ist, wie man das machen muss.
Ja, es ist selbstverständlich möglich, aber meiner Meinung nach keine sinnvolle Lösung, um einen Text fett zu formatieren.
Ich habe für dich was kleines gebastelt und das war überhaupt nicht schwer. Du hättest einfach den Beispielcode im Wikipedia-Artikel anschauen müssen.
Code: Alles auswählen
EnableExplicit
Define RTFFileLength
Define *RTFMemoryID
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(1, 0, 0, WindowWidth(0), WindowHeight(0)-40, 0)
ButtonGadget(2, WindowWidth(0)-210, WindowHeight(0)-30, 200, 20, "Text fett formatieren", 0)
;1. Unformatierter Text
AddGadgetItem(1, -1, "Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte.")
AddGadgetItem(1, -1, "Abgeschieden wohnen sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans.")
AddGadgetItem(1, -1, "Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien.")
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 2
;2. Den speichern wir in einem RTF-Format mit einer Fett-Formatierung ab.
If CreateFile(1, GetEnvironmentVariable("temp") + "\DeinRTFText.rtf")
WriteString(1, "{\rtf1\b\i0" + ReplaceString(GetGadgetText(1), Chr(13), "\line") + "\b0}")
CloseFile(1)
EndIf
;3. Um zu sehen, ob es auch funktioniert hat, laden wir einfach den gespeicherten, formatierten Text.
If ReadFile(1, GetEnvironmentVariable("temp") + "\DeinRTFText.rtf")
RTFFileLength = Lof(1)
*RTFMemoryID = AllocateMemory(RTFFileLength)
If *RTFMemoryID
ReadData(1, *RTFMemoryID, RTFFileLength)
SetGadgetText(1, PeekS(*RTFMemoryID))
FreeMemory(*RTFMemoryID)
EndIf
CloseFile(1)
EndIf
;4. Du kannst die Datei auch mit WordPad öffnen, um zu sehen, ob die Fett-Formatierung übernommen wurde.
RunProgram("wordpad.exe", GetEnvironmentVariable("temp") + "\DeinRTFText.rtf", "")
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Wenn du weitere RTF-Formatierungen vornehmen möchtest, kannst du auch die Include-Datei von ts-soft verwenden:
http://www.purebasic.fr/german/viewtopi ... =8&t=24582
Re: RunProgram / WriteProgramString
Verfasst: 24.09.2015 19:26
von rollovanoyten
Das ist ein hilfreiches Beispiel, damit komme ich ein gutes Stück weiter.
Nochmals vielen Dank für die Mühe und die Geduld!