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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2012, 20:01   #1
The SCS
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 98
По умолчанию Получение Handle события

У меня задача. Подключиться к серверу, получить пид процесса программы, хэндл сокета и хэндл события. затем из полученных от сервера данных вытащить хекс код и преобразовать в десятичный.

Вот с получением хэндла события проблема. Никогда не сталкивался с таким, да и гугол ничем не порадовал.

Есть исходник на плюсах, но я там ничегошеньки не понял.

Код:

void __fastcall TNewHost::WMWAHost(TMessage &Message)
{

	AnsiString Address;
	WORD ExternalPort=(WORD)Message.LParam;
	if(ExternalPort!=0xFFFF&&ExternalPort!=0)
	{
		Address="proxy.worms2d.info:"+(AnsiString)(int)ExternalPort;
	}
	else
	{
		if(ForceAddr->Checked)Address=Addr->Text+":"+PortEd->Text;
		else Address=Main->MyAddr+":"+PortEd->Text;
	}
	AnsiString GameName=StrUni2WA(HostName->Text);
	for(int i=0;i<GameName.Length();i++)
	{
		if(GameName.c_str()[i]==0x20) GameName.c_str()[i]=0xA0;
	}
	AnsiString Pwd=StrUni2WA(Passwd->Text);
	for(int i=0;i<Pwd.Length();i++)
	{
		if(Pwd.c_str()[i]==0x20) Pwd.c_str()[i]=0xA0;
	}
	UnicodeString HostWith=HostWithCb->Text;
	AnsiString Nick=StrUni2WA((Hoster->Text.IsEmpty()?Main->CurNick:Hoster->Text));
	AnsiString Loc=((FlagCb->ItemIndex>=0)?GetSelectedLoc():Main->GetSelectedLoc());
	Close();
	Channel->CreateGame(HostWith,Address,GameName,Pwd,Nick,Loc,(SOCKET)Message.WParam);
}

//------------------------------------------
const WORD PortError=0xFFFF;

typedef struct{
	HWND HostFrmWnd;
	WORD ProxyPort;
	char ProxyAddress[0];
}INITWNAT2STR;


void __stdcall InitWormNAT2(INITWNAT2STR* InitStr)
{
	WORD ExternalPort=0;
	SOCKET ControlSocket;
	sockaddr_in ControlAddr;
	hostent *ControlHost;
	WORD Input;
	WSADATA wsaData;

	ControlSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	ControlHost=gethostbyname(InitStr->ProxyAddress);
	WORD ProxyPort=InitStr->ProxyPort;
	HWND HostFrmWnd=InitStr->HostFrmWnd;

	free(InitStr);

	if(!ControlHost)
	{
		ExternalPort=PortError;
		closesocket(ControlSocket);
		PostMessage(HostFrmWnd,WM_WAHOST,0,ExternalPort);
		return;
	}
	ControlAddr.sin_family=AF_INET;
	ControlAddr.sin_port=htons(ProxyPort);
	ControlAddr.sin_addr.s_addr=*(DWORD*)ControlHost->h_addr;
	if(connect(ControlSocket,(sockaddr*)&ControlAddr,sizeof(ControlAddr))==SOCKET_ERROR)
	{
		ExternalPort=PortError;
		closesocket(ControlSocket);
		PostMessage(HostFrmWnd,WM_WAHOST,0,ExternalPort);
		return;
	}
	if(recv(ControlSocket,(char*)&Input,2,0)!=2)
	{
		ExternalPort=PortError;
		closesocket(ControlSocket);
		PostMessage(HostFrmWnd,WM_WAHOST,0,ExternalPort);
		return;
	}
	ExternalPort=Input;

	PostMessage(HostFrmWnd,WM_WAHOST,ControlSocket,ExternalPort);
	Sleep(60000);
	closesocket(ControlSocket);
	return;
}
The SCS вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
События в WPF. Обращение к компонентам формы из события Casper-SC Общие вопросы .NET 3 25.07.2010 19:03
HANDLE в С++ genikoff Общие вопросы C/C++ 1 12.05.2010 15:03
Как узнать handle окна имея handle обного из его компонентов SeRhy Win Api 2 18.10.2009 19:31
Как имея handle окна узнать handle edit-a который находится в етом окне SeRhy Общие вопросы Delphi 1 20.07.2008 13:48
Handle -=<[Evklidd]>=- Общие вопросы Delphi 5 03.03.2008 09:02