[Anfänger] Problem mit FindWindow in Forms



  • Hallo Leute,
    eigentlich schreibe oder registriere mich sehr selten auf einer Seite, nachdem ich jetzt aber Tagelang nichts gefunden habe was mir weiter hilft, frage ich dann doch mal.

    Es geht um folgendes..
    Ich habe ein Übungsprojekt, dieses ist ein kleines Fenster auf dem zurzeit nur ein Button und Label zu sehen sind. Die Grundprinzipien kenne ich soweit, da ich auch schon mit Java gearbeitet habe..

    Mein Problem ist nun, ich bekomme die Funktion FindWindow in einem cmd-Fenster zum laufen jedoch nicht wenn ich eine Form (Window) habe. Soweit ich gelesen habe, hängt das mit dem Zeichensatz zusammen.. jedoch entstehen dort neue Probleme, sobald ich diesen ändere.

    Wäre es vielleicht möglich, dass mir jemand einen paar Tipps gibt, damit ich an den richtigen Stellen suche!?

    HWND hwnd;
    hwnd = FindWindow(NULL, "Kurznotizen");
    if (!hwnd) {
       return 0;
    } else {
       return 1;
    }
    

    So in etwa sieht das aus..

    Meine Main-Datei sieht so aus..

    #include "MyForm.h"
    
    using namespace System;
    using namespace System::Windows::Forms;
    [STAThread]
    
    void main(array<String^>^ args) {
    
    	Application::EnableVisualStyles;
    	Application::SetCompatibleTextRenderingDefault;
    	MyFirstProject::MyForm form;
    	Application::Run(%form);
    }
    

    Habe diese Error-Meldung..
    error C2664: "HWND FindWindowW(LPCWSTR,LPCWSTR)" : Konvertierung von Argument 2 von "const char [6]" in "LPCWSTR" nicht möglich.

    Das Problem ist also bekannt, nur die Lösung ist nicht so einfach zu bekommen.



  • Hast vermutlich Unicode eingestellt, versuch mal so:
    hwnd = FindWindow(NULL, L"Kurznotizen");



  • Hi,
    richtig Unicode ist eingestellt..

    habe deine Lösung mal ausprobiert, dann haut er mir aber diese Fehler um die Ohren:

    1>ReadGameMemory.obj : error LNK2028: Nicht aufgel÷stes Token (0A000492) ""extern "C" struct HWND__ * __stdcall FindWindowW(wchar_t const *,wchar_t const *)" (?FindWindowW@@$$J18YGPAUHWND__@@PB_W0@Z)", auf das in Funktion ""public: int __thiscall ReadWindow::getValue(void)" (?getValue@ReadWindow@@$$FQAEHXZ)" verwiesen wird.
    1>ReadGameMemory.obj : error LNK2019: Verweis auf nicht aufgel÷stes externes Symbol ""extern "C" struct HWND__ * __stdcall FindWindowW(wchar_t const *,wchar_t const *)" (?FindWindowW@@$$J18YGPAUHWND__@@PB_W0@Z)" in Funktion ""public: int __thiscall ReadWindow::getValue(void)" (?getValue@ReadWindow@@$$FQAEHXZ)".
    


  • Ist vermutlich eine Methode innerhalb einer Klasse, da fehlt der "Vorspann", z.B.:

    private: System::Void my_function()
    {
    }
    

    bei dir steht innerhalb einer Klasse sowas:

    void my_function()
    {
    }
    


  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum WinAPI in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Das scheint nicht das Problem zu sein.
    Dies hier ist der komplette Code der Header-Datei.

    #pragma once
    
    class ReadWindow {
    public:
    	int ReadWindow::getValue();
    
    };
    

    und dies der komplette der cpp..

    #include <iostream>
    #include <windows.h>
    #include "ReadWindow.h"
    
    using namespace std;
    
    int ReadWindow::getValue() {
       HWND hwnd;
       hwnd = FindWindow(NULL, L"Kurznotiz");
       return 1;
    }
    

    Dann gibt es noch die Standard MyForm aber da habe ich noch nichts gemacht. Sobald ich das FindWindow auskommentiere oder eine einfache Rechnung usw. einbaue, funktioniert es ja auch, nur halt FindWindow nicht.



  • ok, und woher soll der Compiler wissen, dass "int ReadWindow::getValue()" zu der Klasse "ReadWindow" gehört? Durch das include, oder fehlt da nicht noch was? Überlege nochmal.



  • Hast du die "User32.lib" bei den Linkereinstellungen angegeben?

    Bei Linkerfehlern (LNK....) immer nachschauen, welche Lib man benötigt (in der MSDN unter Requirements/Library angegeben, s. FindWindow).

    PS:
    @deejey: was willst du uns sagen? Ist doch sonst alles in Ordnung (außer, daß "ReadWindow::" in der Klassendeklaration überflüssig ist).



  • Th69 schrieb:

    @deejey: was willst du uns sagen? ...

    sag' ich nicht



  • 🤡

    War Quatsch, hab mich verguckt, sry, dann weiß ich auch nicht woran das liegt



  • Okay, hab's nun über

    #pragma comment(lib,"user32.lib")
    

    eingebunden und es funktioniert.. unfassbar.

    Danke euch. 🙂


Log in to reply