Unregistered
|
Вот код на Visual C++. Помогите переделать на Builder Вот весь архив с программой http://val-rud.narod.ru/net_local_src.rarИ ее bin http://val-rud.narod.ru/net_local_bin.rar| Код |
#define UNICODE #include <windows.h> #include <commctrl.h> #include <process.h> #include "resource.h" #include <lm.h> #include <sys/stat.h>
#define NUM_BITMAPS 3 #define BITMAP_WIDTH 16 #define BITMAP_HEIGHT 16 #define ID_TREEVIEW 1000
#define GO 11011 #define BACK 11012 #define ADDR_EDIT 11013 #define CLR 11014 #define FND 11015 #define FND_EDIT 11016 #define MAX_TEXT 64
#define START 0
HWND But,ProgPath, hWndB_go, hWndB_back,hWndTxt1,hWndTxt2, hwndTab, hwndMain, hWndEdit, hWndB_clear, hWndB_fnd, hWndfndEdit, hWndTxt3; u_short szWndName[] = L"Поиск доступных сетевых ресурсов";
HINSTANCE g_hinst; u_short *nbName; BOOL FIND_FILES = FALSE;
int fnd = 0;
typedef struct tagIPINFO { u_char Ttl; u_char Tos; u_char IPFlags; u_char OptSize; u_char *Options; }IPINFO;
typedef IPINFO* PIPINFO;
typedef struct tagICMPECHO { u_long Source; u_long Status; u_long RTTime; u_short DataSize; u_short Reserved; void FAR *pData; IPINFO ipInfo; }ICMPECHO;
typedef ICMPECHO* PICMPECHO;
int idxFirstImage, fndbuf_len;
char shablon_buf[24]; u_short shablon_buf_w[12], *fnd_buf = NULL; void *hThread;
int g_bad, g_find, g_success, g_finish, g_start;
BOOL bValid, g_bIsVisible = FALSE;
char *TextCombo; HIMAGELIST hIml; SOCKET s; HWND hwndTree; int l_oct; static HCURSOR hCurCursor = NULL; HIMAGELIST himl;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); VOID PingThreadProc( LPVOID lpvResult ); VOID PingFndThreadProc( LPVOID lpvResult ); BOOL set_address( char *hname, struct sockaddr_in *sap ); HANDLE (WINAPI *pIcmpCreateFile)(VOID); BOOL (WINAPI *pIcmpCloseHandle)(HANDLE); DWORD (WINAPI *pIcmpSendEcho)(HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD); BOOL Ping(char* strHost); BOOL InitTreeViewImageLists(HWND hwndTV) ; HTREEITEM AddItemToTree(HWND hwndTV, u_short *lpszItem, int nLevel, BOOL rezalt); BOOL InitTreeViewItems(HWND hwndTV, LPSTR lpszFileName) ; HWND CreateTreeView(HWND hwndParent, PRECT cr); BOOL DoShare (u_short *srvname); BOOL DoFndShare (u_short *srvname, u_short *file_name); u_short * IpToNBName( char *ip_name ); char *NetBiosName( char * nb_name ); HTREEITEM AddItem(HWND, u_short *, int, int); HWND UpdateTreeView(HWND hwndParent, PRECT rcClient ); int FindInDir( u_short *dirName, u_short *file_name );
HWND CreateBut(HWND hwnd2, INT x, INT y, INT w, INT h, u_short *name, INT comd) { HWND ww;
ww = CreateWindowEx(WS_EX_CONTROLPARENT, L"BUTTON", name, WS_VISIBLE | WS_CHILD | WS_TABSTOP , x, y, w, h, hwnd2, (HMENU) comd, (HINSTANCE) GetWindowLong(hwnd2, GWL_HINSTANCE), NULL);
HDC hdc = GetDC(ww);
HFONT font = CreateFont( (GetDeviceCaps(hdc, LOGPIXELSY) * 10) / 72, 0, 0, 0, FW_NORMAL, 0, 0, 0, 0, 0, 0, 0, 0, L"MS Sans Serif");
SendMessage( ww, WM_SETFONT, (WPARAM)font, TRUE ); ReleaseDC(ww, hdc );
return ww; }
HWND CreateEdit(HWND hwnd2, INT x, INT y, INT w, INT h, u_short *name, INT comd) { HWND ww;
ww = CreateWindowEx( WS_EX_CLIENTEDGE, L"EDIT", name, WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP |ES_AUTOHSCROLL , // styles x, y, w, h, hwnd2, (HMENU) comd, (HINSTANCE) GetWindowLong(hwnd2, GWL_HINSTANCE), NULL);
HDC hdc = GetDC(ww);
HFONT font = CreateFont( (GetDeviceCaps(hdc, LOGPIXELSY) * 10) / 72, 0, 0, 0, FW_NORMAL, 0, 0, 0, 0, 0, 0, 0, 0, L"MS Sans Serif");
SendMessage( ww, WM_SETFONT, (WPARAM)font, TRUE ); SetTextColor(hdc, RGB(255, 0, 0)); ReleaseDC(ww, hdc );
return ww; }
HWND CreateText(HWND hwnd2, INT x, INT y, INT w, INT h, u_short *name ) { HWND ww;
ww = CreateWindow( L"STATIC", name, WS_VISIBLE | WS_CHILD | CS_OWNDC, x, y, w, h, hwnd2, (HMENU) 99, (HINSTANCE) GetWindowLong(hwnd2, GWL_HINSTANCE), NULL);
HDC hdc = GetDC(ww);
HFONT font = CreateFont( (GetDeviceCaps(hdc, LOGPIXELSY) * 10) / 72, 0, 0, 0, FW_NORMAL, 0, 0, 0, 0, 0, 0, 0, 0, L"MS Sans Serif"); ReleaseDC(ww, hdc );
SendMessage( ww, WM_SETFONT, (WPARAM)font, TRUE );
return ww; }
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, char *szCmdLine, int iCmdShow) { HWND hwnd ; MSG msg ; WNDCLASS wc; static LPCTSTR lpszAppName = L"MAINICO"; wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(hInstance, lpszAppName); wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) COLOR_WINDOW; wc.lpszMenuName = NULL; wc.lpszClassName = L"DEMO";
g_hinst = hInstance;
RegisterClass(&wc);
DEVMODE dm; ZeroMemory(&dm, sizeof(dm)); dm.dmSize = sizeof(dm);
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm);
hwnd = CreateWindowEx ( WS_EX_DLGMODALFRAME, L"DEMO", szWndName, WS_OVERLAPPEDWINDOW, (dm.dmPelsWidth - 580)/2, (dm.dmPelsHeight - 400)/2, 580, 400, NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, SW_SHOW) ; UpdateWindow (hwnd) ; hwndMain = hwnd;
while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; }
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { HANDLE hndlIcmp = NULL; WORD wVersionRequested; DWORD dwThreadID; DWORD lpvResult = 0; RECT cr;
switch (iMsg) {
case WM_CREATE :
s = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
bValid = FALSE; WSADATA wsaData; int nRet;
hndlIcmp = LoadLibrary(L"ICMP.DLL"); if (hndlIcmp == NULL) { MessageBox(NULL, L"Could not load ICMP.DLL", L"Error:", MB_OK); exit(-1); }
pIcmpCreateFile = (HANDLE (WINAPI *)(void)) GetProcAddress((HMODULE)hndlIcmp,"IcmpCreateFile");
pIcmpCloseHandle = (BOOL (WINAPI *)(HANDLE)) GetProcAddress((HMODULE)hndlIcmp,"IcmpCloseHandle");
pIcmpSendEcho = (DWORD (WINAPI *)(HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD)) GetProcAddress((HMODULE)hndlIcmp,"IcmpSendEcho");
if (pIcmpCreateFile == NULL || pIcmpCloseHandle == NULL || pIcmpSendEcho == NULL) { MessageBox(NULL, L"Error loading ICMP.DLL", L"Error:", MB_OK); FreeLibrary((HMODULE)hndlIcmp); exit(-1); }
wVersionRequested = MAKEWORD( 2, 2 ); nRet = WSAStartup( wVersionRequested, &wsaData ); if ( nRet != 0 ) { MessageBox(NULL, L"Error WSAStartup", L"Error:", MB_OK); FreeLibrary((HMODULE)hndlIcmp); exit(-1); } bValid = TRUE;
GetClientRect( hwnd, &cr );
hWndTxt1 = CreateText(hwnd, cr.left + 5, 5, 60, 20, L"Подсеть -"); hWndEdit = CreateEdit(hwnd, cr.left + 65, 5, 95, 20, L"192.168.???.", ADDR_EDIT); hWndTxt2 = CreateText(hwnd, cr.left + 65, 5, 80, 20, L""); ShowWindow( hWndTxt2, SW_HIDE ); hWndTxt3 = CreateText(hwnd, cr.left + 160, 5, 55, 20, L"Шаблон -"); ShowWindow( hWndTxt3, SW_HIDE ); hWndfndEdit = CreateEdit(hwnd, cr.left + 210, 5, 80, 20, L"", FND_EDIT); ShowWindow( hWndfndEdit, SW_HIDE ); hWndB_go = CreateBut(hwnd, cr.left + 300, 5, 50, 20, L"Поиск", GO); hWndB_back = CreateBut(hwnd, cr.left + 350, 5, 50, 20, L"Выход", BACK); hWndB_clear = CreateBut(hwnd, cr.left + 400, 5, 70, 20, L"Очистить", CLR); hWndB_fnd = CreateBut(hwnd, cr.left + 470, 5, 100, 20, L"Искать файл ...", FND); hwndTree = CreateTreeView(hwnd, &cr) ;
break; case WM_DESTROY : WSACleanup(); if ( hndlIcmp!= INVALID_HANDLE_VALUE ) FreeLibrary((HMODULE)hndlIcmp); if (hThread != NULL) TerminateThread( hThread, 0 ); PostQuitMessage (0) ; break;
case WM_COMMAND: int shablon_buf_len; u_short but_txt[7]; switch( LOWORD(wParam)) { case GO : shablon_buf_len = SendMessage( hWndEdit, WM_GETTEXTLENGTH, (WPARAM)0, (LPARAM)0 ); if (shablon_buf_len > 12) { MessageBox(NULL, L"To many data", L"Error:", MB_OK); break; } // EnableWindow( hWndB_clear, FALSE );
SendMessage( hWndEdit, WM_GETTEXT, (WPARAM)14, (LPARAM)shablon_buf_w ); SendMessage( hWndB_back, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"Отмена" ); WideCharToMultiByte( CP_ACP, 0, (u_short*)shablon_buf_w, 12, shablon_buf, 12, NULL, NULL ); ShowWindow( hWndEdit, SW_HIDE ); ShowWindow( hWndTxt2, SW_SHOW ); SendMessage( hWndTxt1, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"Пробиваю" ); if(FIND_FILES) { fndbuf_len = SendMessage( hWndfndEdit, WM_GETTEXTLENGTH, (WPARAM)0, (LPARAM)0 ); if (fndbuf_len > 64) { MessageBox(NULL, L"To many data", L"Error:", MB_OK); break; } fnd_buf = (u_short*)VirtualAlloc( NULL, fndbuf_len + 2, MEM_COMMIT, PAGE_READWRITE ); SendMessage( hWndfndEdit, WM_GETTEXT, (WPARAM)fndbuf_len + 2, (LPARAM)fnd_buf ); hThread = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE)PingFndThreadProc, (LPVOID)hwnd, (DWORD)hwndTab, (LPDWORD)&dwThreadID); EnableWindow( hWndfndEdit, FALSE ); } else hThread = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE)PingThreadProc, (LPVOID)hwnd, (DWORD)hwndTab, (LPDWORD)&dwThreadID); EnableWindow( hWndB_go, FALSE ); EnableWindow( hWndB_clear, FALSE ); EnableWindow( hWndB_fnd, FALSE ); // if (FIND_FILES) // EnableWindow( hWndfndEdit, FALSE ); break;
case WM_CLOSE: WSACleanup(); FreeLibrary((HMODULE)hndlIcmp); TerminateThread( hThread, 0 ); break;
case BACK: if (fnd_buf != NULL) VirtualFree( fnd_buf, 0, MEM_RELEASE ); SendMessage( hWndB_back, WM_GETTEXT, (WPARAM)12, (LPARAM)but_txt ); if ( (lstrcmp(but_txt, L"Выход")) == 0) { WSACleanup(); FreeLibrary((HMODULE)hndlIcmp); exit(0); } TerminateThread( hThread, 0 ); // AddItem(hwndTree, L"Поиск завершен!!!", 1, 4); SendMessage( hWndB_back, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"Выход" ); EnableWindow( hWndB_clear, TRUE ); SendMessage( hWndTxt1, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"Подсеть -" ); ShowWindow( hWndTxt2, SW_HIDE ); ShowWindow( hWndEdit, SW_SHOW ); SendMessage( hWndEdit, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"192.168.???." ); EnableWindow( hWndB_fnd, TRUE ); EnableWindow( hWndB_clear, TRUE ); if (FIND_FILES) { EnableWindow( hWndfndEdit, TRUE ); ShowWindow( hWndfndEdit, SW_HIDE ); ShowWindow( hWndTxt3, SW_HIDE ); FIND_FILES = FALSE; } break;
case CLR: DestroyWindow(hwndTree); GetClientRect( hwnd, &cr ); hwndTree = UpdateTreeView(hwnd, &cr); EnableWindow( hWndB_go, TRUE ); SendMessage( hWndTxt1, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"Подсеть -" ); SendMessage( hWndEdit, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"192.168.???." ); ShowWindow( hWndfndEdit, SW_HIDE ); ShowWindow( hWndTxt3, SW_HIDE ); EnableWindow( hWndB_fnd, TRUE ); break;
case FND: EnableWindow( hWndB_fnd, FALSE ); FIND_FILES = TRUE; ShowWindow( hWndfndEdit, SW_SHOW ); ShowWindow( hWndTxt3, SW_SHOW ); SendMessage( hWndB_back, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"Отмена" );
break;
} return 0;
case WM_SIZE: MoveWindow( hwndTree, 0, 30, LOWORD(lParam), HIWORD(lParam) - 30, TRUE );
break;
case WM_NOTIFY: switch (((LPNMHDR) lParam)->code) { case TVN_SELCHANGED: LPNMTREEVIEW pnmtv; pnmtv = (LPNMTREEVIEW) lParam; TVITEM item;
u_short txt[MAX_TEXT];
item.mask = TVIF_HANDLE | TVIF_TEXT; item.hItem = pnmtv->itemNew.hItem; item.pszText = txt; item.cchTextMax = MAX_TEXT;
if( TreeView_GetItem( hwndTree, &item ) ) { if(item.lParam == 1) break; HTREEITEM hParent = NULL; hParent = TreeView_GetParent( hwndTree, item.hItem ); if ( hParent == NULL) break; TVITEM pritem; u_short prtxt[MAX_TEXT]; pritem.mask = TVIF_HANDLE | TVIF_TEXT; pritem.hItem = hParent; pritem.pszText = prtxt; pritem.cchTextMax = MAX_TEXT; if( TreeView_GetItem( hwndTree, &pritem ) ) { lstrcat( pritem.pszText, L"\\"); lstrcat( pritem.pszText, item.pszText); ShellExecute( NULL, L"open", pritem.pszText, NULL, NULL, SW_SHOW ); }
} break;
default: break; } break; }
return DefWindowProc (hwnd, iMsg, wParam, lParam) ; }
int Ping(char* strHost) { DWORD *dwAddress; IPINFO ipInfo; ICMPECHO icmpEcho; HANDLE hndlFile; struct sockaddr_in sap;
if(!bValid) return FALSE;
if ( ! set_address( strHost, &sap ) ) return FALSE;
dwAddress = (DWORD *)&sap.sin_addr;
hndlFile = pIcmpCreateFile();
ipInfo.Ttl = 255; ipInfo.Tos = 0; ipInfo.IPFlags = 0; ipInfo.OptSize = 0; ipInfo.Options = NULL; icmpEcho.Status = 0;
pIcmpSendEcho( hndlFile, *dwAddress, NULL, 0, &ipInfo, &icmpEcho, sizeof(struct tagICMPECHO), 100);
if (icmpEcho.Status) return FALSE;
pIcmpCloseHandle(hndlFile);
return TRUE; }
int inet_aton( char *cp, struct in_addr *pin ) { int re; re = inet_addr( cp ); if ( re == -1 && strcmp( cp, "255.255.255.255" ) ) return 0; pin->s_addr = re; return 1; }
BOOL set_address( char *hname, struct sockaddr_in *sap ) { memset( sap, 0, sizeof( sockaddr_in ) ); sap->sin_family = AF_INET; if ( hname != NULL ) { if ( !inet_aton( hname, &sap->sin_addr ) ) return FALSE; return TRUE; } return FALSE; }
VOID PingThreadProc( LPVOID lpvResult ) { char shablon[15]; char four[4]; memset( shablon, 0, 15 ); lstrcpyA( &shablon[0], shablon_buf ); int numItems = 0; l_oct = START; BOOL share; int shablon_len = lstrlenA(shablon);
// hCurCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
AddItem(hwndTree, L"Поиск начат!!!", 1, 5); u_short *wch_addr = (u_short*)VirtualAlloc( NULL, 17, MEM_COMMIT, PAGE_READWRITE ); SendMessage( hWndTxt1, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"Пробиваю" ); while ( 1 ) { l_oct ++; if(l_oct == 255) { // EnableWindow( hWndB_clear, TRUE );
AddItem(hwndTree, L"Поиск завершен!!!", 1, 4); VirtualFree( wch_addr, 0, MEM_RELEASE ); SendMessage( hWndB_back, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"Выход" ); SendMessage( hWndTxt1, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"Подсеть -" ); ShowWindow( hWndTxt2, SW_HIDE ); ShowWindow( hWndEdit, SW_SHOW ); break; } memset(shablon + shablon_len, 0, 4); memset(four, 0, 4); itoa( l_oct, &four[0], 10 ); lstrcatA( shablon, four ); MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, shablon, -1, wch_addr, 34 ); SendMessage( hWndTxt2, WM_SETTEXT, (WPARAM)NULL, (LPARAM)wch_addr );
if ( Ping(shablon) ) { char *tmp_srv = NetBiosName( shablon ); if (tmp_srv != NULL) { char *tmp = (char*)VirtualAlloc( NULL, lstrlenA(tmp_srv) + 5, MEM_COMMIT, PAGE_READWRITE ); lstrcpyA( tmp, "\\\\"); lstrcatA( tmp, tmp_srv ); u_short *wch = (u_short*)VirtualAlloc( NULL, lstrlenA(tmp)*2, MEM_COMMIT, PAGE_READWRITE );
MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, tmp, -1, wch, lstrlenA(tmp) * 2 ); VirtualFree( tmp, 0, MEM_RELEASE ); share = DoShare( wch ); VirtualFree( wch, 0, MEM_RELEASE ); } } } // VirtualFree( wch_addr, 0, MEM_RELEASE ); ExitThread( 0 ); }
VOID PingFndThreadProc( LPVOID lpvResult ) { char shablon[15]; char four[4]; memset( shablon, 0, 15 ); lstrcpyA( &shablon[0], shablon_buf ); int numItems = 0; l_oct = START; BOOL share; int shablon_len = lstrlenA(shablon);
// hCurCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
AddItem(hwndTree, L"Поиск начат!!!", 1, 5); u_short *wch_addr = (u_short*)VirtualAlloc( NULL, 17, MEM_COMMIT, PAGE_READWRITE ); SendMessage( hWndTxt1, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"Пробиваю" ); while ( 1 ) { l_oct ++; if(l_oct == 255) { // EnableWindow( hWndB_clear, TRUE ); AddItem(hwndTree, L"Поиск завершен!!!", 1, 4); VirtualFree( wch_addr, 0, MEM_RELEASE ); SendMessage( hWndB_back, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"Выход" ); SendMessage( hWndTxt1, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"Шаблон для поиска -" ); EnableWindow( hWndB_clear, TRUE ); ShowWindow( hWndTxt2, SW_HIDE );  
|
|
|
|
| Правила форума "Центр помощи" |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!
- Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
- При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
- В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
- Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
- Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
- Помните: один топик - один вопрос!
- В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
- Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
- Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman
|
|
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
|
|
0 Пользователей:
|
|
« Предыдущая тема | Центр помощи | Следующая тема »
|
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности
Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |
|
|