PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SendMessage zu anderem process



Wolfkiller
01.12.2007, 00:35
also ich will ein programm schreiben das in einem anderen process eine menuauswahl trifft oder ein button klick ohne das die wirklich gescheit !

also mein quellcode is bisher einfach


#include <windows.h>


using namespace std;

int main()
{
HWND hWindow=FindWindow(NULL,"Test");
SendMessageA(hWindow,WM_MENUSELECT,0,0);
}



allerdings wird hier halt nich angegeben welches menuitem den angeklickt wurde.
wie kan ich das festlegen ??

und wie kann ich etwas auf diese weise in eine editbox eintragen lassen ?
also das z.B. in einem login fenster die logindaten durch mein programm angegeben werden ..

l0dsb
01.12.2007, 09:36
Guck dir in der MSDN mal die APIs SetWindowText(A/W), SendDlgItemMessage(A/W) bzw. SendMessage(A/W) in Kombination mit der Message WM_SETTEXT an. :)

Noch was, ich würde bei FindWindow mindestens noch den Klassennamen hinzufügen (evtl. gibt es mehrere Windows mit demselben Namen).

Wolfkiller
01.12.2007, 14:17
so sollte es jetzt die EditBox ansprechen ...


HWND hWindow=FindWindow(NULL,"Minimizer");
HWND hEditBox=GetDlgItem(hWindow,1);
SendMessage(hEditBox,WM_SETTEXT, 0, 0);



aber wen ich SendMessage(hEditBox,WM_SETTEXT,0,"Test");

invalid conversion from `const char*' to `LPARAM'
initializing argument 4 of `LRESULT SendMessageA(HWND__*, UINT, WPARAM, LPARAM)'


also meine frage hierzu wie bekomme ich den text in LPARAM ???
( fals das pber eine LPARAM struktur läuft währe es net wenn diese mit erklärung gepostet würde ^_^ )

und ich habe den Minimizer mit IBasic erstellt und jetzt weis ich net was da der klassenname is :oops:

( noch ne frage am rande ... wen ich tuts suche und die beispiele copy-paste warum spämt der kompiler mich dan immer mit fehlern ?? )

l0dsb
02.12.2007, 15:45
invalid conversion from `const char*' to `LPARAM'
initializing argument 4 of `LRESULT SendMessageA(HWND__*, UINT, WPARAM, LPARAM)'

Das Ganze sollte so kompilierbar sein:


char *MyText = "Test";
SendMessage(hEditBox, WM_SETTEXT, 0, (LPARAM)MyText);
Ich hoffe, es klappt nun.

Wolfkiller
03.12.2007, 12:00
zu kompilieren geht es jetzt

aber es ging trotzdem nicht deswegen habe ich ein paar if abfragen eingebaut um zu testen wo evl ein fehler liegt ...



#include <windows.h>


using namespace std;

int main()
{
HWND hWindow=FindWindow(NULL,"Minimizer");
if(NULL==hWindow)
{
MessageBoxA(NULL,"Caption","-.-",MB_OK);
}

HWND hEditBox=GetDlgItem(hWindow,2);
if(NULL==hEditBox)
{
MessageBoxA(NULL,"EditBox","-.-",MB_OK);
}


char *MyText = "Test";
SendMessageA(hEditBox, WM_SETTEXT, 0, (LPARAM)MyText);
}



immer wen ich das programm starte kommt die messagebox die anzeigt das die EditBox nicht gefunden wurde :'(
( an einer falschen id kann es eig nicht liegen da ich den Minimizer selbst programmiert habe [ mit IBasic ] ) und bei der 2ten editbox die dabei is geht es auhc nicht :'(

wen ich SendMessage(hWindow,WM_SETTEXT,0,/LPARAM)MyText);
mache wird di Caption vom Minimizer geändert ...

danke für deine bisherige hilfe ^_^

l0dsb
03.12.2007, 14:48
Kann es evtl. sein, dass das "Minimizer"-Window gar kein modaler Dialog ist? Wenn nicht, wäre Enumerate(Child)Windows ein Weg, anzusetzen (das geht dann auch bei Dialogen).