1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • Checkbox deaktivieren aber nicht "ausgrauen"

    • BugFix
    • 21. März 2011 um 07:54

    Alternativ kannst du Checkboxen nur in der Größe der Box selbst ohne Text erstellen und deaktivieren. Den Text schreibst du dann in ein Label daneben.

  • Interaktion mit Notepad++

    • BugFix
    • 21. März 2011 um 00:10

    Ich habe jetzt den Aufruf der WinMain in die InitFunktion eingefügt:

    Code
    void pluginInit(HANDLE hModule)
    {
        WinMain(GetModuleHandle(0), NULL, "CmdLine", SW_HIDE);
    }

    Kann ich Parameter 3 (szCmdLine) mit dem erfundenen Wert belegen? Oder was muß dort sonst hin?
    Im Moment zeigt das noch keine Wirkung.
    Auch wenn ich SW_SHOW übergebe und zusätzlich OnTop setze (SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE ); ist nix zu sehen. :S

  • TCP-Chat

    • BugFix
    • 20. März 2011 um 21:14

    Wie wär es, wenn du mal die Suchfunktion nutzt?
    Es liegen fertige Chatprogramme vor, inkl. Smileys und Userlist.

  • Daten in ein .jar verpackten ordner schieber

    • BugFix
    • 20. März 2011 um 20:31
    Zitat von Mattthias

    Packe die Dateien in eine .zip und benenne diese in .jar um


    Wie ich schon geschrieben habe, ist das Umbenennen bei den meisten Packern gar nicht erforderlich. Eine *.jar wird ald zip erkannt und auch so behandelt - völlig problemlos.

  • Font bestimmen

    • BugFix
    • 20. März 2011 um 15:32

    Schau mal hier rein.

  • Interaktion mit Notepad++

    • BugFix
    • 20. März 2011 um 12:27

    So, Dank progandys kräftiger Aufklärungsarbeit :thumbup: habe ich nun das PlugIn so fertigstellen können, dass es von Notepad++ akzeptiert wird.
    Aber... die gewünschte Funktionalität ist noch nicht da.
    Die Fenstererstellung/-aktivierung scheint das Problem zu sein. Denn selbst wenn ich das (sonst nicht sichtbare) Fenster mittels ShowWindow(hWnd, iCmdShow); einfach mal anzeigen lassen will, erscheint es nicht.
    Hier die entsprechende *.cpp

    Spoiler anzeigen
    C
    //this file is part of notepad++
    //Copyright (C)2003 Don HO <donho@altern.org>
    //
    //This program is free software; you can redistribute it and/or
    //modify it under the terms of the GNU General Public License
    //as published by the Free Software Foundation; either
    //version 2 of the License, or (at your option) any later version.
    //
    //This program is distributed in the hope that it will be useful,
    //but WITHOUT ANY WARRANTY; without even the implied warranty of
    //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    //GNU General Public License for more details.
    //
    //You should have received a copy of the GNU General Public License
    //along with this program; if not, write to the Free Software
    //Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
    
    #include "PluginDefinition.h"
    
    
    #define NDM_GETSCINTILLAMAIN   (WM_USER+101)
    #define NDM_GETSCINTILLASECOND (WM_USER+102)
    #define NDM_GETNPPWINDOW       (WM_USER+103)
    
    
    #ifdef UNICODE
    extern "C" __declspec(dllexport) BOOL isUnicode()
    {
        return TRUE;
    }
    #endif //UNICODE
    
    
    extern FuncItem funcItem[nbFunc];
    extern NppData nppData;
    
    
    
    
    BOOL APIENTRY DllMain( HANDLE hModule,
                           DWORD  reasonForCall,
                           LPVOID lpReserved )
    {
        switch (reasonForCall)
    	{
    	case DLL_PROCESS_ATTACH:
    	case DLL_THREAD_ATTACH:
    	case DLL_THREAD_DETACH:
    	case DLL_PROCESS_DETACH:
    		break;
    	}
    	return TRUE;
    }
    
    
    
    
    extern "C" __declspec(dllexport) void setInfo(NppData notpadPlusData)
    {
    	nppData = notpadPlusData;
    	commandMenuInit();
    }
    
    
    extern "C" __declspec(dllexport) const TCHAR * getName()
    {
    	return NPP_PLUGIN_NAME;
    }
    
    
    extern "C" __declspec(dllexport) FuncItem * getFuncsArray(int *nbF)
    {
    	*nbF = nbFunc;
    	return funcItem;
    }
    
    
    extern "C" __declspec(dllexport) void beNotified(SCNotification *notifyCode)
    {
    }
    
    
    // Here you can process the Npp Messages
    // I will make the messages accessible little by little, according to the need of plugin development.
    // Please let me know if you need to access to some messages :
    // http://sourceforge.net/forum/forum.php?forum_id=482781
    //
    extern "C" __declspec(dllexport) LRESULT messageProc(UINT Message, WPARAM wParam, LPARAM lParam)
    {/*
    	if (Message == WM_MOVE)
    	{
    		::MessageBox(NULL, "move", "", MB_OK);
    	}
    */
    	return TRUE;
    }
    
    
    
    
    // ============================== Eigenes Fenster zum Nachrichtenaustausch =============================
    
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    
    
    
    
    
    
    
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                         PSTR szCmdLine, int iCmdShow)
    {
        HWND        hWnd;
        MSG         msg;
        WNDCLASSEX  wc;
        wchar_t     *lpszAppName = L"NppWatcher";
        wchar_t     *lpszTitle   = L"Npp-PlugIn";
    
    
        wc.cbSize        =  sizeof(WNDCLASSEX);
        wc.style         =  CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc   =  WndProc;
        wc.cbClsExtra    =  0;
        wc.cbWndExtra    =  0;
        wc.hInstance     =  hInstance;
        wc.hCursor       =  LoadCursor(NULL,IDC_ARROW);
        wc.hIcon         =  LoadIcon(NULL, IDI_APPLICATION);
        wc.hbrBackground =  (HBRUSH) (COLOR_WINDOW+1);
        wc.lpszClassName =  lpszAppName;
        wc.lpszMenuName  =  lpszAppName;
        wc.hIconSm       =  LoadIcon(NULL, IDI_APPLICATION);
    
    
        if( RegisterClassEx(&wc) == 0)
            return 0;
    
    
        hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,
                              lpszAppName,
                              lpszTitle,
                              WS_OVERLAPPEDWINDOW,
                              10,  // 0
                              10,  // 0
                              CW_USEDEFAULT,
                              CW_USEDEFAULT,
                              NULL,
                              NULL,
                              hInstance,
                              NULL);
    
    
        if( hWnd == NULL)
            return 0;
    
    
        ShowWindow(hWnd, iCmdShow); // nur zum Test - sonst verstecken, Befehl auskommentieren
        UpdateWindow(hWnd);
    
    
        while (GetMessage(&msg, NULL, 0, 0) > 0)
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }
    
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT umsg, WPARAM wParam, LPARAM lParam)
    {
        switch (umsg)
        {
            case NDM_GETSCINTILLAMAIN:
                return (LPARAM)nppData._scintillaMainHandle;
    
    
     		case NDM_GETSCINTILLASECOND:
                return (LPARAM)nppData._scintillaSecondHandle;
    
    
    		case NDM_GETNPPWINDOW:
                return (LPARAM)nppData._nppHandle;
    /*
            // alternativ ausschließlich das Current-Handle holen
            case NPPM_GETCURRENTSCINTILLA:
            {
                int which = -1;
                ::SendMessage(nppData._nppHandle, NPPM_GETCURRENTSCINTILLA, 0, (LPARAM)&which);
                if (which == -1)
                    return which;
                HWND curScintilla = (which == 0)?nppData._scintillaMainHandle:nppData._scintillaSecondHandle;
                return (LPARAM)curScintilla;
            }
    */
            case WM_DESTROY:
            {
                PostQuitMessage(0);
                return 0;
            }
        }
        return DefWindowProc(hWnd, umsg, wParam, lParam);
    }
    Alles anzeigen


    Was mache ich da noch falsch?

    Ich habe den kpl. Code (erstellt aus einem DemoPlugIn) mal gezipt als Codeblock-Projekt angehängt.

    Dateien

    Test_Watch.zip 22,7 kB – 185 Downloads
  • Inputbox beim schreiben auswählen

    • BugFix
    • 20. März 2011 um 01:28

    45 ? Das Lösungsschema ist nur für ein Ctrl ausgelegt.
    Wenn du mehrere verwendest, mußt du für jedes Ctrl eine eigene Liste laden und zwar in Abhängigkeit, welches Ctrl gerade den Fokus hat. Du mußt also bei Fokuswechsel die Variable $SenseCtrl neu zuweisen. Dann könnte das klappen.

  • Interaktion mit Notepad++

    • BugFix
    • 20. März 2011 um 01:19

    Ich geh am Stock - ich exportiere die Funktion "isUnicode" - aber sie ist nirgends vorhanden. Man oh man, wie blöd kann man sein.
    Erst mal gucken wie die aussehn muß.

  • Interaktion mit Notepad++

    • BugFix
    • 20. März 2011 um 00:55

    Ich habe mal testweise von

    Code
    extern "C" __declspec(dllexport) BOOL isUnicode();

    auf

    Code
    extern "C" __declspec(dllexport) int isUnicode();

    geändert. Nun gab es keine Fehler mehr.

    Aber... Notepad++ meint noch immer es ist ein ANSI-PlugIn. Ich krieg hier noch die Krise... :wacko:

  • Interaktion mit Notepad++

    • BugFix
    • 20. März 2011 um 00:37

    OK, Danke. Hab die Fehler jetzt mit 'L' behoben.
    Jetzt ist mir nur noch unklar, wieso für "#ifdef UNICODE..." die Fehlermeldung 'BOOL' does not name a type
    erscheint. Wo ist da der Zusammenhang mit UNICODE. Denn bevor ich die Buildoption gesetzt hatte ist dieser Code nicht beanstandet worden.

  • Inputbox beim schreiben auswählen

    • BugFix
    • 20. März 2011 um 00:22

    Dafür hatte ich mal was geschrieben: IntelliSenseBox

  • Interaktion mit Notepad++

    • BugFix
    • 20. März 2011 um 00:11

    :wacko: Was sind das für Funktionen ( L, _T ) ? Ich habe eine 700-Seiten dicke C/C++ Referenz, aber das konnte ich da unter dem Funktionsverzeichnis nicht finden.
    In meiner Fensterdeklaration habe ich das jetzt verwendet.
    vorher:

    Code
    ...
        wc.lpszClassName =  lpszAppName;
        wc.lpszMenuName  =  lpszAppName;

    jetzt:

    Code
    wc.lpszClassName =  L(lpszAppName);
        wc.lpszMenuName  =  L(lpszAppName);

    Das Seltsame: jetzt bekomme ich nur für die erste der beiden Zeilen einen Error ( 'L' was not declared in this scope ). Müßte doch eigentlich 2-mal auftauchen. In welchem Include ist das eigentlich enthalten?

    Ach und hier

    Code
    #ifdef UNICODE
    extern "C" __declspec(dllexport) BOOL isUnicode();
    #endif

    bekomme ich jetzt folgenden Fehler: error: 'BOOL' does not name a type

  • Interaktion mit Notepad++

    • BugFix
    • 19. März 2011 um 23:51

    Ahh, OK - habe jetzt einfach mal bei den Buildoptions in den Tab "#define' UNICODE mit eingetragen. Und siehe da es tut sich was: Mein Code fliegt mir um die Ohren! Unzählige Fehlermeldungen "...cannot convert.." :wacko:
    Man oh man, gar nicht so einfach mit dem C/C++ Krams.

  • Interaktion mit Notepad++

    • BugFix
    • 19. März 2011 um 23:06
    Zitat von progandy

    Du musst die Funktion isUnicode exportieren

    Das hatte ich bereits drin:

    Code
    #ifdef UNICODE
    extern "C" __declspec(dllexport) BOOL isUnicode();
    #endif //UNICODE
    Zitat von progandy

    dass du die Buildoptionen so eingestellt hast, dass TCHAR in unicode char umgewandelt wird

    Und hier hakt es. Ich habe in den CodeBlocks Einstellungen gewühlt und das Manual vor und zurück gelesen. Ich finde einfach nicht diese Option. Ich weiß, dass ich mal zum Augenarzt muß - aber so blind bin ich doch wohl noch nicht, dass ich das übersehe - oder doch? :wacko:

  • Interaktion mit Notepad++

    • BugFix
    • 19. März 2011 um 17:40

    So, nun ist alles fehlefrei kompiliert, PlugIn zu Notepad++ rübergeschoben und NPP gestartet: "Dies ist ein ANSI-Plugin und kann nicht mit dieser Version von Notepad++ genutzt werden...."
    ?( Mist, wo zum Teufel wird das eingestellt? Sollte doch wohl irgendwo in den Build-Einstellungen sein. Aber ich finde nix. Ist es eine zusätzliche Angabe für den Linker, in der Art "UNICODE=1" ? Getestet hab ich das so, wurde aber von CodeBlocks abgelehnt.

  • Interaktion mit Notepad++

    • BugFix
    • 19. März 2011 um 13:56

    Ich habe nun mal versucht, auf Basis des DemoPlugins ein Kommunikations-Plugin zu erstellen.
    Probleme entstehen bei der MSG-Auswertung.
    Wenn ich die MSG, die ich ja aus AutoIt heraus mit _SendMessage() an dieses Fenster senden möchte, im dortigen Auswertezweig als "Case MSG" unterbringe, bekomme ich Fehlermeldungen (Zeile 71).
    Kann ich dann eigentlich die Handle z.B. mit "return NppData._scintillaMainHandle;" zurückgeben, oder ist noch mehr zu beachten?

    Spoiler anzeigen
    Code
    #include "main.h"
    
    
    // The data of Notepad++ that you can use in your plugin commands
    NppData nppData;
    
    
    // Initialize your plugin data here
    // It will be called while plugin loading
    void pluginInit(HANDLE hModule)
    {
    }
    
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    
    LPCSTR lpszAppName = "NppWatcher";
    LPCSTR lpszTitle   = "Npp-PlugIn";
    
    
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                         PSTR szCmdLine, int iCmdShow)
    {
        HWND       hWnd;
        MSG        msg;
        WNDCLASSEX wc;
    
    
        wc.cbSize        =  sizeof(WNDCLASSEX);
        wc.style         =  CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc   =  WndProc;
        wc.cbClsExtra    =  0;
        wc.cbWndExtra    =  0;
        wc.hInstance     =  hInstance;
        wc.hCursor       =  LoadCursor(NULL,IDC_ARROW);
        wc.hIcon         =  LoadIcon(NULL, IDI_APPLICATION);
        wc.hbrBackground =  (HBRUSH) (COLOR_WINDOW+1);
        wc.lpszClassName =  lpszAppName;
        wc.lpszMenuName  =  lpszAppName;
        wc.hIconSm       =  LoadIcon(NULL, IDI_APPLICATION);
    
    
        if( RegisterClassEx(&wc) == 0)
            return 0;
    
    
        hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,
                              lpszAppName,
                              lpszTitle,
                              WS_OVERLAPPEDWINDOW,
                              0,
                              0,
                              CW_USEDEFAULT,
                              CW_USEDEFAULT,
                              NULL,
                              NULL,
                              hInstance,
                              NULL);
    
    
        if( hWnd == NULL)
            return 0;
    
    
        // ShowWindow(hWnd, iCmdShow);
        UpdateWindow(hWnd);
    
    
        while (GetMessage(&msg, NULL, 0, 0) > 0)
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }
    
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT umsg, WPARAM wParam, LPARAM lParam)
    {
        switch (umsg)
        {
            case NDM_GETSCINTILLAMAIN:  // mit #define in Header-Datei deklariert
                // error: expected primary-expression before '=' token
                // error: an assignment cannot appear in a constant expression
    /*
     		case NDM_GETSCINTILLASECOND:
    
    
    
    
    		case NDM_GETNPPWINDOW:
    
    
    */
            case WM_DESTROY:
            {
                PostQuitMessage(0);
                return 0;
            }
        }
        return DefWindowProc(hWnd, umsg, wParam, lParam);
    }
    Alles anzeigen
  • [gelöst] Dll-Funktionen bekommen "Zusatz" (@8)

    • BugFix
    • 19. März 2011 um 09:39

    Ich danke dir, das wars. :thumbup:
    So paßt es:

    main.cpp
    Code
    #include "main.h"
    
    
    extern "C" {
    __declspec(dllexport) int __cdecl Addi (int,int);
    __declspec(dllexport) int __cdecl Multi (int,int);
    }
    
    
    __declspec(dllexport) int __cdecl Addi (int x1,int x2)
    {
    	int returnvar;
    	{
            returnvar=x1 + x2;
    	}
    	return returnvar;
    }
    
    
    __declspec(dllexport) int __cdecl Multi (int x1,int x2)
    {
    	int returnvar;
    	{
            returnvar=x1 * x2;
    	}
    	return returnvar;
    }
    Alles anzeigen
  • [gelöst] Dll-Funktionen bekommen "Zusatz" (@8)

    • BugFix
    • 19. März 2011 um 02:43

    Hi,
    ich habe gerade meine ersten Gehversuche mit C++ gemacht.
    Es ist mir dann auch gelungen eine funktionierende Dll zu erstellen. (IDE: CodeBlocks, Kompiler: GNU GCC)
    Soweit ich gelesen habe, soll das Voranstellen von "extern "C" __declspec(dllexport) ..." dafür sorgen, dass ich die Funktionen in der Dll auch mit dem vergebenen Namen ansprechen kann.
    Es wird jedoch trotzdem an den Funktionsnamen "@8" angehängt, wobei die Zahl abhängig ist vom belegten Speicherplatz.
    Hier mal meine Test-Dll:

    main.h
    C
    #ifdef BUILD_DLL
    /* DLL export */
    #define EXPORT __declspec(dllexport)
    #else
    /* EXE import */
    #define EXPORT __declspec(dllimport)
    #endif
    
    
    #define WIN32_LEAN_AND_MEAN             // Selten verwendete Teile der Windows-Header nicht einbinden.
    
    
    // Windows-Headerdateien:
    #include <windows.h>
    
    
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
    					 )
    {
    	switch (ul_reason_for_call)
    	{
    	case DLL_PROCESS_ATTACH:
    	case DLL_THREAD_ATTACH:
    	case DLL_THREAD_DETACH:
    	case DLL_PROCESS_DETACH:
    		break;
    	}
    	return TRUE;
    }
    Alles anzeigen
    main.cpp
    Code
    #include "main.h"
    
    
    extern "C" {
    __declspec(dllexport) int _stdcall Addi (int,int);
    __declspec(dllexport) int _stdcall Multi (int,int);
    }
    
    
    __declspec(dllexport) int _stdcall Addi (int x1,int x2)
    {
    	int returnvar;
    	{
            returnvar=x1 + x2;
    	}
    	return returnvar;
    }
    
    
    __declspec(dllexport) int _stdcall Multi (int x1,int x2)
    {
    	int returnvar;
    	{
            returnvar=x1 * x2;
    	}
    	return returnvar;
    }
    Alles anzeigen


    Muß ich da noch weitere Angaben machen oder Kompilerdirektiven verwenden?

  • Chemieversuch: Elektrolyse Wasser

    • BugFix
    • 18. März 2011 um 22:28

    Nun, das zu Hause zu machen ist nicht ganz ungefährlich. Sauerstoff und Wasserstoff als Gase zusammengebracht sind natürlich ein explosives Gemisch. Also lieber Hände weg davon.

  • Interaktion mit Notepad++

    • BugFix
    • 18. März 2011 um 19:02

    progandy, du bist ein Schatz :love:
    Ich habe bei meinen Versuchenschon graue Haare bekommen. Jetzt kann ich endlich weiterbasteln. :thumbup:

    Edit: Hmm, ich bekomme keine Handle, alles 0x00000000 8|

    Edit2: Das DirectorWindow-Handle wird zurückgegeben, nur die anderen nicht.

    Ich hab das mal mit DependencyWalker angeschaut. 2 Dateien scheinen problematisch zu sein.Ist das die Ursache?

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Dateien

    nppdirector.png 115,79 kB – 0 Downloads

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™