Win32 API FAQ
Страница 20.


 

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();
}

 
« Предыдущая статья   Следующая статья »