Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Anwendungsdateiname mit einer .dll bzw .so herausfinden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.04.2010, 20:07 Uhr
~Hummtaro
Gast


Hallo Leute,
als erstes möchte ich mich schonmal entschuldigen, sollte meine Frage unberechtigt sein aber ich habe nichts brauchbares gefunden.

Ich würde gerne in C++ mit Hilfe einer Library (unter Windows .dll und unter Linux .so) den Dateinamen der Anwendung ausgeben von der sie geladen wurde.
Ich stehe mit meinem Kentnissen noch recht am Anfang, habe bis jetzt nur einige simple Win32 Consolen anwendungen erstellt, also eine reine Information welchen Befehl ich nutzen muss würde mir nicht viel bringen, wäre dennoch ein anhaltspunkt.

Zum Compilen nutze ich Visual C++ 2008

Würde mich über hilfe freuen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.04.2010, 20:34 Uhr
0xdeadbeef
Gott
(Operator)


Es wäre einfacher, das aus dem Hauptprogramm zu erledigen, da kriegst du das nämlich als Parameter an main mitgegeben. Zum Beispiel:

C++:
#include <algorithm>
#include <iostream>
#include <iterator>

int main(int argc, char *argv[]) {
  std::copy(argv,
            argv + argc,
            std::ostream_iterator<char*>(std::cout, "\n"));
}


...das führt etwa dazu:

C++:
$ ./arg-test arg1 arg2 arg3
./arg-test
arg1
arg2
arg3


Ansonsten kannst du dir eigentlich nur die Prozess-ID holen und das ganze unter Linux aus /proc/$PID/cmdline parsen oder unter Windows mit EnumProcesses den Prozess raussuchen und da nachkucken.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 17.04.2010 um 20:36 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.04.2010, 20:37 Uhr
~Hummtaro
Gast


danke für die antwort
aber soweit war ich auch schon, um es in der exe anzeigen zu lassen findet man ne menge möglichkeiten
allerdings bin ich an eine library gebunden da es für ein plugin für ein bereits vorhandenes programm benötige
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.04.2010, 23:03 Uhr
0xdeadbeef
Gott
(Operator)


Wenn ich die Dokumentation richtig lese (kann das im Moment nicht testen), sollte das unter Windows so gehen:

C++:
TCHAR filename[MAX_PATH];
GetModuleFileName(NULL, filename, MAX_PATH);


Unter Linux, wie gesagt, kannst du die gesamte Kommandozeile aus /proc/$PID/cmdline parsen. Beispielsweise so:

C++:
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <sstream>
#include <stdexcept>
#include <string>
#include <vector>

#include <unistd.h>

template<typename to_t, typename from_t> to_t convert(from_t const &x) {
  std::stringstream converter;
  to_t r;

  converter << x;
  converter >> r;

  if(!converter) {
    throw std::invalid_argument("Konvertierung fehlgeschlagen.");
  }

  return r;
}

int main() {
  std::string token;
  std::vector<std::string> args;

  std::ifstream in(("/proc/" + convert<std::string>(getpid()) + "/cmdline").c_str());

  while(std::getline(in, token, '\0')) {
    args.push_back(token);
  }

  std::copy(args.begin(),
            args.end(),
            std::ostream_iterator<std::string>(std::cout, "\n"));
}


Das natürlich unter der Voraussetzung, dass das Programm nicht in argv rumgeschrieben hat.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 17.04.2010 um 23:04 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.04.2010, 19:40 Uhr
~Hummtaro
Gast


danke für die schnelle antwort, konnte mich erst gestern damit befassen...
die windows funktion funktioniert schonmal, die linux funktion werd ich erst später testen können da ich momentan kein funktionierendes linux hier hab
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: