RunProgram / WriteProgramString

Anfängerfragen zum Programmieren mit PureBasic.
rollovanoyten
Beiträge: 6
Registriert: 13.12.2014 10:51
Wohnort: Oyten

RunProgram / WriteProgramString

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: RunProgram / WriteProgramString

Beitrag 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)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
rollovanoyten
Beiträge: 6
Registriert: 13.12.2014 10:51
Wohnort: Oyten

Re: RunProgram / WriteProgramString

Beitrag 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!
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: RunProgram / WriteProgramString

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
rollovanoyten
Beiträge: 6
Registriert: 13.12.2014 10:51
Wohnort: Oyten

Re: RunProgram / WriteProgramString

Beitrag 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.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: RunProgram / WriteProgramString

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
rollovanoyten
Beiträge: 6
Registriert: 13.12.2014 10:51
Wohnort: Oyten

Re: RunProgram / WriteProgramString

Beitrag 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!
Antworten