MessageBox



  • Hallo zusammen,
    ich habe ein Probelm beim erzeugen einer MessageBox.
    folgender Code:

    #pragma once
    
    namespace Hook_Form {
    	#include "stdafx.h"
    	#include <windows.h>
        #include "..\Hook Dll\Hook.h"
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    
    	/// <summary>
    	/// Summary for Form1
    	///
    	/// WARNING: If you change the name of this class, you will need to change the
    	///          'Resource File Name' property for the managed resource compiler tool
    	///          associated with all .resx files this class depends on.  Otherwise,
    	///          the designers will not be able to interact properly with localized
    	///          resources associated with this form.
    	/// </summary>
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: Add the constructor code here
    			//
    		}
    
    	protected:
    		/// <summary>
    		/// Clean up any resources being used.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::Button^  install_button;
    	private: System::Windows::Forms::Button^  uninstall_button;
    	protected: 
    
    	protected: 
    
    	private:
    		/// <summary>
    		/// Required designer variable.
    		/// </summary>
    		System::ComponentModel::Container ^components;
    
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Required method for Designer support - do not modify
    		/// the contents of this method with the code editor.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->install_button = (gcnew System::Windows::Forms::Button());
    			this->uninstall_button = (gcnew System::Windows::Forms::Button());
    			this->SuspendLayout();
    			// 
    			// install_button
    			// 
    			this->install_button->Location = System::Drawing::Point(342, 92);
    			this->install_button->Name = L"install_button";
    			this->install_button->Size = System::Drawing::Size(75, 23);
    			this->install_button->TabIndex = 0;
    			this->install_button->Text = L"Install";
    			this->install_button->UseVisualStyleBackColor = true;
    			this->install_button->Click += gcnew System::EventHandler(this, &Form1::install_button_Click);
    			// 
    			// uninstall_button
    			// 
    			this->uninstall_button->Location = System::Drawing::Point(341, 154);
    			this->uninstall_button->Name = L"uninstall_button";
    			this->uninstall_button->Size = System::Drawing::Size(75, 23);
    			this->uninstall_button->TabIndex = 1;
    			this->uninstall_button->Text = L"UnInstall";
    			this->uninstall_button->UseVisualStyleBackColor = true;
    			this->uninstall_button->Click += gcnew System::EventHandler(this, &Form1::uninstall_button_Click);
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(807, 661);
    			this->Controls->Add(this->uninstall_button);
    			this->Controls->Add(this->install_button);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			this->ResumeLayout(false);
    
    		}
    #pragma endregion
    	private: System::Void install_button_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 MessageBox("Hallo");
    			 InstallHooks();
    		 }
    	private: System::Void uninstall_button_Click(System::Object^  sender, System::EventArgs^  e) 
    		{
    			UnInstallHooks();
    		 }
    	};
    }
    

    ergibt folgenden Fehler:

    Error	1	error C2660: 'Hook_Form::MessageBox' : function does not take 1 arguments	c:\documents and settings\mw\my documents\visual studio 2005\projects\maus hook\hook_form\Form1.h	108
    

    Kann mir jemand helfen?



  • MessageBox::Show("Test", "Überschrift", MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
    


  • Super, danke!
    Kannst DU mir auch sagen, warum ich in anderen Anwendungen die MB so aufrufen kann, wie ich es probiert habe?
    Was muss ich machen, außer
    #include <windows.h>???



  • Wollte das ganz nun in einer DLL machen:

    #define MAKE_DLL
    
    // INCLUDES //////////////////////////////////////////////////////////////
    
    #include <windows.h>
    #include <fstream>
    
    #include "Hook.h"
    
    // DEFINES ///////////////////////////////////////////////////////////////
    
    // CONSTANTS /////////////////////////////////////////////////////////////
    
    // GLOBALS ///////////////////////////////////////////////////////////////
    
    #pragma data_seg ("shared")
    //int iNumInstances = 0;
    int iKeystrokes[255] = {0};
    #pragma data_seg ()
    #pragma comment(linker,"/SECTION:shared,RWS")
    
    // PROTOTYPES ////////////////////////////////////////////////////////////
    
    LRESULT CALLBACK MouseHookProc(int, WPARAM, LPARAM);
    void OutputKeystrokes();
    
    // VARIABLES /////////////////////////////////////////////////////////////
    
    HINSTANCE	hDllInstance;
    HHOOK		hMouseHook;
    
    // METHODS ///////////////////////////////////////////////////////////////
    
    // FUNCTIONS /////////////////////////////////////////////////////////////
    
    int APIENTRY DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
    {
    	hDllInstance = hInstance;
    
    	return TRUE;
    }
    
    BOOL CALLBACK InstallHooks(void)
    {
    	MessageBox::Show("Test");
    	hMouseHook = SetWindowsHookEx(WH_MOUSE,
                                         MouseHookProc,
                                         hDllInstance,
                                         NULL
                                         );
    
        if (hMouseHook == NULL)
        {
            return FALSE;
        }
    
        return TRUE;
    }
    
    BOOL CALLBACK UnInstallHooks(void)
    {
        OutputKeystrokes();
    
        return UnhookWindowsHookEx(hMouseHook);
    }
    
    LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam,LPARAM lParam)
    {
    	if(nCode < 0)
    		return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
    
        // Verhindern das eine Nachricht mehrmals verarbeitet wird.
    	if(nCode == HC_ACTION)
        {
            // Prüfen ob die Taste nicht gedrückt gehalten wurde.
            // Wenn dies der Fall ist, ist das 31. Bit _nicht_ gesetzt.
            if (!(lParam&0x40000000))
            {
                // VK-Code als Index in ein Array, dessen Eintrag
                // pro Druck um eins erhöht wird.
                iKeystrokes[wParam]++;
            }
        }
    
    	return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
    }
    
    void OutputKeystrokes()
    {
        std::ofstream out("c:\\mousehook.txt");
    
        for (int i='A'; i<='Z'; i++)
        {
            out << (char)i << " = " << iKeystrokes[i] << "\n";
        }
    }
    

    Fehler:

    Error	1	error C2653: 'MessageBoxA' : is not a class or namespace name	c:\documents and settings\mw\my documents\visual studio 2005\projects\maus hook\hook dll\hook.cpp	56
    Error	2	error C3861: 'Show': identifier not found	c:\documents and settings\michael worobcuk\my documents\visual studio 2005\projects\maus hook\hook dll\hook.cpp	56
    

    Währe für nochmalige Hilfe dankbar...



  • Wenn Du <windows.h> einbindest, dann wird hier ein "define" für "MessageBox" eingebunden ,was dann diverse Verwirrungen auslösen kann.
    Deshalb vorher (also *nach* dem #include <windows.h>) ein

    #undef MessageBox
    

    machen, damit es wieder eindeutig wird...



  • Hi,
    nun also:

    #define MAKE_DLL
    
    // INCLUDES //////////////////////////////////////////////////////////////
    
    #include <windows.h>
    #undef MessageBox;
    #include <fstream>
    
    #include "Hook.h"
    
    // DEFINES ///////////////////////////////////////////////////////////////
    
    // CONSTANTS /////////////////////////////////////////////////////////////
    
    // GLOBALS ///////////////////////////////////////////////////////////////
    
    #pragma data_seg ("shared")
    
    // iNumInstances = 0;
    HHOOK hMouseHook =0;
    int iKeystrokes[255] = {0};
    #pragma data_seg ()
    #pragma comment(linker,"/SECTION:shared,RWS")
    
    // PROTOTYPES ////////////////////////////////////////////////////////////
    
    LRESULT CALLBACK MouseHookProc(int, WPARAM, LPARAM);
    void OutputKeystrokes();
    
    // VARIABLES /////////////////////////////////////////////////////////////
    
    HINSTANCE	hDllInstance;
    
    // METHODS ///////////////////////////////////////////////////////////////
    
    // FUNCTIONS /////////////////////////////////////////////////////////////
    
    int APIENTRY DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
    {
    	hDllInstance = hInstance;
    
    	return TRUE;
    }
    
    BOOL CALLBACK InstallHooks(void)
    {
    	MessageBox::("Test");
    	if (hMouseHook  ==0) hMouseHook = SetWindowsHookEx(WH_MOUSE, MouseHookProc, hDllInstance, NULL);
    
        if (hMouseHook == NULL)
        {
            return FALSE;
        }
    
        return TRUE;
    }
    
    BOOL CALLBACK UnInstallHooks(void)
    {
        OutputKeystrokes();
    
        return UnhookWindowsHookEx(hMouseHook);
    }
    
    LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam,LPARAM lParam)
    {
    	std::ofstream out("c:\\mousehook.txt");
    	if(nCode < 0) return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
    
    //	out << (char)lParam-> << "\n";
    
    	return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
    }
    
    void OutputKeystrokes()
    {
        /*
    
        for (int i='A'; i<='Z'; i++)
        {
            out << (char)i << " = " << iKeystrokes[i] << "\n";
        }*/
    }
    

    Das ergibt:

    Error	2	error C3861: 'MessageBox': identifier not found	c:\documents and settings\mw\my documents\visual studio 2005\projects\maus hook\hook dll\hook.cpp	59
    


  • Was willst Du jetzt eigentlich machen?
    Windows-Forms oder native Win32 ???

    In Deinem ersten Beispiel war es noch

    MessageBox::Show
    

    und jetzt plötzlich nicht mehr...

    Also, ganz simple Regel:
    Windows-Forms (also C++/CLI), dann

    #undef MessageBox
    

    Win32-API:
    (kein undef)



  • Auch bei einem

    MessageBox::Show("Test");
    

    kommt:

    Error	2	error C2653: 'MessageBox' : is not a class or namespace name	c:\documents and settings\mw\my documents\visual studio 2005\projects\maus hook\hook dll\hook.cpp	59
    Error	3	error C3861: 'Show': identifier not found	c:\documents and settings\mw\my documents\visual studio 2005\projects\maus hook\hook dll\hook.cpp	59
    

    auch bei einem

    #undef MessageBox
    

    Ich checks leider nicht... 😕


Log in to reply