Created
June 3, 2011 11:44
-
-
Save kimoto/1006220 to your computer and use it in GitHub Desktop.
toggle Windows Aero (Aeroを有効/無効切り替えるためのコード)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include "dwmswitch.h" | |
| void ShowLastError(void){ | |
| LPVOID lpMessageBuffer; | |
| FormatMessage( | |
| FORMAT_MESSAGE_ALLOCATE_BUFFER | | |
| FORMAT_MESSAGE_FROM_SYSTEM, | |
| NULL, | |
| GetLastError(), | |
| MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // デフォルト ユーザー言語 | |
| (LPTSTR) &lpMessageBuffer, | |
| 0, | |
| NULL ); | |
| MessageBox(NULL, (LPCWSTR)lpMessageBuffer, TEXT("Error"), MB_OK); | |
| //... 文字列が表示されます。 | |
| // システムによって確保されたバッファを開放します。 | |
| LocalFree( lpMessageBuffer ); | |
| } | |
| void TasktrayAddIcon(HINSTANCE hInstance, UINT msg, UINT id, UINT iconId, LPCTSTR tips, HWND hWnd) | |
| { | |
| NOTIFYICONDATA nid; | |
| nid.cbSize = sizeof( NOTIFYICONDATA ); | |
| nid.uFlags = (NIF_ICON|NIF_MESSAGE|NIF_TIP); | |
| nid.hWnd = hWnd; // ウインドウ・ハンドル | |
| nid.hIcon = ::LoadIcon(hInstance, MAKEINTRESOURCE(iconId)); // アイコン・ハンドル | |
| nid.uID = id; // アイコン識別子の定数 | |
| nid.uCallbackMessage = msg; // 通知メッセージの定数 | |
| lstrcpy(nid.szTip, tips); // チップヘルプの文字列 | |
| // アイコンの変更 | |
| if( !Shell_NotifyIcon( NIM_ADD, &nid ) ) | |
| ::ShowLastError(); | |
| } | |
| void TasktrayModifyIcon(HINSTANCE hInstance, UINT msg, UINT id, HWND hWnd, LPCTSTR tips, UINT icon) | |
| { | |
| NOTIFYICONDATA nid; | |
| nid.cbSize = sizeof( NOTIFYICONDATA ); | |
| nid.uFlags = (NIF_ICON|NIF_MESSAGE|NIF_TIP); | |
| nid.hWnd = hWnd; // ウインドウ・ハンドル | |
| nid.hIcon = ::LoadIcon(hInstance, MAKEINTRESOURCE(icon)); // アイコン・ハンドル | |
| nid.uID = id; // アイコン識別子の定数 | |
| nid.uCallbackMessage = msg; // 通知メッセージの定数 | |
| lstrcpy( nid.szTip, tips ); // チップヘルプの文字列 | |
| if( !::Shell_NotifyIcon(NIM_MODIFY, &nid) ) | |
| ::ShowLastError(); | |
| } | |
| void TasktrayDeleteIcon(HWND hWnd, UINT id) | |
| { | |
| NOTIFYICONDATA nid; | |
| nid.cbSize = sizeof(NOTIFYICONDATA); | |
| nid.hWnd = hWnd; // メインウィンドウハンドル | |
| nid.uID = id; // コントロールID | |
| if( !::Shell_NotifyIcon(NIM_DELETE, &nid) ) | |
| ::ShowLastError(); | |
| } | |
| LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) | |
| { | |
| static HMENU hMenu, hSubMenu; | |
| static UINT msgTaskbarCreated; | |
| switch(message){ | |
| case WM_CREATE: | |
| if( FAILED(::DwmEnableComposition(DWM_EC_DISABLECOMPOSITION)) ){ | |
| ::ShowLastError(); | |
| return FALSE; | |
| } | |
| // メニューの準備 | |
| hMenu = ::CreateMenu(); | |
| hSubMenu = ::CreateMenu(); | |
| ::AppendMenu(hSubMenu, MF_STRING, IDM_EXIT, L"終了"); | |
| ::AppendMenu(hMenu, MF_POPUP, (UINT)hSubMenu, NULL); | |
| return TRUE; | |
| case WM_DESTROY: | |
| ::DwmEnableComposition(DWM_EC_ENABLECOMPOSITION); | |
| ::PostQuitMessage(0); | |
| return TRUE; | |
| case WM_COMMAND: | |
| switch(LOWORD(wParam)){ | |
| case IDM_EXIT: | |
| ::DestroyWindow(hWnd); | |
| break; | |
| } | |
| return TRUE; | |
| case WM_TASKTRAY: | |
| switch(lParam){ | |
| case WM_RBUTTONDOWN: | |
| POINT point; | |
| ::GetCursorPos(&point); | |
| ::SetForegroundWindow(hWnd); | |
| ::TrackPopupMenu(hSubMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, 0, hWnd, NULL); | |
| return TRUE; | |
| } | |
| } | |
| return ::DefWindowProc(hWnd, message, wParam, lParam); | |
| } | |
| int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) | |
| { | |
| WNDCLASSEX wcex; | |
| wcex.cbSize = sizeof(WNDCLASSEX); | |
| //wcex.style = CS_HREDRAW | CS_VREDRAW; | |
| wcex.style = 0; | |
| wcex.lpfnWndProc = WndProc; | |
| wcex.cbClsExtra = 0; | |
| wcex.cbWndExtra = 0; | |
| wcex.hInstance = hInstance; | |
| wcex.hIcon = ::LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAIN)); | |
| wcex.hCursor = LoadCursor(NULL, IDC_ARROW); | |
| wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); | |
| wcex.lpszMenuName = NULL; | |
| wcex.lpszClassName = szWindowClass; | |
| wcex.hIconSm = ::LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAIN)); | |
| RegisterClassEx(&wcex); | |
| int z = 0; | |
| HWND hWnd = CreateWindowEx(0, szWindowClass, szWindowTitle, | |
| WS_OVERLAPPEDWINDOW, z, z, z, z, | |
| NULL, NULL, hInstance, NULL); | |
| if(!hWnd){ | |
| ::ShowLastError(); | |
| return FALSE; | |
| } | |
| ::ShowWindow(hWnd, SW_HIDE) && ::UpdateWindow(hWnd); | |
| ::TasktrayAddIcon(hInstance, WM_TASKTRAY, ID_TASKTRAY, IDI_MAIN, ::szWindowTitle, hWnd); | |
| MSG msg; | |
| while(::GetMessage(&msg, NULL, 0, 0)){ | |
| if(!::TranslateAcceleratorA(msg.hwnd, NULL, &msg)){ | |
| ::TranslateMessage(&msg); | |
| ::DispatchMessage(&msg); | |
| } | |
| } | |
| ::TasktrayDeleteIcon(hWnd, ID_TASKTRAY); | |
| return TRUE; | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <windows.h> | |
| #include <WindowsX.h> | |
| #include <tchar.h> | |
| #include <commctrl.h> | |
| #include <richedit.h> | |
| #include <dwmapi.h> | |
| #pragma comment(lib, "dwmapi.lib") | |
| #define WM_TASKTRAY (WM_APP + 1) | |
| #define ID_TASKTRAY 1 | |
| #define IDM_EXIT 2000 | |
| #define IDI_MAIN 101 | |
| LPTSTR szWindowTitle = L"dwmswitch"; | |
| LPTSTR szWindowClass = L"dwmswitchClass"; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment