Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 16:57

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



C++ dll mit Formanwendung

Discussion on C++ dll mit Formanwendung within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
Logtetsch's Avatar
 
elite*gold: 192
Join Date: May 2009
Posts: 2,227
Received Thanks: 3,262
C++ dll mit Formanwendung

Hallo.
Hab mal eine Frage.
Ich habe eine Dll geschrieben, die ich natürlich wie jede andere auch, injekte.
Nun würd ich gerne eine WindowsFormAnwendung erstellen.

Also wenn die DLL attached wird, soll sich eine FormAnwendung öffnen die ich benutzen kann.

Wisst ihr wie das geht ?

mfg Logtetsch
Logtetsch is offline  
Old 01/26/2012, 18:45   #2
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
WinApi anyone? ;o
MoepMeep is offline  
Old 01/26/2012, 18:50   #3
 
elite*gold: 0
Join Date: Nov 2009
Posts: 343
Received Thanks: 45
CreateWindowEx sollte deine Probleme lösen.

MfG
yihaaa is offline  
Thanks
1 User
Old 01/26/2012, 19:02   #4
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
ist aber bei spielen etwas problematisch, je nachdem was du machen möchtest.
eventuell ist es eine schönere lösung deine dll mit einem externen programm von dir per pipe kommunizieren zu lassen.
Dr. Coxxy is offline  
Thanks
1 User
Old 01/26/2012, 19:12   #5
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
WindowsForms = .NET Framework

Das kannst du nicht einfach nach belieben in eine .dll kopieren.


KDeluxe is offline  
Thanks
1 User
Old 01/26/2012, 23:22   #6


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
@Moep: Er hat nicht nach Win32 gefragt.

@yihaa: same. Außerdem würde ein Dialog i.d.R. reichen

@Deluxe: same.

@Topic:

Es ist möglich. Man kann mittels WinApi einen .NET Host in einer nativen Dll erstellen.
Dieser ermöglicht es dann, .NET Code auszuführen.
Sprich du machst dir eine .NET Dll mit dem GUI und packst sie als Resource in die eigentliche native Dll.
Dort erstellst du erst die .NET Dll temporär, richtest den Host ein und führst das .NET Assembly aus.

Problem ohne externe Anwendung gelöst.

Zu Windows Forms INNERHALB von C++ (also C++/CLI) würde ich dir NICHT raten.
MrSm!th is offline  
Thanks
1 User
Old 01/27/2012, 01:34   #7
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
Quote:
Originally Posted by MrSm!th View Post
@Moep: Er hat nicht nach Win32 gefragt.

@yihaa: same. Außerdem würde ein Dialog i.d.R. reichen

@Deluxe: same.

@Topic:

Es ist möglich. Man kann mittels WinApi einen .NET Host in einer nativen Dll erstellen.
Dieser ermöglicht es dann, .NET Code auszuführen.
Sprich du machst dir eine .NET Dll mit dem GUI und packst sie als Resource in die eigentliche native Dll.
Dort erstellst du erst die .NET Dll temporär, richtest den Host ein und führst das .NET Assembly aus.

Problem ohne externe Anwendung gelöst.

Zu Windows Forms INNERHALB von C++ (also C++/CLI) würde ich dir NICHT raten.
Ist trotzdem der richtige weg, das GUI auslagern bringt mehr probleme als vorteile.
MoepMeep is offline  
Old 01/27/2012, 16:49   #8
 
Logtetsch's Avatar
 
elite*gold: 192
Join Date: May 2009
Posts: 2,227
Received Thanks: 3,262
Ok. Hab mir das Beispiel von KD ans Herz genommen und bin auch damit zufrieden. Hab das Fenster so angepasst wie ich es will. Jetzt hab ich ein weiteres Problem. Wie könnt ich z.B eine Checkbox oder ein Button reinpacken?

Edit : 1000 Beitrag ^^
Logtetsch is offline  
Old 01/27/2012, 17:11   #9
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
Button:



Checkbox (Button mit dem style BS_CHECKBOX):
Nightblizard is offline  
Old 01/27/2012, 21:09   #10


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Der richtige Weg wäre ein D3D Menü ;O
MrSm!th is offline  
Thanks
1 User
Old 01/27/2012, 23:30   #11
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
Quote:
Originally Posted by MrSm!th View Post
Der richtige Weg wäre ein D3D Menü ;O
Nein nein nein nein nein. Mal ernsthaft, wie hast du es in level 2 geschafft? o.O
MoepMeep is offline  
Thanks
1 User
Old 01/27/2012, 23:50   #12
 
Logtetsch's Avatar
 
elite*gold: 192
Join Date: May 2009
Posts: 2,227
Received Thanks: 3,262
Ein d3d wär mir zu viel Aufwand.

EDIT: Hab es geschafft Buttons und Checkboxen reinzufügen.

Jetzt hab ich wieder ein kleines Problem. Wie kann ich das mache, dass wenn die Checkbox aktiviert ist, eine MessageBox erscheint ?

Hab das bis jetzt so gemacht:

PHP Code:

WS_COMMAND
:
    case 
WM_COMMAND:
        switch(
wParam)
        {
        case 
1:
            
MessageBoxA(0"Checkbox funkt","Info",0);
        break;
        } 
Allerdings passiert nichts
Logtetsch is offline  
Old 01/28/2012, 14:31   #13
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Poste mal den ganzen Code oder wenigstens etwas mehr
jacky919 is offline  
Old 01/28/2012, 14:50   #14
 
elite*gold: 0
Join Date: Nov 2009
Posts: 343
Received Thanks: 45
Code:
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
	switch ( msg )
	{    
		case WM_CREATE:
			{
				Button_HANDLE = CreateWindow( "Button", "Klick mich!", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 0, 0, 100, 25, hWnd, ( HMENU )BUTTON_ID, PublicHINSTANCE, NULL );
				Text_HANDLE = CreateWindow( "Edit", NULL, WS_CHILD | WS_VISIBLE, 100, 0, 100, 25, hWnd, ( HMENU )TEXT_ID, PublicHINSTANCE, NULL );
				Checkbox_HANDLE = CreateWindow( "Button", "Text anzeigen?", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, 0, 25, 150, 25, hWnd, ( HMENU )CHECKBOX_ID, PublicHINSTANCE, NULL );

				break;
			}
		case WM_COMMAND:
			{
				switch( wParam )
				{
					case BUTTON_ID:
						{
							GetWindowText( Text_HANDLE, TextInhalt, Size_of_Text );

							//check = GetDlgItem( Checkbox_HANDLE, CHECKBOX_ID );

							if ( SendMessageA( Checkbox_HANDLE, BM_GETSTATE, NULL, NULL ) == BST_CHECKED )
							{
								MessageBoxA( NULL, TextInhalt, "Test", NULL );
							}

							break;
						}
				}
			break;
			}
		case WM_CLOSE:
			{
				DestroyWindow( MainHandle );
				break;
			}
        case WM_DESTROY:
			{
				PostQuitMessage( NULL );
				break;
			}
		case WM_PAINT:
		{
			hdc = BeginPaint( hWnd, &ps );
			EndPaint( hWnd, &ps );
			break;
		}
		default:
			{
				return DefWindowProc( hWnd, msg, wParam, lParam );
			}
	}
	return 0;
}
}
Habe das jetz einfach mal aus meinen Testprogramm so gepostet, sollte auch klappen.
MfG
yihaaa is offline  
Old 01/28/2012, 15:02   #15
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by yihaaa View Post
Code:
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
	switch ( msg )
	{    
		case WM_CREATE:
			{
				Button_HANDLE = CreateWindow( "Button", "Klick mich!", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 0, 0, 100, 25, hWnd, ( HMENU )BUTTON_ID, PublicHINSTANCE, NULL );
				Text_HANDLE = CreateWindow( "Edit", NULL, WS_CHILD | WS_VISIBLE, 100, 0, 100, 25, hWnd, ( HMENU )TEXT_ID, PublicHINSTANCE, NULL );
				Checkbox_HANDLE = CreateWindow( "Button", "Text anzeigen?", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, 0, 25, 150, 25, hWnd, ( HMENU )CHECKBOX_ID, PublicHINSTANCE, NULL );

				break;
			}
		case WM_COMMAND:
			{
				switch( wParam )
				{
					case BUTTON_ID:
						{
							GetWindowText( Text_HANDLE, TextInhalt, Size_of_Text );

							//check = GetDlgItem( Checkbox_HANDLE, CHECKBOX_ID );

							if ( SendMessageA( Checkbox_HANDLE, BM_GETSTATE, NULL, NULL ) == BST_CHECKED )
							{
								MessageBoxA( NULL, TextInhalt, "Test", NULL );
							}

							break;
						}
				}
			break;
			}
		case WM_CLOSE:
			{
				DestroyWindow( MainHandle );
				break;
			}
        case WM_DESTROY:
			{
				PostQuitMessage( NULL );
				break;
			}
		case WM_PAINT:
		{
			hdc = BeginPaint( hWnd, &ps );
			EndPaint( hWnd, &ps );
			break;
		}
		default:
			{
				return DefWindowProc( hWnd, msg, wParam, lParam );
			}
	}
	return 0;
}
}
Habe das jetz einfach mal aus meinen Testprogramm so gepostet, sollte auch klappen.
MfG
die button id würde ich eher mit LOWORD(wParam) prüfen, da HIWORD den state(?) beinhaltet

Code:
switch(uMsg)
{
case WM_CLOSE:
case WM_DESTROY:
   PostQuitMessage(0);
   break;
case WM_COMMAND:
   {
      switch(LOWORD(wParam))
      {
      case BUTTON_ID:
         MessageBoxW(hWnd,L"d",L"y",0);
         break;
      }
   }
default:
   return DefWindowProcW(hWnd,uMsg,wParam,lParam);
}
so siehts etwa bei mir aus

edit: was den checkbox state angeht arbeite ich lieber mit variablen die ich umstelle und dann die checkbox änder, da mir BM_GETCHECK bisher nie die richtigen ergebnisse geliefert hat
Tyrar is offline  
Thanks
1 User
Reply




All times are GMT +1. The time now is 16:58.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.