Ergebnis 1 bis 8 von 8

Thema: Einfaches [?] Programm schreiben

  1. #1

    Einfaches [?] Programm schreiben

    Ich möchte ein Programm schreiben, das in einem normalen Windows Fenster ist und indem man nur Daten angibt (User, Passwort) und das Programm lädt im Hintergrund die Daten mit einem Array hoch (bzw. ruft dyndns.org/userkjöajfdöjföajföuser_kjöf_passwort auf).

    Mit welcher Programmiersprache sollte so ein Programm geschrieben werden? C++? Oder ein leichtere?

    Dennis

    Kenntnisse: PHP/HTML (Früher: Game.ini Einträge modifiziert)

  2. #2
    Ein Eingabefenster könnte man mit der WinAPI erstellen. Dann bietet diese API auch zusätzlich noch Funktionen zum Verbinden mit dem Internet und zum Hochladen/ Runterladen von Dateien. Bei dem Erstellen der Fenster könnt ich dir unter die Arme greifen, was das Internet-Problem betrifft, damit hab ich mich noch nicht beschäftigt.
    Ach ja, die WinAPI kann man in viele der bekannten Hochsprachen einbinden, etwa in Delphi, PureBasic, C/C++. Es steht dir also frei, eine davon zu wählen. Für C/C++ könnt ich da einen Beispielcode zum Anfertigen eines Fensters bereitstellen.
    Bei Delphi oder Ähnlichem kann man ja diesen Form-Designer nehmen und damit Fenster erstellen. Dann braucht es dazu nicht extra die WinAPI.
    Aber eines sollte natürlich klar sein, dass ist trotzdem keine Sache von wenigen Stunden, wenn du dich mit der WinAPI befassen willst. Die ist da etwas komplexer und vergleichbar mit der Handhabung einer Hochsprache, nur, dass sie eben eine andere Sprache als Grundlage zum Programmstart benötigt. (Wie gesagt, etwa C/C++, Delphi oder PureBasic usw.)

    Allerdings, wenn du PHP beherrschst, wieso machst du das nicht damit? Dann musst du dein Programm zwar online haben und dieses somit wie ne Website aufrufen, aber das sollte mit Vorkenntnissen doch wesentlich leichter fallen als sich in eine Sprache einzuarbeiten nur um ein Fenster zu erstellen.

  3. #3
    Zitat Zitat von Ynnus
    Ein Eingabefenster könnte man mit der WinAPI erstellen. Dann bietet diese API auch zusätzlich noch Funktionen zum Verbinden mit dem Internet und zum Hochladen/ Runterladen von Dateien. Bei dem Erstellen der Fenster könnt ich dir unter die Arme greifen, was das Internet-Problem betrifft, damit hab ich mich noch nicht beschäftigt.
    Ach ja, die WinAPI kann man in viele der bekannten Hochsprachen einbinden, etwa in Delphi, PureBasic, C/C++. Es steht dir also frei, eine davon zu wählen. Für C/C++ könnt ich da einen Beispielcode zum Anfertigen eines Fensters bereitstellen.
    Bei Delphi oder Ähnlichem kann man ja diesen Form-Designer nehmen und damit Fenster erstellen. Dann braucht es dazu nicht extra die WinAPI.
    Aber eines sollte natürlich klar sein, dass ist trotzdem keine Sache von wenigen Stunden, wenn du dich mit der WinAPI befassen willst. Die ist da etwas komplexer und vergleichbar mit der Handhabung einer Hochsprache, nur, dass sie eben eine andere Sprache als Grundlage zum Programmstart benötigt. (Wie gesagt, etwa C/C++, Delphi oder PureBasic usw.)

    Allerdings, wenn du PHP beherrschst, wieso machst du das nicht damit? Dann musst du dein Programm zwar online haben und dieses somit wie ne Website aufrufen, aber das sollte mit Vorkenntnissen doch wesentlich leichter fallen als sich in eine Sprache einzuarbeiten nur um ein Fenster zu erstellen.
    Als PHP wäre das ein Klacks (auch wenn ich dafür evtl. nachschlagen müsste, da ich schon 1/4 Jahr nichts mehr groß damit gemacht habe), aber ich möchte einfach mal ein "richtiges" Programm schreiben, auf welches ich später mir ein eigenes Multi Programm aufbauen möchte... Irgendwann mal.

    Du erwähnst PureBasic, geht auch DarkBasic oder evtl. sogar 3impact? Ich dachte die wären nur Starter Kits für 3D Software (Primär).

    Dennis

  4. #4
    Also die anderen Basic-Varianten kenne ich nicht. Bei PureBasic kann ich dir aus Erfahrung sagen, dass es eine Menge Sachen für eine GUI bereitstellt (also das, was du machen willst), aber nicht alles, wenn man es mit der WinAPI vergleicht. (Die WinAPI ist von Microsoft direkt für Windows entwickelt und damit kann man somit fast alles was Windows betrifft verändern, bearbeiten, darstellen... Der Umfang ist riesig, weshalb auch PB nicht alles was die WinAPI an Buttons und Fenstersystemen bereithält, eingebaut hat).
    Allerdings kann man in PureBasic fast alle WinAPI Befehle direkt im Quellcode einbauen und somit diese Komplexität erreichen, wenn man Ahnung davon hat.
    Im Bereich 3D ist PureBasic zur Zeit recht schwach. Es verwendet die (meines Wissens) OpenSource Engine Ogre, allerdings nicht in der letzten erschienenen Version sondern ein paar davor. Also die mögliche Grafik ist nicht vergleichbar aktuellen Titeln oder Konkurenzdingen wie Blitz3D oder so.
    Daher ist PB eher auf 2D Grafik (auch nach belieben mittels Direct X und GUI (also die Fensteranwendungen) ausgelegt. Natürlich auch Consolenanwendungen. )

    Wenn man jetzt den Umfang an Funktionen mit C/C++ vergleicht, sind es wesentlich mehr, einfach weil GUI Befehle und Grafikdinge enthalten sind. C/C++ bietet ja keinerlei Befehle die die Console überschreitet. Also nichts mit Grafik, Fenstern oder sonstwas.
    Dennoch würde ich, aus heutiger Sicht, wenn man es wirklich lernen will und den nötigen Aufwand nicht scheut, zu C/C++ greifen. Denn damit kann man auch recht leicht Dinge wie die WinAPI oder OpenGL oder Direct X einbinden und dann auf deren Grafik-Funktionen/ GUI-Funktionen zurückgreifen.

    Wie gesagt, zu DarkBasic und dem ganzen anderen Basic-Zeug kann ich nichts sagen, damit hab ich mich wenig befasst.

    Wenn du mal ein Beispielcode für ein Fenster haben willst, welches mittels C und WinAPI erstellt wurde, kann ich dir eins mal eben zusammenschustern. Ich schau mal was sich da finden lässt, dauert einen kleinen Moment...

  5. #5
    So schaut das jetzt aus:
    Das Erstellen von Buttons geht jetzt aber leichter und ist nicht ganz so komplex, dies ist praktisch nun das Grundgerüst welches man immer braucht. Demnach kann man es leicht geändert übernehmen und dort dann weiterbasteln.


    Code:
    #include <windows.h>
    
    LRESULT CALLBACK wndproc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        MSG msg;
        HWND hwnd;
        WNDCLASS wndclass;
    
        wndclass.style = 0;
        wndclass.lpfnWndProc = wndproc;
        wndclass.cbClsExtra = 0;
        wndclass.cbWndExtra = 0;
        wndclass.hInstance = hInstance;
        wndclass.hIcon = LoadIcon(NULL, IDI_INFORMATION);
        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH) COLOR_MENU + 3;
        wndclass.lpszMenuName = NULL;
        wndclass.lpszClassName = TEXT("Klassenname");
    
        if (!RegisterClass(&wndclass))
        {
            MessageBox(NULL, "Klasse konnte nicht registriert werden", "Error!", MB_ICONERROR);
            return 0;
        }
    
        hwnd = CreateWindowEx(  0,
                                TEXT("Klassenname"),
                                "Testfenster",
                                WS_OVERLAPPEDWINDOW,
                                100, 100, 500, 500,
                                0,
                                0,
                                hInstance,
                                0);
    
        ShowWindow(hwnd, SW_SHOWNORMAL);
        UpdateWindow(hwnd);
    
        while (GetMessage(&msg,NULL,0,0))	//Is There A Message Waiting?
    	{
        	TranslateMessage(&msg);				//Translate The Message
    		DispatchMessage(&msg);				//Dispatch The Message
        }
        return 0;
    }
    
    
    LRESULT CALLBACK wndproc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch(message)
        {
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;        
        }
        
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    Das Gegenstück in PureBasic wäre dann dieses:


    Code:
    OpenWindow(0, 100, 100, 500, 500, #PB_WINDOW_SYSTEMMENU, "Testfenster")
    
    Repeat
        EventID = WaitWindowEvent()
    
        Select EventID
            Case #PB_EVENT_CLOSEWINDOW
                End
        EndSelect
    ForEver
    Wie man sieht, wesentlich weniger Code, wesentlich einfacher. Aber man lernt weniger und hat nicht die absolute volle Kontrolle wie man sie mittels WinAPI und C/C++ hätte.

    Nachtrag: Ein Vorteil von C++ ist die Möglichkeit, in OOP zu Programmieren. Das bietet PureBasic nicht. Damit kann man sich wunderbar Methoden und Klassen erstellen welche dann auch mit nur einer Zeile ein Fenster erstellen. Bei mir sieht das derzeit so aus:

    Kleiner Ausschnitt:
    Code:
        flags = WS_CHILD |WS_VISIBLE | WS_CLIPCHILDREN;
        glwindow.create(hinstance, msg, WndProc, screen.pos_x, screen.pos_y, screen.size_x, screen.size_y, "Gl-Window", mainwindow.get_hwnd(), WS_EX_CLIENTEDGE, flags);
    
        if (!glwindow.create_gl_rc(screen.client_size_x, screen.client_size_y, GL_PROJECTION) || !InitGL())       //If unable to create gl-context or initialize values
        {
            mainwindow.destroy();       //Destroy and Unregister Mainwindow
        }
    Mit der ersten Zeile werden Styles für das Fenster gewählt, also das Aussehen bestimmt. Mit Zeile 2 wird das Fenster erstellt und mit Zeile 3 wird diesem Fenster ein OpenGL-RenderContext hinzugefügt wodurch man nun mit OpenGL darauf zeichnen kann.
    Die eigentlichen Zeilen die dorthinter stecken sind natürlich weitaus länger als das hier, aber es lässt sich alles in einzelne Zeilen packen, OOP sei Dank.

    BTW. Ich hab mit der WinAPI Programmierung im Dezember 2004 angefangen, um genau zu sein am 30. November 2004. Es ist also durchaus möglich, sich ein einigermaßen ordentliches Wissen in der WinAPI anzueignen innerhalb eines halben Jahres. Dann kann man schon in der Lage sein, mehrere Fenster, Buttons, Menüs, Toolbars und solche Sachen zu erstellen. Wobei ich nicht durchgehend mich mit der WinAPI befasst habe sondern auch mal eine Runde 2D-Spielchen mit OpenGL eingeschoben habe.

    Geändert von Ynnus (04.06.2005 um 15:04 Uhr)

  6. #6
    Hm... wenn es wirklich nur für Windows und auch nur für so einfache Sachen sein soll, wäre Visual Basic 6 (Bitte nicht .NET, ich hasse es) eine gute Wahl. Um die Anzeige von Fenstern muss man sich gar nicht kümmern und Internetprogrammierung ist auch nicht schwer. Allerdings gibt es zwei Nachteile:

    1. Zu VB gibt es keinen Freeware Compiler
    2. Wenn du komplexere Sachen machst, muss jeder, der das Programm benutzen will die benötigten Runtimes haben. So was einfaches, wie du willst geht aber auch ohne, wenn man statt dem Winsock Control die CSocket Klasse (www.vbip.com) verwendet.

  7. #7
    Noch ein Nachteil: Bei solchen Sprachen wo man sich seine Fenster mittels IDE "zusammenklickt" hat es natürlich keinerlei Lerneffekt was das Verständnis für Fenster-Programme betrifft. Was macht das Ding intern? Wie wird ein Fenster erstellt und wie verfährt man damit? Das alles macht dieses Form-Zeug für dich und du lernst dabei lediglich, wie man die Componenten auf dem Fenster verteilt damit es schön aussieht.
    Vorteil mag sicher sein, dass man sich nicht groß damit befassen muss und es eben nur zusammenklicken braucht. Das macht es sicher alles einfacher, zu Beachten wäre der oben genannte Nachteil.

  8. #8
    Jo, da stimm ich dir zu. VB ist sicher auf dem Gebiet nicht das Allheilmittel, besonders, weil es auch mit Objektreferenzen etwas umständlich ist, aber wenn man mal nur schnell ne Kleinigkeit als Hilfsmittel braucht, isses ganz nett. Einfach so "Wegwerfanwendungen", die man eigentlich nur mal schnell braucht, um ne Routinearbeit zu erleichtern und ähnliches.

    Ach ja, um mal auf dein Problem speziell einzugehen, eine Möglichkeit wäre folgende etwa:

    Code:
    Option Explicit
    Public Socket As CSocket
    Private nArray() As Integer
    
    Private Sub cmdOk_Click()
        Dim Request As String
        Dim i As Integer
        Set Socket = New CSocket
        
        Socket.RemoteHost = "deineseite.de"
        Socket.RemotePort = 80
        Socket.Connect
        
        While Socket.State <> sckConnected
            DoEvents
        Wend
        
        Request = "GET ""/ordner/seite.php?username=" & txtUsername.Text
        Request = Request & "&password=" & txtPassword.Text
        Request = Request & """ HTTP/1.1"
        Socket.SendData Request & vbNewLine
        
        Request = "POST """
        For i = LBound(nArray) To UBound(nArray)
            Request = Request & "wert" & i & "=" & nArray(i) & "&"
        Next
        Request = Request & """"
        
        Socket.SendData Request & vbNewLine
        Socket.SendData vbNewLine
        Socket.CloseSocket
    End Sub
    An Steuerelementen brauchst du:
    Textbox txtUsername
    Textbox txtPassword
    CommandButton cmdOk

    ACHTUNG! DAS DING VERSENDET SO NOCH NIX, WEIL DEM ARRAY NIX ZUGEWIESEN IST!!!

    Ich hab das nicht getestet, sollte aber gehen.

    EDIT:

    Ich habs jetzt doch mal getestet und der Request scheint fehlerhaft zu sein. Liegt daran, dass ich mich noch nicht großartig mit dem HTTP Protokoll beschäftigt hab. Da musst du mal bei Google schauen. Ansonsten gibts in VB noch ein Webbrowser Control, dass so Sachen übernimmt, aber das hat halt nicht jeder.

    Geändert von DFYX (04.06.2005 um 16:19 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •