um mein Programm komplett nach Linux zu portieren brauche ich die equivalente für ein paar funktionen.
Funktionen bräuchte ich um folgende dinge rauszubekommen:
1) Resolution, also ScreenWidth und ScreenHeight (vom MainScreen) 2) Die Cursor Position 3) Cursor ausblenden, bzw. wieder anzeigen. 4) Username des eingeloggten Users 5) Rechnername 6) Distributions Name 7) Version der Distribution 8) Die Systemsprache, bzw die Sprache die der User für seine UI eingestellt hat.
Und dann noch ein paar funktionen um folgendes zu tun:
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
1-3) Wird wohl einiges an X11-gehampel, davon hab ich nur wenig Ahnung.
4)
Code:
#include <unistd.h> #include <sys/types.h>
uid_t getuid(void);
(aus: man 2 getuid) das dann in:
Code:
#include <sys/types.h> #include <pwd.h>
struct passwd *getpwnam(const char *name);
(aus: man 3 getpwnam) verwenden. Weiß aber nicht, ob das die feine englische Art ist und das gibt dir den Nutzernamen des nutzers, der dein Programm ausführt.
5)
Code:
#include <unistd.h>
int gethostname(char *name, size_t len);
(aus: man 2 gethostname)
6) 7) Glaube nicht, das das geht. Kernelversion bekommst du aber mit:
Code:
#include <sys/utsname.h>
int uname(struct utsname *buf);
(aus: man 2 uname)
8) Die bekommst du aus der Umgebungsvariable LC_ALL oder LANG. Es gibt noch andere LC_-Variablen für unterschiedliche Zwecke (z.B. Datums- oder Währungsformat).
9)
Code:
#include <stdio.h>
int rename(const char *oldpath, const char *newpath);
(aus: man 2 rename)
10) Konnte ich keine Kernelfunktion für finden, wirst du wohl durch echtes Kopieren implementieren müssen.
11)
Code:
#include <sys/stat.h> #include <sys/types.h>
int mkdir(const char *pathname, mode_t mode);
(aus: man 2 mkdir)
greetings //Edit: Fonts: /usr/share/fonts:~/.fonts:~/.local/share/fonts das sind die ersten drei die mir einfallen.
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
zu 10) Wenn Performance egal ist, z.B. weil es eh nur einige wenige Dateien sind, kannst du auch einen System-Call machen und einfach das Konsolen-Programm "cp" aufrufen. Das geht über die C-Funktion "system": http://www.cplusplus.com/reference/clib ... ib/system/
zu 6,7) Bei mir gibt es eine Datei bzw. einen Symlink "/etc/system-release" wo letztlich "Fedora release 13 (Goddard)" drin steht. ich weiß aber nicht ob das auch bei Nicht-Fedora/Redhat Distributionen der Fall ist.
# Try to find all sorts of different files that say what the release is. if [ -e /etc/fedora-release ]; then release=`cat /etc/fedora-release`; elif [ -e /etc/redhat-release ]; then release=`cat /etc/redhat-release`; elif [ -e /etc/system-release ]; then release=`cat /etc/system-release`; elif [ -e /etc/debian_version ]; then release="Debian-based; version $(cat /etc/debian_version)"; elif ls /etc/*release 2>/dev/null; then if grep -q DISTRIB_DESCRIPTION /etc/*release; then release=$(grep DISTRIB_DESCRIPTION /etc/*release | head -n1); else release=$(cat /etc/*release | head -n1); fi fi
_________________ Yeah!
Zuletzt geändert von Coolcat am So Nov 07, 2010 20:23, insgesamt 1-mal geändert.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Nein, ist Fedora-spezifisch. Das Ubuntu, das ich in reichweite habe (10.04 LTS) hat sowas nicht.
greetings
//Edit: debian_version enthält auf obigem System:
Zitat:
squeeze/sid
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Hab das meiste jetzt schon eingebaut. Distribution hab ich aus dem struct welches ich von uname() bekomme rausgefunden, wobei ich da nicht weiß ob das immer bei jeder distribution passt..
Ansonsten fehlt jetzt noch:
1) Resolution, also ScreenWidth und ScreenHeight (vom MainScreen) 2) Die Cursor Position 3) Cursor ausblenden, bzw. wieder anzeigen.
und zusätzlich noch eine sache die ich vergessen hatte:
Ich will die maus koordinaten aber auch haben ohne das ich ein Fenster erstelle. Also sowas wie "GetCursor()" unter Windows. Und wie ich den cursor ausblende sehe ich leider in dem code nicht
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Cursor setzen und auslesen hab ich bei Karmarama schon raus genommen gehabt, da musste ich in mein X-Dream Code noch aus Freepascal zeiten gucken und da hab ich folgende Funktion verwendet. http://tronche.com/gui/x/xlib/input/XWarpPointer.html
edit: Zum ein Cursor aus zu blenden muss man eine neue Cursor Grafik erstellen. char data=0; XColor dummy; Pixmap blank=XCreateBitmapFromData(dsp, m_Handle, &data, 1, 1); m_InvisibleCursor=XCreatePixmapCursor(dsp, blank, blank, &dummy, &dummy, 0, 0); XFreePixmap(dsp, blank); Dann kann man zwischen der normalen und der eigenen switchen. if (m_CursorVisible) XUndefineCursor(dsp,m_Handle); else XDefineCursor(dsp,m_Handle,m_InvisibleCursor); XFlush(dsp);
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
eine letzte sache bräuchte ich noch, in dem X11-Event KeyPress, bzw. KeyRelease.. kann ich da irgendwie rausbekommen welches Zeichen gedrückt wurde?
Also nicht welche Taste, sondern welches Zeichen (je nach Tastaturlayout und Shift-Taste etc) dabei rauskommt?
Am idealsten wäre einfach direkt ein Unicode zeichen. Unter Windows gibt es dafür neben WM_KEYDOWN und WM_KEYUP noch die WM_CHAR welche einem das UnicodeZeichen mitteilt.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
In Rahmen einer suche, für mein Process monitoring Modul, hab ich bei Linux raus bekommen wo die Daten gelagert werden und dabei auch noch einige weitere wichtige Infos gefunden, so z.B. die Version des Kernels, welche unter /proc/version zu finden ist. In /proc befinden sich alle systeminformationen wie z.B. batteriezustand, processe, cpuauslastung, zoneinfo und so weiter. ProcPS bietet eine Bibliothek libproc an, welche viele der Daten lesen kann. HTOP und einige andere haben eigene loader geschrieben. Das, wie ich finde, Problem an der Sache ist, dass so ziemlich alles Klartext ist und recht aufwendig ist zu parsen :\
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.