亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dipslib.cpp

?? c++的經典之作.是不可缺少的工具.大家可以現在學習
?? CPP
字號:
/******************************************************************************
Module:  DIPSLib.cpp
Notices: Copyright (c) 2000 Jeffrey Richter
******************************************************************************/


#include "..\CmnHdr.h"     /* See Appendix A. */
#include <WindowsX.h>
#include <CommCtrl.h>

#define DIPSLIBAPI __declspec(dllexport)
#include "DIPSLib.h"
#include "Resource.h"


///////////////////////////////////////////////////////////////////////////////


#ifdef _DEBUG
// This function forces the debugger to be invoked
void ForceDebugBreak() {
   __try { DebugBreak(); }
   __except(UnhandledExceptionFilter(GetExceptionInformation())) { }
}
#else
#define ForceDebugBreak()
#endif


///////////////////////////////////////////////////////////////////////////////


// Forward references
LRESULT WINAPI GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam);

INT_PTR WINAPI Dlg_Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);


///////////////////////////////////////////////////////////////////////////////


// Instruct the compiler to put the g_hhook data variable in 
// its own data section called Shared. We then instruct the 
// linker that we want to share the data in this section 
// with all instances of this application.
#pragma data_seg("Shared")
HHOOK g_hhook = NULL;
DWORD g_dwThreadIdDIPS = 0;
#pragma data_seg()

// Instruct the linker to make the Shared section
// readable, writable, and shared.
#pragma comment(linker, "/section:Shared,rws")


///////////////////////////////////////////////////////////////////////////////


// Nonshared variables
HINSTANCE g_hinstDll = NULL;


///////////////////////////////////////////////////////////////////////////////


BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, PVOID fImpLoad) {

   switch (fdwReason) {

      case DLL_PROCESS_ATTACH:
         // DLL is attaching to the address space of the current process.
         g_hinstDll = hinstDll;
         break;

      case DLL_THREAD_ATTACH:
         // A new thread is being created in the current process.
         break;

      case DLL_THREAD_DETACH:
         // A thread is exiting cleanly.
         break;

      case DLL_PROCESS_DETACH:
         // The calling process is detaching the DLL from its address space.
         break;
   }
   return(TRUE);
}


///////////////////////////////////////////////////////////////////////////////


BOOL WINAPI SetDIPSHook(DWORD dwThreadId) {

   BOOL fOk = FALSE;
   
   if (dwThreadId != 0) {
      // Make sure that the hook is not already installed.
      chASSERT(g_hhook == NULL);

      // Save our thread ID in a shared variable so that our GetMsgProc 
      // function can post a message back to to thread when the server 
      // window has been created.
      g_dwThreadIdDIPS = GetCurrentThreadId();

      // Install the hook on the specified thread
      g_hhook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, g_hinstDll, 
         dwThreadId);

      fOk = (g_hhook != NULL);
      if (fOk) {
         // The hook was installed successfully; force a benign message to 
         // the thread's queue so that the hook function gets called.
         fOk = PostThreadMessage(dwThreadId, WM_NULL, 0, 0);
      }
   } else {

      // Make sure that a hook has been installed.
      chASSERT(g_hhook != NULL);
      fOk = UnhookWindowsHookEx(g_hhook);
      g_hhook = NULL;
   }

   return(fOk);
}


///////////////////////////////////////////////////////////////////////////////


LRESULT WINAPI GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam) {

   static BOOL fFirstTime = TRUE;

   if (fFirstTime) {
      // The DLL just got injected.
      fFirstTime = FALSE;

      // Uncomment the line below to invoke the debugger 
      // on the process that just got the injected DLL.
      // ForceDebugBreak();

      // Create the DTIS Server window to handle the client request.
      CreateDialog(g_hinstDll, MAKEINTRESOURCE(IDD_DIPS), NULL, Dlg_Proc);

      // Tell the DIPS application that the server is up 
      // and ready to handle requests.
      PostThreadMessage(g_dwThreadIdDIPS, WM_NULL, 0, 0);
   }

   return(CallNextHookEx(g_hhook, nCode, wParam, lParam));
}


///////////////////////////////////////////////////////////////////////////////


void Dlg_OnClose(HWND hwnd) {

   DestroyWindow(hwnd);
}


///////////////////////////////////////////////////////////////////////////////


static const TCHAR g_szRegSubKey[] = 
   TEXT("Software\\Richter\\Desktop Item Position Saver");


///////////////////////////////////////////////////////////////////////////////


void SaveListViewItemPositions(HWND hwndLV) {

   int nMaxItems = ListView_GetItemCount(hwndLV);

   // When saving new positions, delete the old position 
   // information that is currently in the registry.
   LONG l = RegDeleteKey(HKEY_CURRENT_USER, g_szRegSubKey);

   // Create the registry key to hold the info
   HKEY hkey;
   l = RegCreateKeyEx(HKEY_CURRENT_USER, g_szRegSubKey, 0, NULL, 
      REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, &hkey, NULL);
   chASSERT(l == ERROR_SUCCESS);

   for (int nItem = 0; nItem < nMaxItems; nItem++) {

      // Get the name and position of a ListView item.
      TCHAR szName[MAX_PATH];
      ListView_GetItemText(hwndLV, nItem, 0, szName, chDIMOF(szName));

      POINT pt;
      ListView_GetItemPosition(hwndLV, nItem, &pt);

      // Save the name and position in the registry.
      l = RegSetValueEx(hkey, szName, 0, REG_BINARY, (PBYTE) &pt, sizeof(pt));
      chASSERT(l == ERROR_SUCCESS);
   }
   RegCloseKey(hkey);
}


///////////////////////////////////////////////////////////////////////////////


void RestoreListViewItemPositions(HWND hwndLV) {

   HKEY hkey;
   LONG l = RegOpenKeyEx(HKEY_CURRENT_USER, g_szRegSubKey,
      0, KEY_QUERY_VALUE, &hkey);
   if (l == ERROR_SUCCESS) {

      // If the ListView has AutoArrange on, temporarily turn it off.
      DWORD dwStyle = GetWindowStyle(hwndLV);
      if (dwStyle & LVS_AUTOARRANGE) 
         SetWindowLong(hwndLV, GWL_STYLE, dwStyle & ~LVS_AUTOARRANGE);

      l = NO_ERROR;
      for (int nIndex = 0; l != ERROR_NO_MORE_ITEMS; nIndex++) {
         TCHAR szName[MAX_PATH];
         DWORD cbValueName = chDIMOF(szName);

         POINT pt;
         DWORD cbData = sizeof(pt), nItem;

         // Read a value name and position from the registry.
         DWORD dwType;
         l = RegEnumValue(hkey, nIndex, szName, &cbValueName, 
            NULL, &dwType, (PBYTE) &pt, &cbData);

         if (l == ERROR_NO_MORE_ITEMS) 
            continue;

         if ((dwType == REG_BINARY) && (cbData == sizeof(pt))) {
            // The value is something that we recognize; try to find
            // an item in the ListView control that matches the name.
            LV_FINDINFO lvfi;
            lvfi.flags = LVFI_STRING; 
            lvfi.psz = szName; 
            nItem = ListView_FindItem(hwndLV, -1, &lvfi);
            if (nItem != -1) {
               // We found a match; change the item's position.
               ListView_SetItemPosition(hwndLV, nItem, pt.x, pt.y);	
            }
         }
      }
      // Turn AutoArrange back on if it was originally on.
      SetWindowLong(hwndLV, GWL_STYLE, dwStyle);
      RegCloseKey(hkey);
   }
}


///////////////////////////////////////////////////////////////////////////////


INT_PTR WINAPI Dlg_Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {

   switch (uMsg) {
      chHANDLE_DLGMSG(hwnd, WM_CLOSE, Dlg_OnClose);

      case WM_APP:
         // Uncomment the line below to invoke the debugger 
         // on the process that just got the injected DLL.
         // ForceDebugBreak();

         if (lParam) 
            SaveListViewItemPositions((HWND) wParam);
         else 
            RestoreListViewItemPositions((HWND) wParam);
         break;
   }

   return(FALSE);
}



//////////////////////////////// End of File //////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
老汉av免费一区二区三区| 国产91高潮流白浆在线麻豆| 美国十次了思思久久精品导航| 91免费看`日韩一区二区| 欧美三级日韩在线| 国产日韩欧美在线一区| 午夜久久久影院| 99久久精品国产导航| 精品免费99久久| 亚洲永久精品国产| 丁香亚洲综合激情啪啪综合| 欧美日韩国产大片| 亚洲女人****多毛耸耸8| 国产在线播精品第三| 欧美一区二区三区视频在线 | 精品久久久久一区二区国产| 依依成人精品视频| 不卡的看片网站| 精品国产免费一区二区三区香蕉| 亚瑟在线精品视频| av电影在线观看一区| 久久久久久亚洲综合| 精品一区二区三区在线播放视频| 欧美精品1区2区| 亚洲午夜久久久| 一本大道综合伊人精品热热| 久久久久久久久久久久久夜| 天天综合色天天综合| 91亚洲男人天堂| 亚洲欧美在线视频| 国产美女在线精品| 欧美一级午夜免费电影| 亚洲一区二区免费视频| av网站免费线看精品| ww久久中文字幕| 九九视频精品免费| 7777精品伊人久久久大香线蕉最新版| 中文子幕无线码一区tr| 国产精品伊人色| 精品国免费一区二区三区| 免费看精品久久片| 欧美日韩国产美| 香蕉加勒比综合久久| 欧美手机在线视频| 精品国产91久久久久久久妲己 | 成人国产一区二区三区精品| 久久一区二区三区四区| 美女脱光内衣内裤视频久久影院| 91视频观看免费| 日本一区二区免费在线观看视频| 亚洲不卡在线观看| 欧美午夜精品电影| 午夜欧美电影在线观看| 欧美日韩亚州综合| 天堂蜜桃91精品| 欧美一区二区三区在线电影| 日韩精品成人一区二区在线| 91精品国产色综合久久不卡电影 | 欧美日韩精品专区| 日本免费在线视频不卡一不卡二| 91精品国产综合久久精品麻豆| 一区二区三区中文字幕在线观看| 91麻豆精品秘密| 亚洲国产综合色| 日韩亚洲欧美高清| 国产综合久久久久影院| 国产视频一区在线观看 | 日韩丝袜情趣美女图片| 精品影院一区二区久久久| 国产视频在线观看一区二区三区| av一区二区不卡| 亚洲第一主播视频| 日韩一区二区三区电影在线观看| 韩国一区二区在线观看| 国产精品久久毛片a| 在线观看视频一区二区欧美日韩| 一区二区三区 在线观看视频| 3d动漫精品啪啪| 国产成+人+日韩+欧美+亚洲| 久久一区二区视频| 成人午夜视频网站| 午夜激情一区二区三区| 久久综合五月天婷婷伊人| 99re成人在线| 男人的j进女人的j一区| 国产日韩欧美综合一区| 欧美三级电影网站| 国产精品羞羞答答xxdd| 一区二区三区av电影| 日韩午夜在线观看视频| 成人avav影音| 美美哒免费高清在线观看视频一区二区 | 精品少妇一区二区三区在线播放 | 午夜久久久久久久久| 久久久不卡影院| 欧美日韩免费观看一区三区| 国产精品888| 亚洲va在线va天堂| 国产亚洲欧美日韩俺去了| 欧美在线观看一区| 成人午夜精品一区二区三区| 日韩成人av影视| 亚洲欧洲av另类| 精品免费国产一区二区三区四区| 91成人看片片| 在线观看国产日韩| 偷拍与自拍一区| 国产午夜精品一区二区三区视频 | 久久国产乱子精品免费女| 亚洲欧洲综合另类在线| 国产日产欧美一区二区视频| 777xxx欧美| 欧美日韩国产电影| 色哟哟亚洲精品| av毛片久久久久**hd| 韩国v欧美v日本v亚洲v| 亚洲福利视频三区| 亚洲最新视频在线观看| 国产精品美女久久福利网站| 欧美www视频| 欧美一区二区三区免费观看视频| 一本一本大道香蕉久在线精品 | 91麻豆文化传媒在线观看| 国产精品一级黄| 国产一区二区三区久久久| 日韩av电影一区| 天天色综合成人网| 午夜精品久久久久久久99樱桃 | 亚洲综合色视频| 一区二区三区在线观看网站| 亚洲日本在线看| 亚洲精品大片www| 夜夜揉揉日日人人青青一国产精品| 精品国产成人系列| 91麻豆精品国产无毒不卡在线观看| 久久精品99国产精品日本| 美国毛片一区二区| 日韩av中文字幕一区二区三区| 日日噜噜夜夜狠狠视频欧美人| 亚洲超碰精品一区二区| 天天色天天爱天天射综合| 日韩综合一区二区| 久久99国产精品成人| 国产精品资源网| 91亚洲精品久久久蜜桃| 91久久国产最好的精华液| 色偷偷久久人人79超碰人人澡| 日韩一区二区三区视频在线| 精品奇米国产一区二区三区| 精品三级av在线| 国产情人综合久久777777| 国产精品丝袜一区| 亚洲码国产岛国毛片在线| 亚洲一区二区三区不卡国产欧美| 奇米一区二区三区| 日本视频一区二区三区| 亚洲国产精品一区二区www在线| 午夜精品在线视频一区| 国精品**一区二区三区在线蜜桃| 国产在线不卡一卡二卡三卡四卡| 成a人片亚洲日本久久| 欧美三区在线视频| 久久这里只有精品视频网| 亚洲日本va在线观看| 午夜伦理一区二区| 国产一区福利在线| 色拍拍在线精品视频8848| 51午夜精品国产| 国产精品无圣光一区二区| 亚洲最大成人综合| 精品一区二区久久| 91视频免费播放| 精品美女一区二区| 亚洲激情av在线| 亚洲成人av电影| 久久成人麻豆午夜电影| 欧美性生活一区| 久久久久99精品一区| 亚洲国产精品久久人人爱蜜臀| 国产一区二区三区免费播放| 欧美日韩一卡二卡| 国产午夜精品久久久久久免费视| 亚洲国产精品久久久久秋霞影院| 成人毛片视频在线观看| 色婷婷一区二区| 欧美一区二区福利在线| 亚洲综合免费观看高清完整版| 精品在线视频一区| 欧美日韩在线精品一区二区三区激情 | 91美女蜜桃在线| 日韩精品一区二区三区视频播放 | 在线观看91精品国产麻豆| 国产精品美女久久久久aⅴ| 亚洲不卡在线观看| 国产另类ts人妖一区二区| 欧美大黄免费观看| 日韩va欧美va亚洲va久久| 色94色欧美sute亚洲13| 中文字幕在线观看一区二区| 韩国理伦片一区二区三区在线播放 |