|
Как сграбить экран?
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 (...), которая позволяет установить язык для текущего потока.
А вот пример на Visual C++ который показывает как использовать эту функцию (прислал Осадчий Константин):
*****************************************************************************************************
// NewWordDlg.cpp : implementation file
#include "stdafx.h"
#include "Diction.h"
#include "DictionSet.h"
#include "NewWordDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CNewWordDlg dialog
CNewWordDlg::CNewWordDlg(CDictionSet* prs,CWnd* pParent /*=NULL*/) : CDialog(CNewWordDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CNewWordDlg)
m_strRus = _T("");
m_strAngl = _T("");
//}}AFX_DATA_INIT
m_pSet = prs;
}
void CNewWordDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CNewWordDlg)
DDX_Control(pDX, IDCANCEL, m_ctrlCancel);
DDX_Control(pDX, IDOK, m_ctrlOk);
DDX_Text(pDX, IDC_RUS, m_strRus);
DDX_Text(pDX, IDC_ANGL, m_strAngl);
//}}AFX_DATA_MAP
DDX_Text(pDX, IDC_RUS, m_pSet->m_RusWord);
DDX_Text(pDX, IDC_ANGL, m_pSet->m_AnglWord);
}
BEGIN_MESSAGE_MAP(CNewWordDlg, CDialog)
//{{AFX_MSG_MAP(CNewWordDlg)
ON_EN_SETFOCUS(IDC_ANGL, OnSetfocusAngl)
ON_EN_SETFOCUS(IDC_RUS, OnSetfocusRus)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
// CNewWordDlg message handlers
BOOL CNewWordDlg::OnInitDialog()
{
CDialog::OnInitDialog();
lstrcpy(m_szLangOld, _T("\0"));
GetKeyboardLayoutName(m_szLangOld);
return TRUE;
}
void CNewWordDlg::OnSetfocusAngl()
{
DWORD dwLang = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
CString strMl; strMl.Format(_T("00000%x"), dwLang);
WORD mlwLang = LOWORD(dwLang);
dwLang = MAKELONG(mlwLang, mlwLang);
CString strLang; strLang.Format(_T("%x"), dwLang);
TCHAR szLang[10];
lstrcpy(szLang, _T("\0"));
GetKeyboardLayoutName(szLang);
if(strMl != szLang) {
lstrcpy(szLang, strLang);
ActivateKeyboardLayout(LoadKeyboardLayout(szLang, KLF_ACTIVATE | KLF_REPLACELANG), KLF_REORDER);
}
}
//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
void CNewWordDlg::OnSetfocusRus()
{
DWORD dwLang = MAKELANGID(LANG_RUSSIAN, SUBLANG_DEFAULT);
CString strMl; strMl.Format(_T("00000%x"), dwLang);
WORD mlwLang = LOWORD(dwLang);
dwLang = MAKELONG(mlwLang, mlwLang);
CString strLang; strLang.Format(_T("%x"), dwLang);
TCHAR szLang[10];
lstrcpy(szLang, _T("\0"));
GetKeyboardLayoutName(szLang);
if(strMl != szLang) {
lstrcpy(szLang, strLang);
ActivateKeyboardLayout(LoadKeyboardLayout(szLang, KLF_ACTIVATE | KLF_REPLACELANG), KLF_REORDER);
}
}
void CNewWordDlg::OnOK()
{
DWORD dwLang = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
WORD mlwLang = LOWORD(dwLang);
dwLang = MAKELONG(mlwLang, mlwLang);
CString strLang; strLang.Format(_T("%x"), dwLang);
TCHAR szLang[10];
lstrcpy(szLang, _T("\0"));
GetKeyboardLayoutName(szLang);
CString str = m_szLangOld;
if(str != szLang) {
lstrcpy(szLang, strLang);
ActivateKeyboardLayout(LoadKeyboardLayout(szLang, KLF_ACTIVATE | KLF_REPLACELANG), KLF_REORDER);
}
CDialog::OnOK();
}
void CNewWordDlg::OnCancel()
{
DWORD dwLang = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
WORD mlwLang = LOWORD(dwLang);
dwLang = MAKELONG(mlwLang, mlwLang);
CString strLang; strLang.Format(_T("%x"), dwLang);
TCHAR szLang[10];
lstrcpy(szLang, _T("\0"));
GetKeyboardLayoutName(szLang);
CString str = m_szLangOld;
if(str != szLang) {
lstrcpy(szLang, strLang);
ActivateKeyboardLayout(LoadKeyboardLayout(szLang, KLF_ACTIVATE | KLF_REPLACELANG), KLF_REORDER);
}
CDialog::OnCancel();
}
*****************************************************************************************************
Как программно сделать 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);
|
|