Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2009, 00:26   #1
Рюмкин
Новичок
Джуниор
 
Регистрация: 13.12.2009
Сообщений: 2
По умолчанию Окно из DLL

Хочу написать ДЛЛ из которой будет вызываться окно, при запуске программы. В ехе программы влезать не хочу, но нужно что бы мое окно висело над окном программы(хочу сделать ввод пароля, для разрешения еб пользоваться.)
вот мой код длл, но он не выводит окно
Код:
const char g_szClassName[] = "myWindowClass";

HINSTANCE hInstance;
HWND hwnd;

LRESULT CALLBACK DllWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
	  case WM_CREATE:
		return true;
    case WM_CLOSE:
		return true;
    case WM_DESTROY:
 		return true;
    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    return 0;
}

void GetMsgLastError(char * i){
	void *buf;
	FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
		          FORMAT_MESSAGE_FROM_SYSTEM |
			      FORMAT_MESSAGE_IGNORE_INSERTS,
				  NULL,GetLastError(),0,
				  (LPTSTR) &buf,0,NULL);
		MessageBox(NULL, (LPTSTR)buf, i, MB_OK | MB_ICONINFORMATION);
		// Free the buffer
		LocalFree(buf);
}


BOOL APIENTRY DllMain( HINSTANCE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
	WNDCLASS wc;
	MSG msg;

	switch(ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		// Registering the Window Class

		wc.style         = CS_GLOBALCLASS;;
		wc.lpfnWndProc   = DllWndProc;
		wc.cbClsExtra    = 0;
		wc.cbWndExtra    = 0;
		wc.hInstance     = hModule;
		wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
		wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
		wc.hbrBackground = (HBRUSH) BLACK_PEN;
		wc.lpszMenuName  = NULL;
		wc.lpszClassName = g_szClassName;

		
		if(!RegisterClass(&wc))
		{    
			GetMsgLastError("Register class error");
			return FALSE;
		}
		hInstance = hModule;
		break;
	}
    

        HWND hWnd = FindWindow("IEFrame", NULL);
		
		if(hWnd == NULL){
			GetMsgLastError("hwnd error");
			return false;
		}
  
		if(hInstance == NULL){
			GetMsgLastError("instance error");
			return false;
		}
        
		HWND hbtn = CreateWindow(
        wc.lpszClassName,
        NULL,
        WS_CHILD | WS_BORDER | WS_VISIBLE,
        CW_USEDEFAULT, 
		CW_USEDEFAULT, 
		240, 
		120,
        NULL, 
		NULL, 
		hInstance, 
		NULL);
	
		if(hbtn == NULL){
			
			return false;
		}
		
		GetMsgLastError("Window create");
  
		SetParent(hbtn,hWnd);
		ShowWindow(hbtn, SW_SHOWNORMAL);
        UpdateWindow(hbtn);

		while (GetMessage (&msg, 0, 0, 0)>0) 
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}


    return TRUE;
}

Последний раз редактировалось Рюмкин; 14.12.2009 в 00:29.
Рюмкин вне форума Ответить с цитированием
Старый 22.12.2009, 23:44   #2
d9m0n
Пользователь
 
Регистрация: 03.03.2009
Сообщений: 29
По умолчанию

Функция DllMain должна возвращать управление до передачи управления в программу, к которой она подгружается. Чтобы окно работало из длл нужно сделать его в отдельном потоке, создаваемом в DllMain ( или еще где :-))
d9m0n вне форума Ответить с цитированием
Старый 24.12.2009, 13:25   #3
Рюмкин
Новичок
Джуниор
 
Регистрация: 13.12.2009
Сообщений: 2
По умолчанию

а можно немного кода, для примера?
Рюмкин вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
Запуск Load.dll (бывшая Load.exe) в дереве проц-ов, Как запустить прогой на C# .dll-ку kapustin Общие вопросы .NET 10 23.09.2009 22:20
Окно из DLL SunKnight Общие вопросы Delphi 1 16.12.2007 03:36
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. RustreX Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2007 19:28
Модальное окно из Dll neo1109 Общие вопросы Delphi 0 29.06.2007 11:24