API
void *fnMappingCreate(AnsiString sMappedName,long lSize,HANDLE *hFile, HANDLE *hFileMapping) { void *result = NULL; // 名前なしファイルのオープン *hFile = CreateFile( NULL, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_FLAG_SEQUENTIAL_SCAN, NULL ); // ファイルをメモリーマップドファイルにする *hFileMapping = CreateFileMapping( *hFile, NULL, // Security attributes PAGE_READWRITE, // Protection 0, // Size - high 32 bits lSize, // Size - low 32 bits sMappedName.c_str() ); if (*hFileMapping == NULL) { Application->MessageBox( "メモリの確保に失敗しました[1]", "警告", MB_ICONEXCLAMATION | IDYES ); ExitProcess(0); // プロセスを終了する } // ファイルをメモリー上にマップする result = MapViewOfFile( *hFileMapping, // File mapping object FILE_MAP_ALL_ACCESS, // Read/Write 0, // Offset - high 32 bits 0, // Offset - low 32 bits 0 ); // Map the whole thing if (result == NULL) { Application->MessageBox( "メモリの確保に失敗しました[2]", "警告", MB_ICONEXCLAMATION | IDYES ); ExitProcess(0); // プロセスを終了する } return result; }
[Delphi]
pCharでキャストすれば、String型をASCIZ文字列に変換出来ます。
function fnMappingCreate(string sMappedName, integer iSize,var hFileMapping: integer): pointer; var dlg: TForm; begin hFileMapping := CreateFileMapping( $ffffffff, // FileHandle Nil, // Security attributes PAGE_READWRITE, // Protection 0, // Size - high 32 bits iSize, // Size - low 32 bits pChar(sMappedName) ); // Name if hFileMapping < 0 then begin dlg := CreateMessageDialog('メモリの確保に失敗しました[1]','警告',mtError,[mbYes]); dlg.ActiveControl := TWinControl(dlg.FindComponent('Yes')); dlg.ShowModal; dlg.Free; ExitProcess(0); // プロセスを終了する end; result := MapViewOfFile( hFileMapping, // File mapping object FILE_MAP_ALL_ACCESS, // Read/Write 0, // Offset - high 32 bits 0, // Offset - low 32 bits 0 ); // Map the whole thing end;
void __fastcall TForm1::Button1Click(TObject *Sender) { HANDLE hToken; LUID takeOwnershipValue; TOKEN_PRIVILEGES tkp; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { ShowMessage("OpenProcessToken() failed"); return; } if (!LookupPrivilegeValue(0, SE_SHUTDOWN_NAME, &takeOwnershipValue)) { ShowMessage("LookupPrivilegeValue() failed"); return; } tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = takeOwnershipValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, false, &tkp, sizeof(TOKEN_PRIVILEGES), 0, 0); if (GetLastError()) { ShowMessage("AdjustTokenPrivileges() failed"); return; } // ExitWindowsEx(EWX_LOGOFF,0); // ログオフ ExitWindowsEx((EWX_SHUTDOWN | EWX_POWEROFF),0); // シャットダウンと電源OFF // ExitWindowsEx(EWX_REBOOT,0); // 再起動 // ExitWindowsEx(EWX_SHUTDOWN,0); // シャットダウン }
procedure TForm1.Button1Click(Sender: TObject); var hToken,ReturnLength : integer ; NewState,PreviousState : Ttokenprivileges ; begin OpenprocessToken(GetCurrentProcess(),(TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY),hToken) ; LookupPrivilegeValue(pchar(#0),pchar('SeShutdownPrivilege'),NewState.Privileges[0].Luid) ; NewState.PrivilegeCount := 1 ; NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED ; AdjustTokenPrivileges(hToken,false,NewState,16,PreviousState,ReturnLength) ; // ExitWindowsEx(EWX_LOGOFF,0); // ログオフ ExitWindowsEx((EWX_SHUTDOWN | EWX_POWEROFF),0); // シャットダウンと電源OFF // ExitWindowsEx(EWX_REBOOT,0); // 再起動 // ExitWindowsEx(EWX_SHUTDOWN,0); // シャットダウン end;
[unit1.h] class TForm1 : public TForm { __published: // IDE 管理のコンポーネント private: // ユーザー宣言 void __fastcall WMQueryEndSession(TWMQueryEndSession &WMQES); //これがイベントハンドラになる //このメッセージマップで、キャッチしたいメッセージ・引数の型・イベントハンドラ名を指定 BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_QUERYENDSESSION,TWMQueryEndSession,WMQueryEndSession) END_MESSAGE_MAP(TForm) };
[unip1.cpp] void __fastcall TForm1::WMQueryEndSession(TWMQueryEndSession &WMQES) { // ここにWindows終了直前にやりたいことを書く // 最後に、Windowsが終了してもいいかを指定 WMQES.Result = TRUE; //Windowsに「終了してもいいよ」と伝える WMQES.Result = FALSE; //Windowsの終了を禁止する }
[unit1.h] protected: void __fastcall WMLButtonDown(TWMLButtonDown &Msg); public: BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_LBUTTONDOWN,TWMLButtonDown,WMLButtonDown) END_MESSAGE_MAP(TForm)
[unit1.cpp] void __fastcall TForm1::WMLButtonDown(TWMLButtonDown &Msg) { SendMessage(Handle,WM_SYSCOMMAND,SC_MOVE | 2, 0); }
[unit1.h] protected: void __fastcall WMNCLButtonDown(TWMNCLButtonDown &msg); public: BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_NCLBUTTODOWN,TWMNCLButtonDown,WMNCLButtonDown) END_MESSAGE_MAP(TForm)
[unit1.cpp] void __fastcall TForm1::WMNCLButtonDown(TWMNCLButtonDown &msg) { TForm::Dispatch(&msg); if (msg.HitTest==HTCAPTION) { // ここに処理を書き込みます } }
[unit1.h] protected: void __fastcall WMGetMinMaxInfo(TWMGetMinMaxInfo &msg); public: BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_GETMINMAXINFO,TWMGetMinMaxInfo,WMGetMinMaxInfo) END_MESSAGE_MAP(TForm)
[unit1.cpp] void __fastcall TForm1::WMGetMinMaxInfo(TWMGetMinMaxInfo &msg) { msg.MinMaxInfo->ptMinTrackSize.x= 320; //最小サイズ msg.MinMaxInfo->ptMinTrackSize.y= 200; msg.MinMaxInfo->ptMaxTrackSize.x= 680; //最大サイズ msg.MinMaxInfo->ptMaxTrackSize.y= 400; msg.MinMaxInfo->ptMaxSize.x= 680; //最大化したときのサイズ msg.MinMaxInfo->ptMaxSize.y= 400; }
[unit1.h] protected: void __fastcall WMDropFiles(TWMDropFiles &msg); public: BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WMDropFiles) END_MESSAGE_MAP(TForm)
[unit1.cpp] #include <ShellAPI.h> //DragQueryFile,DragFinish,DragAcceptFilesを使う void __fastcall TForm1::WMDropFiles(TWMDropFiles &msg) { int n=DragQueryFile((HDROP)msg.Drop, -1, NULL, MAX_PATH); //ドラッグされたファイルの数 char fileName[MAX_PATH]; //ドラッグされたファイル名 for (int i=0 ; i<n ; i++) { DragQueryFile((HDROP)msg.Drop, i, file_name, MAX_PATH); //ドラッグされたファイル名を得る // ここに処理を書き込みます } DragFinish((HDROP)msg.Drop); } __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { DragAcceptFiles(Handle,true); //ドラッグアンドドロップの許可 }
[unit1.h] private: // ユーザー宣言 void __fastcall AppIdle(TObject*,bool &Done);
[unit1.cpp] __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Application->OnIdle= AppIdle; } void __fastcall TForm1::AppIdle(TObject*,bool &Done) { SetCapture(Handle); //カーソル座標を得る POINT p; GetCursorPos(&p); // Caption = "("+IntToStr(p.x)+","+IntToStr(p.y)+")"; // debug // ReleaseCapture(); // debug if ((p.x <= 0) || (p.y <= 0) || (p.x+1 >= Screen->Width) || (p.y+1 >= Screen->Height)) { // 画面端にきたとき POINT q = ClientOrigin; //カーソルの移動先 for (int i=0,j=10 ; i<j ; i++) { //少しずつ移動させる POINT s; s.x = (q.x-p.x)*i/j; s.y = (q.y-p.y)*i/j; SetCursorPos(p.x+s.x,p.y+s.y); DWORD t=GetTickCount()+10; // 10ミリ秒ウエイト while (GetTickCount() < t) Application->ProcessMessages(); } SetCursorPos(q.x,q.y); } Done= false; // 連続してこの関数を呼ぶ }
RECT rect; GetWindowRect(Handle, &rect); ClipCursor(&rect);
int n=3; for (n+=n ; n-- ; ) { FlashWindow(Handle,true); DWORD t = GetTickCount()+100; //0.1秒間隔 while (GetTickCount()<t) Application->ProcessMessages(); }
[C++Builder] WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, false, "Sample"); if ( hMutex != 0 ) { CloseHandle(hMutex); return 1; } else hMutex = CreateMutex(NULL, true, "Sample"); try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } ReleaseMutex(hMutex); return 0; }
[Delphi] program Project1; uses Forms, Windows, Unit1 in 'Unit1.pas' {Form1}; {$R *.RES} var hMutex: THANDLE; begin hMutex := OpenMutex(MUTEX_ALL_ACCESS, false, 'Sample'); if hMutex <> 0 then begin CloseHandle(hMutex); Exit; end; hMutex := CreateMutex(Nil, true, 'Sample'); Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; ReleaseMutex(hMutex); end.
[unit1.h] #define WM_TRAYICON (WM_USER +400) //だいたい void __fastcall WMTrayIcon(TMessage &mkey); BEGIN_MESSAGE_MAP MESSAGE_HANDLER( WM_TRAYICON, TMessage , WMTrayIcon) END_MESSAGE_MAP(TForm)
[アイコンを登録] NOTIFYICONDATA nid; nid.cbSize = sizeof( NOTIFYICONDATA ); nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP; // どれだけの機能を使うか nid.hWnd = Handle; // アイコンが出すメッセージを受けるウィンドウ strcpy( nid.szTip, "アイコンの上にカーソルを持ってきたときのヘルプ" ); nid.hIcon = Application->Icon->Handle; // 表示するアイコンのハンドル tnd.uID = (UINT)( 0 ); // アイコンをたくさん登録するときの識別子 nid.uCallbackMessage = WM_TRAYICON; Shell_NotifyIcon( NIM_ADD, &nid );
[アイコンを削除] 登録と同じ要領で NOTIFYICONDATA 構造体を設定し、ただし uFlags メンバーを 0 にします。 最後を「 Shell_NotifyIcon( NIM_DELETE, &nid ); 」に(一番目の因数が違うのに注意)。
[アイコンが出すメッセージの受け入れ関数] void __fastcall TForm1::WMTrayIcon( TMessage msg ) { if (msg.WParam == 0) { //msg.WParam には識別子 if (msg.LParam == WM_LBUTTONDOWN) { //msg.LParam にはウィンドウ・メッセージが入る // アイコンがクリックされたときの処理 } } }
HMENU hMenu = GetSystemMenu( Handle, false ); if (hMenu) { int mc = GetMenuItemCount(hMenu); if (mc > 0) { int mi = GetMenuItemID(hMenu, mc-1); EnableMenuItem(hM, mi, MF_GRAYED); //MF_ENABLEDにすると押せる } }
[実行] SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, true,0, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
[停止] SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, false,0, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
[状態の取得] long lActive = 0; SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0x00, &lActive, 0x00); if (lActive) { //動いている } else { //動いてない }
[unit1.h] private: // ユーザー宣言 void __fastcall WMEraseBkgnd(TWMEraseBkgnd &msg); void __fastcall WMMove(TWMMove &msg); public: // ユーザー宣言 BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_ERASEBKGND,TWMEraseBkgnd,WMEraseBkgnd) MESSAGE_HANDLER(WM_MOVE,TWMMove,WMMove) END_MESSAGE_MAP(TForm)
[unit1.cpp] void __fastcall TForm1::WMEraseBkgnd(TWMEraseBkgnd &msg) { // 壁紙だけを表示 DefWindowProc(GetDesktopWindow(),WM_ICONERASEBKGND,(WPARAM)msg.DC,0); msg.Result= 1; } void __fastcall TForm1::WMMove(TWMMove &msg) { Invalidate(); }
switch(GetDriveType("C:\")) // Cドライブを調べる { case 0: // わからない case 1: // ドライブが存在しない case DRIVE_REMOVABLE: // フロッピーディスク case DRIVE_FIXED: // ハードディスク case DRIVE_REMOTE: // ネットワークドライブ case DRIVE_CDROM: // CD−ROM case DRIVE_RAMDISK: // RAMディスク }
BROWSEINFO info; char path[256]; info.hwndOwner = Panel1->Handle; info.pidlRoot = NULL; info.pszDisplayName = path; info.lpszTitle = "ファイル選択"; info.ulFlags = BIF_RETURNONLYFSDIRS; info.lpfn = NULL; info.lParam = NULL; info.iImage = 0; SHBrowseForFolder(&info);
char buf[128]; // Windowsディレクトリ GetWindowsDirectory(buf, 128); // WindowsのSystemディレクトリ GetSystemDirectory(buf, 128); // カレントディレクトリ GetCurrentDirectory(128, buf); // 作業用フォルダ GetTempPath(128, buf);
ShellExecute(Application->Handle, "open", "c:\\winnt\\calc.exe", NULL, NULL, SW_SHOW);
OpenDialog1->Execute(); sndPlaySound(OpenDialog1->FileName.c_str(), SND_ASYNC);
// 演奏するファイルの指定 MediaPlayer1->FileName = OpenDialog1->FileName; // デバイスオープン MediaPlayer1->Open(); // 演奏開始! MediaPlayer1->Play();
SYSTEMTIME system_time; system_time.wYear = 2007; system_time.wMonth = 6; system_time.wDay = 15; system_time.wHour = 9; system_time.wMinute = 37; system_time.wSecond = 00; system_time.wMilliseconds = 0; SetLocalTime(&systemtime);
TSystemTime system_time; TDateTime date_time("2007/06/15 9:37:00"); DateTimeToSystemTime(date_time, system_time); SetLocalTime(&system_time);
このページ直接たどり着いた方は、Topページに戻ってください。
by kenji-b
Copyright (C) 1998-2001 kenji-b homepage All Rights Reserved.