by Admin » Wed Dec 03, 2008 7:23 am
- Code: Select all
'Courier New font for textbox 2 width = 8535 height is 2655
Dim SecondTime As Boolean
Private Sub Form_Load()
Winsock1.LocalPort = 6666
Winsock1.Listen
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
Winsock1.SendData Text1.Text
Text1.Text = ""
End If
End Sub
Private Sub Winsock1_Close()
Winsock1.Close
Winsock1.Listen
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData Data, vbString
Debug.Print Data
Text2.Text = Text2.Text & Data
Text2.SelStart = Len(Text2.Text)
End Sub
Private Sub Text2_Change()
If SecondTime Then Exit Sub
If InStr(Text2.Text, " ") Then
SecondTime = True
Text2.Text = Replace(Text2.Text, " ", Chr$(160))
SecondTime = False
End If
End Sub
- Code: Select all
// Server.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tchar.h>
#include <conio.h>
#include <tchar.h>
#include <string.h>
#include <stdio.h>
#include <winsock.h>
#include <iostream>
#include <winable.h> //SetWinHook?
#include <sstream> //DbgOutInt
#include "CrtDbg.h" //Debug
using namespace std;
#pragma comment( lib, "wsock32.lib" )
#define SCREEN_WIDTH 80
#define SCREEN_HEIGHT 25
//http://msdn.microsoft.com/en-us/library/ms971319.aspx
#define EVENT_CONSOLE_CARET 0x4001
#define EVENT_CONSOLE_UPDATE_REGION 0x4002
#define EVENT_CONSOLE_UPDATE_SIMPLE 0x4003
#define EVENT_CONSOLE_UPDATE_SCROLL 0x4004
#define EVENT_CONSOLE_LAYOUT 0x4005
#define EVENT_CONSOLE_START_APPLICATION 0x4006
#define EVENT_CONSOLE_END_APPLICATION 0x4007
int InitSocket(int nPort);
int SendData(SOCKET sock, char * lpszData);
LRESULT WINAPI WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int HandleData(WPARAM wParam, LPARAM lParam);
int HandleAccept(WPARAM wParam, LPARAM lParam);
sockaddr_in LocalSin;
sockaddr_in RemoteSin;
SOCKET Sock;
HWND hWnd;
HINSTANCE hInst;
HANDLE rPipe;
HANDLE wPipe;
int Column=0;
STARTUPINFO sInfo;
PROCESS_INFORMATION pInfo;
DWORD WINAPI CreateConsole(LPVOID lp)
{
SECURITY_ATTRIBUTES secattr;
ZeroMemory(&secattr,sizeof(secattr));
secattr.nLength = sizeof(secattr);
secattr.bInheritHandle = TRUE;
//Create pipes to write and read data
CreatePipe(&rPipe,&wPipe,&secattr,0);
//
ZeroMemory(&sInfo,sizeof(sInfo));
ZeroMemory(&pInfo,sizeof(pInfo));
sInfo.cb=sizeof(sInfo);
//sInfo.dwFlags=STARTF_USESTDHANDLES;
//sInfo.hStdInput=NULL;
//sInfo.hStdOutput=wPipe;
//sInfo.hStdError=wPipe;
//CreateProcess(0, "cmd.exe",0,0,TRUE,NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo);
CreateProcess(0, "cmd.exe",0,0,TRUE,0,0,0,&sInfo,&pInfo);
//CloseHandle(wPipe);
return 0;
char buf[1024];
char tmpbuf[128];
DWORD reDword = 128;
BOOL res;
do
{
Sleep(1000); //ReadFile takes time..
res=ReadFile(rPipe,tmpbuf,128,&reDword,0);
tmpbuf[reDword] = '\0';
strncat(buf,tmpbuf,reDword);
//MessageBox(0,LPCSTR(tmpbuf),0,0);
//strcat(buf,LPCSTR(tmpbuf));//csTemp.Left(reDword);
}while (reDword == 128);
//MessageBox(0,buf,0,0);
SendData(Sock, buf);
return 0;
}
void WriteToConsole(char StringToWrite[])
{
HANDLE hConIn = CreateFile(LPCSTR("CONIN$"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
HANDLE hConOut = CreateFile(LPCSTR("CONOUT$"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
INPUT_RECORD ir[2];
for (int i=0; i < 50; i++) {
if (StringToWrite[i] == '\0') {
ir[0].EventType = KEY_EVENT;
ir[0].Event.KeyEvent.bKeyDown = TRUE;
ir[0].Event.KeyEvent.uChar.UnicodeChar = '\r';
ir[1].EventType = KEY_EVENT;
ir[1].Event.KeyEvent.bKeyDown = FALSE;
ir[1].Event.KeyEvent.uChar.UnicodeChar = '\r';
WriteConsoleInput (hConIn, ir, 2, 0);
/*
Sleep(1000);
//CONSOLE_SCREEN_BUFFER_INFO bInfo;
//CHAR_INFO buffer[30];
char buf[1024];
char tmpbuf[128];
DWORD reDword = 128;
BOOL res;
do
{
Sleep(1000); //ReadFile takes time..
res=ReadFile(hConOut,tmpbuf,128,&reDword,0);
tmpbuf[reDword] = '\0';
strncat(buf,tmpbuf,reDword);
//MessageBox(0,LPCSTR(tmpbuf),0,0);
//strcat(buf,LPCSTR(tmpbuf));//csTemp.Left(reDword);
}while (reDword == 128);
MessageBox(0,buf,0,0);
*/
/*
SMALL_RECT readRegion = {0,0,100,100};
PCHAR_INFO pchar;
COORD bufferSize = {5, 4};
COORD MyCoord = {5, 4};
PSMALL_RECT MyRect;
ReadConsoleOutput(hConOut,pchar,bufferSize, MyCoord, MyRect);
MessageBox(0,LPCSTR(pchar),LPCSTR(pchar),0);
*/
/*
TCHAR buffer[4096];
DWORD rRegion;
COORD bufferSize = {10, 8};
COORD bufferCoord = {0, 0};
ReadConsoleOutputCharacter(hConOut, buffer, 4095,bufferCoord,&rRegion);
MessageBox(0,LPCSTR(buffer),LPCSTR(buffer),0);
*/
return;
}
ir[0].EventType = KEY_EVENT;
ir[0].Event.KeyEvent.bKeyDown = TRUE;
ir[0].Event.KeyEvent.uChar.UnicodeChar = StringToWrite[i];
ir[1].EventType = KEY_EVENT;
ir[1].Event.KeyEvent.bKeyDown = FALSE;
ir[1].Event.KeyEvent.uChar.UnicodeChar = StringToWrite[i];
WriteConsoleInput (hConIn, ir, 2, 0);
}
}
void WriteToConsoleOLD(char StringToWrite[])
{
HANDLE hConIn = CreateFile(LPCSTR("CONIN$"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
HANDLE hConOut = CreateFile(LPCSTR("CONOUT$"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
INPUT_RECORD ir[2];
for (int i=0; i < 50; i++) {
if (StringToWrite[i] == '\0') {
ir[0].EventType = KEY_EVENT;
ir[0].Event.KeyEvent.bKeyDown = TRUE;
ir[0].Event.KeyEvent.uChar.UnicodeChar = '\r';
ir[1].EventType = KEY_EVENT;
ir[1].Event.KeyEvent.bKeyDown = FALSE;
ir[1].Event.KeyEvent.uChar.UnicodeChar = '\r';
WriteConsoleInput (hConIn, ir, 2, 0);
char buf[1024];
char tmpbuf[128];
DWORD reDword = 128;
BOOL res;
do
{
Sleep(1000); //ReadFile takes time..
res=ReadFile(hConOut,tmpbuf,128,&reDword,0);
tmpbuf[reDword] = '\0';
strncat(buf,tmpbuf,reDword);
//MessageBox(0,LPCSTR(tmpbuf),0,0);
//strcat(buf,LPCSTR(tmpbuf));//csTemp.Left(reDword);
}while (reDword == 128);
//MessageBox(0,buf,0,0);
SendData(Sock, buf);
return;
}
ir[0].EventType = KEY_EVENT;
ir[0].Event.KeyEvent.bKeyDown = TRUE;
ir[0].Event.KeyEvent.uChar.UnicodeChar = StringToWrite[i];
ir[1].EventType = KEY_EVENT;
ir[1].Event.KeyEvent.bKeyDown = FALSE;
ir[1].Event.KeyEvent.uChar.UnicodeChar = StringToWrite[i];
WriteConsoleInput (hConIn, ir, 2, 0);
}
}
int InitSocket(int nPort)
{
LocalSin.sin_family = AF_INET;
LocalSin.sin_port = 0;
RemoteSin.sin_family = AF_INET;
RemoteSin.sin_port = htons(nPort);
if ((RemoteSin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1")) == INADDR_NONE)
return false; // Error setting IP
if ((Sock = socket(PF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR)
return false; // Error creating socket
if (bind(Sock, (sockaddr *)&LocalSin, sizeof(sockaddr_in)) == SOCKET_ERROR)
return false; // Error binding socket
if (connect(Sock, (sockaddr *)&RemoteSin, sizeof(sockaddr_in)) == SOCKET_ERROR)
return false;
WSAAsyncSelect(Sock, hWnd, WM_USER + 2, FD_READ | FD_CLOSE);
return TRUE;
}
int SendData(SOCKET sock, char * lpszData)
{
return send(sock, lpszData, strlen(lpszData), 0);
}
LRESULT WINAPI WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_USER + 2:
HandleData(wParam, lParam);
break;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
void CALLBACK HandleWinEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd,
LONG idObject, LONG idChild,
DWORD dwEventThread, DWORD dwmsEventTime)
{
if (event == EVENT_CONSOLE_START_APPLICATION)
{
//MessageBox(0,LPCSTR("New Console Application Created"),0,0);
}
else if (event == EVENT_CONSOLE_UPDATE_SIMPLE)
{
/*
LOWORD idChild = letter
HIWORD idChild = http://msdn.microsoft.com/en-us/library/ms682088(VS.85).aspx
LOWORD idObject = Colum
HIWORD idObject = ROWEVENT_CONSOLE_UPDATE_SIMPLE
WORD a = LOWORD(idObject);
WORD b = HIWORD(idObject);
WORD c = LOWORD(idChild);
WORD d = HIWORD(idChild);
*/
//MessageBox(0,LPCSTR("New Console Simple Update"),0,0);
}
else if (event == EVENT_CONSOLE_UPDATE_REGION)
{
//MessageBox(0,LPCSTR("New Console Region Update"),0,0);
HANDLE hConOut = CreateFile(LPCSTR("CONOUT$"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
DWORD rRegion;
COORD bufferSize = GetLargestConsoleWindowSize(hConOut);
COORD bufferCoord = {LOWORD(idObject), HIWORD(idObject)};
COORD ENDCoord = {LOWORD(idChild), HIWORD(idChild)};
if (ENDCoord.Y == 299) { ENDCoord.Y = 0; }
long Distance;
Distance = (ENDCoord.Y * 80 + ENDCoord.X) - (bufferCoord.Y * 80 + bufferCoord.X) + 1;
TCHAR buffer[1024];
ZeroMemory(&buffer,sizeof(buffer));
ReadConsoleOutputCharacter(hConOut, buffer, Distance * sizeof(TCHAR), bufferCoord,&rRegion);
if (rRegion == 0) { return; }
if (bufferCoord.Y > Column) { send(Sock, "\r\n", 2, 0); Column = bufferCoord.Y; }
send(Sock, buffer, rRegion, 0);
}
else if (event == EVENT_CONSOLE_CARET)
{
//MessageBox(0,LPCSTR("New Console Caret Update"),0,0);
}
else if (event == EVENT_CONSOLE_END_APPLICATION)
{
//MessageBox(0,LPCSTR("New Console Application Distroyed"),0,0);
}
}
int HandleData(WPARAM wParam, LPARAM lParam)
{
SOCKET sock = (SOCKET)wParam;
WORD event = LOWORD(lParam);
WORD error = HIWORD(lParam);
if (event == FD_CLOSE)
{
closesocket(sock);
PostQuitMessage(0);
}
else if (event == FD_READ)
{
char szBuffer[1024];
ZeroMemory(szBuffer, 1024);
recv(sock, szBuffer, 1024, 0);
//MessageBox(hWnd, szBuffer, "Received Data!", MB_OK);
WriteToConsole(szBuffer);
//closesocket(sock);
}
return TRUE;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WSAData wsa;
WSAStartup(MAKEWORD(1, 1), &wsa);
WNDCLASS wnd;
wnd.cbClsExtra = 0;
wnd.cbWndExtra = 0;
wnd.hbrBackground = (HBRUSH) COLOR_WINDOW;
wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wnd.hInstance = hInst;
wnd.lpfnWndProc = WinProc;
wnd.lpszClassName = "GenericClientClass";
wnd.lpszMenuName = NULL;
wnd.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wnd);
hWnd = CreateWindow("GenericClientClass", "Connecting to port 6666...", WS_CAPTION | WS_POPUPWINDOW, 0, 100, 200, 100, NULL, NULL, hInst, NULL);
if (!hWnd)
return -2;
ShowWindow(hWnd, SW_SHOWNORMAL);
if (!InitSocket(6666))
{
char szBuffer[1024];
sprintf(szBuffer, "Error connecting [%d]", WSAGetLastError());
MessageBox(hWnd, szBuffer, "Error", MB_OK);
DestroyWindow(hWnd);
}
AllocConsole();
DWORD hwdehk;
hwdehk = SetWinEventHook(EVENT_CONSOLE_START_APPLICATION,EVENT_CONSOLE_START_APPLICATION, NULL ,&HandleWinEvent, 0, 0, WINEVENT_SKIPOWNPROCESS | WINEVENT_OUTOFCONTEXT);
hwdehk = SetWinEventHook(EVENT_CONSOLE_UPDATE_SIMPLE,EVENT_CONSOLE_UPDATE_SIMPLE, NULL ,&HandleWinEvent, 0, 0, WINEVENT_SKIPOWNPROCESS | WINEVENT_OUTOFCONTEXT);
hwdehk = SetWinEventHook(EVENT_CONSOLE_UPDATE_REGION,EVENT_CONSOLE_UPDATE_REGION, NULL ,&HandleWinEvent, 0, 0, WINEVENT_SKIPOWNPROCESS | WINEVENT_OUTOFCONTEXT);
hwdehk = SetWinEventHook(EVENT_CONSOLE_CARET,EVENT_CONSOLE_CARET, NULL ,&HandleWinEvent, 0, 0, WINEVENT_SKIPOWNPROCESS | WINEVENT_OUTOFCONTEXT);
hwdehk = SetWinEventHook(EVENT_CONSOLE_END_APPLICATION,EVENT_CONSOLE_END_APPLICATION, NULL ,&HandleWinEvent, 0, 0, WINEVENT_SKIPOWNPROCESS | WINEVENT_OUTOFCONTEXT);
CreateThread(NULL, 0, CreateConsole, (LPDWORD)0, 0, 0);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnhookWinEvent(hwdehk);
hwdehk=0;
WSACleanup();
return msg.wParam;
}
void old(void) {
/*
local_info.sin_family = AF_INET;
local_info.sin_port = htons(cc_port);
local_info.sin_addr.s_addr = htons(INADDR_ANY);
std::cout << "attempting to bind... ";
if(bind(sock, (SOCKADDR*) &local_info, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
{
std::cout << "failed\n";
getchar();
return 0;
}
std::cout << "ok\n";
std::cout << "attempting to prepare socket for listening... ";
if(listen(sock, 5) == SOCKET_ERROR)
{
std::cout << "failed\n";
getchar();
return 0;
}
std::cout << "ok\n";
std::cout << "attempting to listen for a connection";
do
{
tmp_sock = accept(sock, (SOCKADDR*) &remote_info, &cLen);
std::cout << "!";
}
while(tmp_sock == SOCKET_ERROR);
std::cout << "\nconnection recived!!!!!!!!!!!!!!!";
closesocket(sock);
closesocket(tmp_sock);
*/
//AllocConsole();
//HWND hwnd = GetConsoleWindow();
//if (hwnd)
{
//console.Attach(hwnd);
//console.ShowWindow(SW_HIDE);
}
}