Visual C++ / FAQ Part 2

Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru

Как сграбить экран?


1. Клавиша Alt+Print Screen (не забывайте, что эффект распространяется только на текущее окно)
2. С помощью MFC это делается командами GetDC(GetDesktopWindow), затем BitBlt куда надо. RTFM: BitBlt, CreateCompatibleDC, CreateCompatibleBitmap:

     hDc = GetDC(hWndScr);
     hMemDc = CreateCompatibleDC(hDc);
     hBmpNew = CreateCompatibleBitmap(hDc, 500, 500);
     hBmpOld = SelectObject(hMemDc, hBmpNew);
     BitBlt(hMemDc, 0, 0, 500, 500, hDc, 0, 0, SRCCOPY);
Как сделать надпись перевернутую на 90 градусов?


Все как обычно, только в структуре LOGFONT установить (только TrueType шрифты):
lfOrientation = lfEscapement =900 - угол, в десятых долях град.
Кстати, Escapement приводит в повороту строки на 90 градусов, а Orientation - каждой буквы.
lfClipPrecision = CLIP_LH_ANGLES; - не забудьте установить этот флаг (под NT можно без него, а под 95/98 - никак)

Как, например, сетевую карту "отключить в данной конфигурации" через Win32 API?


Мой компьютеp->Свойства->Устpойства->NetCard->Отключено в данной конфигypации можно сделать программно:
Если в Win95 DiChangeState(lpdi, DICS_DISABLE, DICS_FLAG_CONFIGSPECIFIC); - только yчтите, что setupx.dll 16-битовая
Если в 98 или nt SetupDiChangeState

Как сделать так, чтобы _ресурсы_ dll были видны в пользующей его программе?


HGLOBAL LoadResource(
    HMODULE  hModule, // хэндл модуля, откуда гpузишь pесуpс
    HRSRC  hResInfo  // идентификатоp pесуpса.
                                     );
То есть для того, чтобы загpузить pесуpсы из DLL, тебе надо загpузить DLL, а полученный хэндл использовать в LoadRecource

Как запустить текущего e-mail клиента?


::ShellExecute(NULL,NULL,"mailto:any@mail.ru?subject=how",NULL,NULL,SW_SHOWNORMAL);

Как сделать, чтобы некотоpое пpиложение не показывалось в Task Bar, System Tray и в списке по Ctrl+Alt+Del?


/*apphider.cpp*/
/* Alexey Chubar & Paul Ishenin*/
#pragma hdrstop
#include <condefs.h>
#include <windows.h>
#include <tlhelp32.h>
#include <string.h>
#include <stdlib.h>
USELIB("KERNEL32.lib");
#pragma argsused
extern "C" __stdcall DWORD RegisterServiceProcess(DWORD dwProcessID, DWORD
dwType);
char * ExtractFilePath(const char *Name)
{
 int i = strlen(Name), l = strlen(Name);
 char *res="\0";
 while ((i > 0)&&(Name[i] != '\\')) i--;
 if (i)
 {
   res = (char *)malloc(l - i);
   strcpy(res, Name + i + 1);
   res[l-i-1] = '\0';
 }
 return res;
}
void HideApp(DWORD dwProcessID)
{
 HWND MyHandle = GetTopWindow(0);
 DWORD WindowProcess;
 while (MyHandle != NULL)
 {
   if ((GetWindowThreadProcessId(MyHandle, &WindowProcess) != 0) &&
(WindowProcess == dwProcessID))
   {
    ShowWindow(MyHandle, SW_HIDE);
   }
   MyHandle = GetNextWindow(MyHandle, GW_HWNDNEXT);
 }
 RegisterServiceProcess(dwProcessID, 1);
}
DWORD __fastcall FindID(const char *FName)
{
 HANDLE h;
 PROCESSENTRY32 p;
 h=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 p.dwSize=sizeof(p);
 if(!Process32First(h,&p))
  return -1;
 if(strcmp(strlwr((char *)FName), strlwr(ExtractFilePath(p.szExeFile)))==0)
 {
    CloseHandle(h);
    return p.th32ProcessID;
  }
 while(Process32Next(h,&p))
  if(strcmp(strlwr((char *)FName), strlwr(ExtractFilePath(p.szExeFile)))==0)
  {
    CloseHandle(h);
    return p.th32ProcessID;
   }
  CloseHandle(h);
  return -1;
}
int main(int argc, char* argv[])
{
  if (argc > 1)
  {
   DWORD ProgID=FindID(argv[1]);
   if(ProgID != (DWORD)-1)
    HideApp(ProgID);
   }
   return 0;
}
или
  _asm{
   mov eax,1
   push eax
   dec eax
   push eax
   call dword ptr[pRegisterServiceProcess]
  }
А теперь более подробно. Невидимость по Alt-Tab:
 var  WnHnd   : Integer;
 WnHnd := GetWindowLong(Application.Handle, GWL_EXSTYLE);
 WnHnd := WnHnd or WS_EX_TOOLWINDOW; {Типа Tools-окно}
 SetWindowLong(Application.Handle, GWL_EXSTYLE, WnHnd);
Невидимость в Панели Задач:
 ShowWindow[Async](Application.Handle,SW_HIDE)
Как я могy закpыть пpиложение, запyщенное по ShellExecute?


Как любое другое: получить HWND его окна; по этому HWND получить ID процесса и TerminateProcess() & WM_CLOSE для окна.

Как программно переключить раскладку клавиатуры?


Используйте функцию ActivateKeyboardLayout (...), которая позволяет установить язык для текущего потока.

Как программно сделать eject для CD-ROM'a, ZIP'a?
BOOL EjectDrive95(char *path)
{
 HANDLE hDevice;
 DWORD dw;
 BOOL fResult;
 DIOC_REGISTERS reg;

 hDevice = CreateFile("\\\\.\\vwin32", 0, 0, NULL, 0,
FILE_FLAG_DELETE_ON_CLOSE, NULL);
 if (hDevice == INVALID_HANDLE_VALUE)
  return FALSE;
  reg.reg_EAX = 0x440D;
  reg.reg_EBX = toupper(path[0]) - 'A' + 1;
  reg.reg_ECX = 0x0849;
 fResult = DeviceIoControl(hDevice,
     VWIN32_DIOC_DOS_IOCTL,®, sizeof(reg),
     ®, sizeof(reg), &dw, 0);
 CloseHandle(hDevice);
 return fResult;
}

BOOL EjectDriveNT(char *path)
{
  HANDLE hDisk;
  DWORD dwRc;
  TCHAR tsz[8];
  SECURITY_ATTRIBUTES sa;

  wsprintf(tsz, TEXT("\\\\.\\%c:"), TEXT('@') + toupper(path[0]) - 'A' + 1);
  sa.nLength = sizeof(sa);
  sa.lpSecurityDescriptor = NULL;
  sa.bInheritHandle = TRUE;
  hDisk =  CreateFile(tsz, GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,&sa,
    OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);
  if (hDisk != INVALID_HANDLE_VALUE)
  {
  FlushFileBuffers(hDisk);
    return DeviceIoControl(hDisk, IOCTL_DISK_EJECT_MEDIA, NULL, 0, NULL, 0,&dwRc, NULL);
  }
  return FALSE;
}

Как убрать часы из SystemTray?


На время их можно убрать с помщью следующего кода:
  hClockWnd=FindWindowEx(FindWindowEx(FindWindowEx(NULL,NULL,"Shell_TrayWnd",NULL),
            NULL,"TrayNotifyWnd",NULL),NULL,"TrayClockWClass",NULL);
  if(hClockWnd!=NULL)
    ShowWindow(hClockWnd,SW_HIDE);

[ Назад | Оглавление | Далее ]









helloworld.ru © 2001-2021
Все права защищены