Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Jul 14, 2025 17:48

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Nov 07, 2010 18:09 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

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:

9) Datei verschieben
10) Datei kopieren
11) Verzeichnis erstellen

Und als letztes, welches sind die standard verzeichnisse für Fonts?

Danke~
Aya


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Nov 07, 2010 19:28 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Nov 07, 2010 20:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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.

Edit: Hab gerade das hier gefunden, hilft vielleicht:
Code:
# 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! :mrgreen:


Zuletzt geändert von Coolcat am So Nov 07, 2010 20:23, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Nov 07, 2010 20:19 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Nov 07, 2010 21:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
1) http://hudson.radonframework.org/job/Ra ... pp/*view*/

2) siehe 3. im message handling (motion)

3) http://hudson.radonframework.org/job/Ra ... pp/*view*/

8 ) Wird alles von locale.h gemacht, also passende PO files suchen und über gettext dann den passenden Text der eingestellten Sprache zu holen.

9) http://hudson.radonframework.org/job/Ra ... pp/*view*/
11) mkdir

http://www.yolinux.com/TUTORIALS/LinuxListOfFonts.html

http://publib.boulder.ibm.com/infocente ... /rtuna.htm

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Nov 07, 2010 21:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Danke für die bisherigen antworten! :)

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:

12) Die Zeitzone. Also den offset zu GMT.

Danke~
Aya


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Nov 07, 2010 22:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
TAK2004 hat geschrieben:

Danke, das schaut gut aus - probier ich gleich aus.

TAK2004 hat geschrieben:
2) siehe 3. im message handling (motion)

3) http://hudson.radonframework.org/job/Ra ... pp/*view*/

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 :(

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Nov 08, 2010 11:57 
Offline
DGL Member
Benutzeravatar

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

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Nov 11, 2010 02:40 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

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.

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Nov 11, 2010 11:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Zitat:
kann ich da irgendwie rausbekommen welches Zeichen gedrückt wurde?

Ich mach das mit "XLookupString".

Zwei hoffentlich hilfreiche Code-Schnipsel:

Code:
 KeyPress: If Assigned(OnKeyDown)
Then With AXEvent.XKey Do Begin

XLookupString(@AXEvent.XKey,NIL,0,@SystemKey,NIL);
LocalKey:= InternTranslateKey(SystemKey);
OnKeyDown(Window,LocalKey,PreviousKey);
PreviousKey:= LocalKey;

End;

Die Funktion "InternTranslateKey" ist von mir und sieht ungefähr so aus:
Code:
Function InternTranslateKey(AKey: TuInt32): TInt32;
Begin
Case AKey Of

XK_BACKSPACE: Result:= FK_BACK;
XK_TAB: Result:= FK_TAB;
XK_CLEAR: Result:= FK_CLEAR;
XK_RETURN: Result:= FK_RETURN;
.
.
.
Else Result:= TInt32(AKey);

End; //Of Case


Unter "Else" werden die Zeichen zurückgegeben; sollte eigentlich der Unicode des Zeichens enthalten sein.

Viele Grüße
Traude


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Nov 15, 2010 17:54 
Offline
DGL Member
Benutzeravatar

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

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]