Страница 20 из 24 44)---------------------------------------------------------------------------- Q> Как узнать хэндл консольного окна? A> From: PSS ID Number: Q124103 HWND GetConsoleHwnd(void) { #define MY_BUFSIZE 1024 HWND hwndFound; char pszNewWindowTitle[MY_BUFSIZE]; char pszOldWindowTitle[MY_BUFSIZE]; //Запоминаем заголовок консоли GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE); //Делаем уникальную строку из всякой лабуды wsprintf(pszNewWindowTitle,"%d/%d", GetTickCount(), GetCurrentProcessId()); //Меняем заголовок на уникальный SetConsoleTitle(pszNewWindowTitle); //Немного подождем Sleep(40); //Находим хэндл hwndFound=FindWindow(NULL, pszNewWindowTitle); //Меняем загловок окна обратно SetConsoleTitle(pszOldWindowTitle); return(hwndFound); } 45)-------------------------------------------------------------------------- Q> Как активизировать любое окно(передать ему фокус ввода)? A> Есть недокументированная функция в user32.dll SwitchToThisWindow( HANDLE hWnd , BOOL Restore ); hWnd - хэндл окна Restore - развернуть окно,если оно минимизировано. 46)-------------------------------------------------------------------------- Q> Как стереть самого себя? A> Эта программа уничтожает саму себя. #include #include void DelSelf(void) { char modulename[MAX_PATH]; char batfile[MAX_PATH]; char batlines[MAX_PATH*4]; LPSTR tempdir; char Buf[MAX_PATH]; GetModuleFileName(NULL,modulename,MAX_PATH); tempdir = ((GetEnvironmentVariable(TEXT("TEMP"), Buf, MAX_PATH) > 0) ? Buf : NULL); strcpy(batfile,tempdir); strcat(batfile,"\\"); strcat(batfile,"delself.bat"); strcpy(batlines,"@echo off\n:try\ndel "); strcat(batlines,modulename); strcat(batlines,"\nif exist "); strcat(batlines,modulename); strcat(batlines," goto try\n"); strcat(batlines,"del "); strcat(batlines,batfile); DWORD NOfBytes; HANDLE hbf= CreateFile(batfile, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(hbf,batlines,strlen(batlines),&NOfBytes, NULL); CloseHandle(hbf); STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); si.wShowWindow = SW_HIDE; si.dwFlags = STARTF_USESHOWWINDOW; CreateProcess( NULL, batfile, NULL, NULL, FALSE, IDLE_PRIORITY_CLASS|DETACHED_PROCESS, NULL, NULL, &si, π); } void main() { DelSelf(); } |