[Frage] hInstance <- nutzen und weiterverarbeiten
-
als noob stoße ich immer wieder auf probleme und finde selbst mit google und MSDN keine lösungen ... genau wie hier:
_tWinMain(HINSTANCE hInstance <- ich habe herausgefunden, dass hInstance der Prozessname des ausgeführen programmes ist bzw ein handle und liege damit hoffentlich richtig?? ich brauche nämlich den prozessnamen um ihn weiterzuverarbeiten. ich habe keinen plan wie ich das tue ...
-
Am Besten im richtigen Subforum fragen, in diesem Fall dem WinAPI-Forum

-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
hInstance ist nur eine vom System temporär vergebene Referenz auf das Programm. Für mehr gibt es spezielle WinApi-Funktionen, die das gewünschte liefern können. Du musst hier schon konkret sagen, was du zur Verarbeitung brauchst.
-
hInstance ist ein Zeiger auf das Abbild der EXE im Speicher (wird benötigt wenn z.B. Ressourcen geladen werden sollen). Mit GetModuleFileName() bekommst den Pfad und Namen des Aktuellen Prozesses.
-
uvxyz schrieb:
hInstance ist ein Zeiger auf das Abbild der EXE im Speicher (wird benötigt wenn z.B. Ressourcen geladen werden sollen). Mit GetModuleFileName() bekommst den Pfad und Namen des Aktuellen Prozesses.
da war ich auch schon, nur hat mir jemand gesagt, dass ich ja nur dateinamen brauche und das dann über den prozessnamen lösen könnte... ob das stimmt weiss ich nciht.
aber bei getmodulefilename müsste ich dann wohl eine filterung vornehmen um nur den dateinamen zu bekommen .... bin ich leider noch zu blöde zu

-
Den Dateinamen den GetModuleFileName() liefert sowas wie:
"c:\\programme\\meineanwendung\\bla.exe"
wenn Du nur "bla.exe" brauchst, ist PathFindFileName() dein Freund.
Falls Du nur "c:\\programme\\meineanwendung" brauchst hilft PathRemoveFileSpec()
-
ich habe schon zig beispiele durch und extra für diese funktion ein neues projekt erstellt, was auch nicht funktioniert.
// testanwendungen.cpp : Definiert den Einstiegspunkt für die Anwendung. // #include "stdafx.h" #include "testanwendungen.h" #include <windows.h> #include <iostream> #include "Shlwapi.h" #define MAX_LOADSTRING 100 // Globale Variablen: HINSTANCE hInst; // Aktuelle Instanz TCHAR szTitle[MAX_LOADSTRING]; // Titelleistentext TCHAR szWindowClass[MAX_LOADSTRING]; // Klassenname des Hauptfensters TCHAR szPathBuffer[MAX_PATH + 1]; // Vorwärtsdeklarationen der in diesem Codemodul enthaltenen Funktionen: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // Ermittelt den Dateinamen der gerade ausgeführten Executable: GetModuleFileName(NULL, szPathBuffer, sizeof(szPathBuffer) / sizeof(szPathBuffer[0])); MessageBox(NULL, szPathBuffer, TEXT("Pfad:"), MB_OK | MB_ICONINFORMATION); MessageBox(NULL, PathFindFileName(szPathBuffer), TEXT("Dateiname:"), MB_OK | MB_ICONINFORMATION); }hier der fehler der immer von PathFindFileName ausgelöst wird:
1>------ Erstellen gestartet: Projekt: testanwendungen, Konfiguration: Debug Win32 ------ 1>Kompilieren... 1>stdafx.cpp 1>Kompilieren... 1>testanwendungen.cpp 1>Ressourcen werden kompiliert... 1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1 1>Copyright (C) Microsoft Corporation. All rights reserved. 1>Ressourcen werden kompiliert... 1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1 1>Copyright (C) Microsoft Corporation. All rights reserved. 1>Verknüpfen... 1>testanwendungen.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__PathFindFileNameA@4" in Funktion "_WinMain@16". 1>C:\Users\Winkelmann\Documents\Visual Studio 2008\Projects\testanwendungen\Debug\testanwendungen.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise. 1>Das Buildprotokoll wurde unter "file://c:\Users\Winkelmann\Documents\Visual Studio 2008\Projects\testanwendungen\testanwendungen\Debug\BuildLog.htm" gespeichert. 1>testanwendungen - 2 Fehler, 0 Warnung(en) ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
-
Scroll mal nach ganz unten, da steht welche Libs für die Funktion benötigt werden:
http://msdn.microsoft.com/en-us/library/bb773589(VS.85).aspx
-
hmmm, der Header -> shlwapi.h ist ja gesetzt
und shlwapi.lib befindet sich im system32 verz. muss die in libs verz. von VC ?
-
Nein, der VC sollte standardmässig die Verzeichnisse der WinAPI .lib Dateien eingestellt haben. Du musst ihm nur mitteilen, dass er sie verwenden soll.
Das geht bei Visual Studio praktischerweise durch hinzufügen von:#pragma comment(lib, "shlwapi.lib")
-
au man war das ne schwere geburt ... danke ...