SendMessage(..,..,??,??);



  • LRESULT SendMessage( HWND hWnd, 
    UINT Msg, 
    WPARAM wParam, 
    LPARAM lParam 
    );
    

    hWnd=HWND_BROADCAST // sendet an das übergeorndetste fenster
    Msg=32 // nachricht - interrupt 32
    wParam=?? // *FRAGE
    lParam=?? // *FRAGE

    *FRAGE: für was sind die letzteren beiden Parameter?
    bitte um ein BEISPIEL.

    mfG (c)h



  • Das kommt ganz drau an, was für eine Message (2. Parameter) Du versenden willst. wParam und lParam sind 2 Möglichkeiten der Nachricht Daten mitzugeben.

    Wenn Dir Windows zum Beispiel die Message WM_SIZE zuschickt, steht das hier in wParam und lParam:

    wParam
    Specifies the type of resizing requested. This parameter can be one of the following values.
    SIZE_MAXHIDE
    Message is sent to all pop-up windows when some other window is maximized.
    SIZE_MAXIMIZED
    The window has been maximized.
    SIZE_MAXSHOW
    Message is sent to all pop-up windows when some other window has been restored to its former size.
    SIZE_MINIMIZED
    The window has been minimized.
    SIZE_RESTORED
    The window has been resized, but neither the SIZE_MINIMIZED nor SIZE_MAXIMIZED value applies.

    lParam
    The low-order word of lParam specifies the new width of the client area.
    The high-order word of lParam specifies the new height of the client area.

    Genauso verhält es sich mit allen Messages, die Du sendest bzw. empfängst...



  • HWND_BROADCAST sendet nicht an das übergeordnte Fenster, sondern an alle toplevel Fenster.

    MSG=32? Was soll das sein? Du willst doch wohl nicht den Interupt 32 an ein Fenster senden? nachrichten sind unter Windows alles Konstanten, die Namen haben. Windowsnachrichten famgen alle mit WM_... an zum Beispiel.



  • ich wurde von einem thread - http://www.c-plusplus.net/forum/viewtopic.php?t=95849- inspieriert, und möchte jetzt an eine andere Anwendung(welche nichts von ihrem glück weiss) tastatureingaben senden, also vortäuschen.

    zum Beispiel alle 10 sec die taste 'a' vortäuschen.

    das ist doch nicht so ein langer code. kann bitte jemand ein bsp posten?!*bidebide*

    mfG (c)h

    edit: ---



  • Dazu brauchst du das Handle der Anwendung.
    Das bekommst du mit FindWindow.



  • HWND GetHwnd(TCHAR strTitle[256])
    {
    	return(FindWindow(NULL,strTitle));
    }
    

    ...

    HWND hwnd;
    	hwnd=GetHwnd("test.txt - Editor");
    	while(1)
    	{
    	SendMessage(hwnd,?,?,?);
    	Sleep(1000);
    	}
    

    ... und jetzt?

    sagen wir einfach mal: ich möchte mit der funktion ein 'a' senden.



  • Dazu brauchst du die Nachricht WM_KEYDOWN bzw. WM_KEYUP. Schau mal in der MSDN nach was dann bei lParam und wParam stehen muss. (In einem vom beiden ist dann der zu sendende Buchstabe.



  • WM_CHAR dürfte auch gehn:

    HWND hwnd;
    hwnd=GetHwnd("test.txt - Editor");
    while(1)
    {
    SendMessage(hwnd,WM_CHAR, (WPARAM)'a',0);
    Sleep(1000);
    }



  • @Anfänger14:

    void main()
    {
    	char name[256];
    	HWND hwnd;
    
    	do
    	{
    		printf("\n Namen eingeben..");
    		gets(name);
    		hwnd=FindWindow(NULL,name); 
    	}while(hwnd==NULL);
    
    	while(1) 
    	{ 
    		printf("\n%ld",SendMessage(hwnd,WM_CHAR, (WPARAM)'a',0)); 
    		Sleep(1000); 
    	}
    }
    

    SendMessage gibt immer 0 zurück - 👍 oder 👎 ?
    beim Name muss man nur den genauen Titel eingeben.
    In der test.txt tut sich nichts... kannst den code oben ja mal probieren...

    mfG (c)h



  • Willst du was in das Edit reinschreiben? Dann würde ich Nachricht nicht an das Hauptfenster schicken.



  • Luckie schrieb:

    Willst du was in das Edit reinschreiben? Dann würde ich Nachricht nicht an das Hauptfenster schicken.

    SONDERN?



  • chille07 schrieb:

    Luckie schrieb:

    Willst du was in das Edit reinschreiben? Dann würde ich Nachricht nicht an das Hauptfenster schicken.

    SONDERN?

    Wie wär es direkt mit dem Child 🙄



  • Ich dachte mir auch schon das man die eigentlich ans child schicken müsste die Nachrichten aber wie kriegt man das passende HWND. Man hat von dem Aufbau des anderen Progs doch gar keine Ahnung?



  • flammenvogel schrieb:

    Man hat von dem Aufbau des anderen Progs doch gar keine Ahnung?

    Den kannst du ja mittels Spy++ bzw. WinSpector o.ä. analysieren 😉



  • hmm... mit child-prozessen kenne ich mich nicht so aus...
    ich wollte doch in einem anderen programm eingaben vortäuschen -
    hab inzwischen "keybd_event(...)" gefunden
    es funktioniert, aber ich verstehe nicht, für was der 2. 3. und 4. parameter sind...
    ich mache immer:
    keybd_event(VK_***,0,0,0); und
    keybd_event(VK_***,0,KEYEVENTF_KEYUP,0);
    ^^das funktioniert.

    wollte es in der msdn suchen, blicke (bei der msdn-funktionsweise) aber irgendwie nicht durch - gibts da eine startseite oder suchseite oder so?

    mfG (c)h



  • msdn.microsoft.com

    @flenders Wie willst du das machen mit den Child Fenster das HWND des Childfenster ändert sich ja ständig. Wie willst du dann bitteschön ein Childfenster direkt ansprechen???



  • flammenvogel schrieb:

    @flenders Wie willst du das machen mit den Child Fenster das HWND des Childfenster ändert sich ja ständig. Wie willst du dann bitteschön ein Childfenster direkt ansprechen???

    Einfach über FindWindowEx bis zum Child "durchhangeln" - oder was ist dein Problem 😕



  • edit Windows und so weiter haben doch keine Namen an denen man sie wiedererkennen kann oder willst du die Message einfach an alle in Frage kommenden childs senden.



  • flammenvogel schrieb:

    edit Windows und so weiter haben doch keine Namen an denen man sie wiedererkennen kann

    ... aber normalerweise eine ID 😉


Log in to reply