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

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

?? getword.pas

?? “屏幕抓字”技術在電子字典中得到廣泛地應用
?? PAS
字號:
unit GetWord;

interface

uses
  SysUtils,
  windows,
  messages;

const NHD_GETWORD_TIMER = 2;
const NHD_MAX_TEXTLEN = 1024;
const NHD_WIN_INITPOSX = -1;
const NHD_WIN_INITPOSY = -1;
const NHD_FLYWIN_WIDTH = 1;
const NHD_FLYWIN_HEIGHT = 1;
const NHD_CLASSNAME_LEN	= 256;
const NHD_GW_WAITING_TIME = 200;   //get word waiting time;

  (*設置屏幕抓取函數*)
 type TBL_SetFlag32 = function (nFlag : word;    //設置是否取詞
                             hNotifyWnd : HWND;    //當取詞后得窗口句柄
                             MouseX : integer;    //X坐標
                             MouseY : integer): DWORD;stdcall;    //Y坐標
(*   功能:
	啟動或停止取詞。
   參數:
       nFlag
              [輸入] 指定下列值之一:
              GETWORD_ENABLE: 開始取詞。在重畫被取單詞區域前設置此標志。nhw32.dll是通過
                              重畫單詞區域,截取TextOutA, TextOutW, ExtTextOutA,
                              ExtTextOutW等Windows API函數的參數來取詞的。
              GETWORD_DISABLE: 停止取詞。
       hNotifyWnd
              [輸入] 通知窗口句柄。當取到此時,向該通知窗口發送一登記消息:GWMSG_GETWORDOK。
       MouseX
		[輸入] 指定取詞點的X坐標。
       MouseY
              [輸入] 指定取詞點的Y坐標。
    返回值:
       可忽略。
*)
type TLPRECT = ^TRECT;  (*定義指針先*)
 type TBL_GetText32 = function(lpszCurWord : pchar;
                             nBufferSize : integer;
                             lpWordRect : TLPRECT ): DWORD;stdcall;
    (*功能:
      從內部緩沖區取出單詞文本串。對英語文本,該函數最長取出一行內以空格為界的三個英文單詞串,
      遇空格,非英文字母及除'-'外的標點符號,則終止取詞。對漢字文本,該函數最長取出一行漢字串,
      遇英語字母,標點符號等非漢語字符,則終止取詞。該函數不能同時取出英語和漢語字符。
    參數:
       lpszCurWord
              [輸入] 目的緩沖區指針。
       nBufferSize
              [輸入] 目的緩沖區大小。
       lpWordRect
              [輸出] 指向 RECT 結構的指針。該結構定義了被取單詞所在矩形區域。
    返回值:
        當前光標在全部詞中的位置。*)

 type   TSetNHW32 = function(): boolean; stdcall;
 (*
     功能:
        Win NT/2000 環境下的初始化函數。一般在程序開始時,調用一次。
    參數:
        無。
    返回值:
        如果成功 TRUE ,失敗 FALSE 。
 *)

 type  TResetNHW32= function():boolean; stdcall;
(*    功能:
        Win NT/2000 環境下的去初始化函數。一般在程序結束時調用。
    參數:
        無。
    返回值:
        如果成功 TRUE ,失敗 FALSE 。*)



function NHD_FlyWndProc(hWnd, Msg,wParam,lParam: Integer): Integer; stdcall;
function NHD_CreateWindow(hInst: Integer): HWND;
procedure NHD_BeginGetWord(ptMousePos: TPOINT);

function NHD_ExitGetWords(): boolean;
function NHD_DestroyWindow(): boolean;
procedure NHD_FreeLoadedLib();
function NHD_InitGetWords(hInst: THANDLE; hwnd: HWND): HWND;
function NHD_LoadGetWordLib(): boolean;

var
  WinClass: TWndClassA;
  Inst: Integer;
  Msg: TMsg;

  g_TextBuffer : array[0..1024] of char;

  g_hFlyWin : HWND;
  g_nGWTimerID : word;
  
  g_hGetWordInst : Integer;
  BL_SetFlag32 : TBL_SetFlag32;
  BL_GetText32 : TBL_GetText32;
  SetNHW32 : TSetNHW32;
  ResetNHW32 : TResetNHW32;
  g_hNHMainWin : HWND;
  
  g_WM_GetWordOk:WORD;
  g_bInGetWord : boolean;
  currpoint:Tpoint;
  G_Rect : TRECT;
implementation

uses unit1;

function NHD_CreateWindow(hInst: Integer): HWND;
var
   hwnd : LongWord;
   wc : TWndClassA;
begin
  if hInst = 0 then begin
    result :=0;
    exit;
  end;

  with wc do
  begin
    style              := WS_EX_TOPMOST;
    lpfnWndProc        := @NHD_FlyWndProc;  (*消息處理函數*)
    hInstance          := hInst;
    hbrBackground      := color_btnface + 1;
    lpszClassname      := 'NHD_FLYWIN_DEMO';
    hicon              := 0;
    hCursor            := 0;
    cbClsExtra         := 0;
    cbWndExtra         := 0;
  end;
  RegisterClass(wc);

  hwnd := CreateWindowEx (WS_EX_TOPMOST or WS_EX_TOOLWINDOW,
                           'NHD_FLYWIN_DEMO',
                           'NHD_FlyWindow_Demo',
                           WS_POPUP or WS_VISIBLE,
                           NHD_WIN_INITPOSX,
                           NHD_WIN_INITPOSY,
                           NHD_FLYWIN_WIDTH,
                           NHD_FLYWIN_HEIGHT,
                           0,  
                           0,
                           hInst,
                           nil);
    
  result := hwnd;
end;

function NHD_FlyWndProc(hWnd, Msg,wParam,lParam: Integer): Integer; stdcall;
begin
  //Unhook textout when reveived msg from getword;
  if msg = g_WM_GetWordOk then begin
    if g_bInGetWord then begin
      g_bInGetWord := FALSE;
      KillTimer(g_hFlyWin, NHD_GETWORD_TIMER);
      g_nGWTimerID := 0;
      BL_SetFlag32(GETWORD_DISABLE, 0, 0, 0);

      if wParam = 0 then begin
        BL_GetText32(@g_TextBuffer, sizeof(g_TextBuffer), @G_Rect);
      end;

      PostMessage(g_hNHMainWin, NHD_WM_GETWORD_OK, 0, 0);
      result := 0;
      exit;
    end;
  end;

  result := DefWindowProc(hWnd, msg, wParam, lParam);
end;

procedure NHD_GetWordTimerProc(hwnd: HWND; msg: word; idTimer: word; dwTime: DWORD);stdcall;
begin
	//may be proior finished by Getword message;
  if g_bInGetWord then begin
    g_bInGetWord := FALSE;
    //UnHook TextOut;
    BL_SetFlag32(GETWORD_DISABLE, 0, 0, 0);
    BL_GetText32(g_TextBuffer, NHD_MAX_TEXTLEN, @G_Rect);
  end;

  KillTimer(g_hFlyWin, NHD_GETWORD_TIMER);
  g_nGWTimerID := 0;

  PostMessage(g_hNHMainWin, NHD_WM_GETWORD_OK, 0, 0);
end;

procedure NHD_BeginGetWord(ptMousePos: TPOINT);
var
  szAppClassName : array [0..NHD_CLASSNAME_LEN] of char;
  hAppWin : LongWord;
  nFlyWinLeft : integer;
  nFlyWinWidth : integer;
  rcAppWin : TRECT ;
  cmpstr : string;
begin

	//get window from mouse point;
	hAppWin := WindowFromPoint(ptMousePos);

	//check if the app window is EDIT, if it is, redraw whole line;
	GetClassName(hAppWin, szAppClassName, NHD_CLASSNAME_LEN);

	(*DbgPrintf("hAppWin: %x\n", hAppWin);
	DbgPrintf("ClassName: %s\n", szAppClassName);*)
	cmpstr := trim(strpas(szAppClassName));
        Frm_main.Edit2.text := cmpstr;

	if ((cmpstr = 'Edit') or						//NotePad
	   (cmpstr = 'Internet Explorer_Server') or //IE4.0
	   (cmpstr = 'RichEdit') or					//
	   (cmpstr = 'RichEdit20A') or				//WordPad
	   (cmpstr = 'RichEdit20W')	 or				//WordPad
	   (cmpstr = 'HTML_Internet Explorer')	 or	//IE3.0
	   (cmpstr = 'ThunderTextBox')	 or			//VB Edit
	   (cmpstr = 'ThunderRT5TextBox') or		//VB Edit
	   (cmpstr = 'ThunderRT6TextBox') or		//VB Edit
	   (cmpstr = 'EXCEL<')	or		//Excel 2000
	   (cmpstr = 'EXCEL7')  or		//Excel 2000
	   (cmpstr = 'EXCEL6') or					//Excel 2000
	   (cmpstr = 'ConsoleWindowClass') or		//NT V86
	   (cmpstr = 'Edit') or
	   (cmpstr = 'tty')  or
	   (cmpstr = 'ttyGrab'))						//Word97
	then begin
		GetWindowRect(hAppWin, rcAppWin);
		nFlyWinLeft := rcAppWin.left - 4;
		nFlyWinWidth := rcAppWin.right - rcAppWin.left - 8;

		//don't not repaint whole line if too long;
		if (ptMousePos.x - nFlyWinLeft) > 200 then begin
			nFlyWinLeft := ptMousePos.x - 200;
		end;

		//DbgPrintf("!!!!tty window");
	end else begin
		nFlyWinLeft := ptMousePos.x;
		nFlyWinWidth := NHD_FLYWIN_WIDTH;
	end;

	//note: move the flywin to cursor pos "x - 1" to aviod mouse shape changing between ARROW and EDIT in edit area;
	//use SetWindowPos instead of MoveWindow, for MoveWindow can not make menu item redraw.
	SetWindowPos(g_hFlyWin, HWND_TOPMOST, 
			     nFlyWinLeft, 
				 ptMousePos.y - 1 ,
				 nFlyWinWidth,
				 NHD_FLYWIN_HEIGHT,
				 SWP_NOACTIVATE or SWP_NOREDRAW);
	
	//set flag to avoid re-entry;
	g_bInGetWord := TRUE;

	//hook TextOut;
	BL_SetFlag32(GETWORD_ENABLE, g_hFlyWin, ptMousePos.x, ptMousePos.y);

	MoveWindow(g_hFlyWin, -1, -1, NHD_FLYWIN_WIDTH, NHD_FLYWIN_HEIGHT, TRUE);

	g_nGWTimerID := SetTimer(g_hFlyWin, NHD_GETWORD_TIMER, NHD_GW_WAITING_TIME, @NHD_GetWordTimerProc);
end;

function NHD_CopyWordsTo(szBuffer: pchar; nBufferSize: Integer):Boolean;
var
 nLen : integer;
begin
  nLen := sizeof(g_TextBuffer);
  if(nLen + 1) > nBufferSize
  then begin
    result := false;
    exit;
  end;

  ZeroMemory(szBuffer,nBufferSize);
  CopyMemory(szBuffer, @g_TextBuffer, nLen);

  result := true;
 end;

function NHD_ExitGetWords(): boolean;
begin
  //free libarys:
  NHD_FreeLoadedLib();

  NHD_DestroyWindow();

  result := TRUE;
end;

function NHD_DestroyWindow(): boolean;
begin
  if g_hFlyWin<>0 then begin
          DestroyWindow(g_hFlyWin);
          g_hFlyWin := 0;
  end;

  result := TRUE;
end;

procedure NHD_FreeLoadedLib();
begin
  if g_hGetWordInst<>0 then begin
    //only valid in windows NT enviroment

    if @ResetNHW32<>nil then begin
            ResetNHW32();
    end;

    FreeLibrary(g_hGetWordInst);
    //g_hGetWordInst = 0;
  end;
end;

function NHD_InitGetWords(hInst: THANDLE;  hwnd: HWND): HWND;
begin
  //save NH main window to send run time error messages:
  g_hNHMainWin := hwnd;

  if NHD_LoadGetWordLib=false then begin
          NHD_FreeLoadedLib();
          result := 0;
          exit;
  end;

  //Create fly_window (cause paint) and show text window;
  g_hFlyWin := NHD_CreateWindow(hInst);
  if g_hFlyWin=0 then begin
          NHD_FreeLoadedLib();
          result := 0;
          exit;
  end;

  g_WM_GetWordOk := RegisterWindowMessage('BL_HASSTRING');
  if g_WM_GetWordOk=0 then begin
          NHD_FreeLoadedLib();
          result := 0;
          exit;
  end;

  result := g_hFlyWin;
end;

function NHD_LoadGetWordLib(): boolean;
begin
  g_hGetWordInst := LoadLibrary('nhw32.dll');
  if g_hGetWordInst=0 then begin
          messagebox(0,'裝載動態鏈接庫失敗','警告',mb_ok or mb_iconwarning or mb_applmodal);
          result := FALSE;
          exit;
  end;

  @BL_SetFlag32 := GetProcAddress(g_hGetWordInst,'BL_SetFlag32');
  if @BL_SetFlag32=nil then begin
   messagebox(0,'裝載屏幕取詞動態鏈接庫函數: BL_SetFlag32失敗!','信息',MB_OK or MB_APPLMODAL or MB_ICONWARNING);
   result := false;
   exit;
  end;

  @BL_GetText32 := GetProcAddress(g_hGetWordInst,'BL_GetText32');
  if @BL_GetText32=nil then begin
   messagebox(0,'裝載屏幕取詞動態鏈接庫函數: BL_GetText32失敗!','信息',MB_OK or MB_APPLMODAL or MB_ICONWARNING);
   result := false;
   exit;
  end;

  @SetNHW32 := GetProcAddress(g_hGetWordInst,'SetNHW32');
  if @SetNHW32=nil then begin
   messagebox(0,'裝載屏幕取詞動態鏈接庫函數: SetNHW32失敗!','信息',MB_OK or MB_APPLMODAL or MB_ICONWARNING);
   result := false;
   exit;
  end;

  @ResetNHW32 := GetProcAddress(g_hGetWordInst,'ResetNHW32');
  if @ResetNHW32=nil then begin
   messagebox(0,'裝載屏幕取詞動態鏈接庫函數: ResetNHW32失敗!','信息',MB_OK or MB_APPLMODAL or MB_ICONWARNING);
   result := false;
   exit;
  end;

  if SetNHW32()=false then begin
   messagebox(0,'無法設置屏幕取詞!','信息',MB_OK or MB_APPLMODAL or MB_ICONWARNING);
   result := false;
   exit;
  end;

 result := true;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久婷婷久久一区二区三区| 首页国产丝袜综合| 国产成人精品1024| 国产欧美一区二区在线| 国产成人精品1024| 中文字幕一区在线观看| 色诱视频网站一区| 亚洲成精国产精品女| 欧美精品在线一区二区三区| 日本视频免费一区| 国产亚洲欧美在线| 91麻豆免费看| 日韩黄色免费网站| 久久久高清一区二区三区| 99久久久久久99| 性久久久久久久久| 久久你懂得1024| 91麻豆精东视频| 日本大胆欧美人术艺术动态| 久久嫩草精品久久久久| 91色porny在线视频| 日韩黄色在线观看| 国产精品污网站| 欧美色图在线观看| 国内偷窥港台综合视频在线播放| 欧美激情一区二区在线| 欧美三级电影精品| 国产精品一二三区在线| 亚洲综合激情网| 欧美精品一区二| 在线视频国内一区二区| 国产在线观看一区二区| 亚洲激情综合网| 欧美精品一区二区三区高清aⅴ | 欧美日韩在线三级| 日本亚洲最大的色成网站www| 国产午夜精品久久久久久久| 欧美影院一区二区三区| 国产精品一区二区你懂的| 亚洲综合成人网| 国产午夜精品一区二区三区四区| 欧美日韩高清在线播放| 成人一区二区三区中文字幕| 日韩电影一区二区三区四区| 亚洲日本在线a| 久久色在线视频| 91麻豆精品国产自产在线观看一区| 成人午夜视频在线观看| 麻豆91精品91久久久的内涵| 一区二区三区蜜桃网| 中文字幕av一区二区三区| 日韩欧美一区二区在线视频| 在线精品视频免费观看| a美女胸又www黄视频久久| 国产在线精品免费| 蜜臀av国产精品久久久久| 亚洲国产一区二区在线播放| 综合激情成人伊人| 中文字幕av一区二区三区 | 欧美刺激脚交jootjob| 欧美在线三级电影| 99久久免费视频.com| 国产高清不卡二三区| 老司机精品视频线观看86| 亚洲电影一区二区三区| 亚洲精品国产a久久久久久| 国产精品护士白丝一区av| 国产亚洲一区二区三区四区| 久久久久亚洲蜜桃| 久久尤物电影视频在线观看| 精品国产露脸精彩对白| 日韩一区二区不卡| 日韩欧美国产午夜精品| 欧美一区二区三区婷婷月色| 欧美精品99久久久**| 欧美日韩国产另类一区| 欧美日韩中文精品| 欧美喷水一区二区| 欧美日韩中文国产| 91精品国产综合久久香蕉的特点| 欧美精品免费视频| 日韩一区二区三区四区| 日韩欧美国产综合| 精品国产乱码久久久久久久久| 精品国产欧美一区二区| 久久精品一区八戒影视| 欧美国产亚洲另类动漫| 国产精品国产三级国产| 亚洲视频资源在线| 亚洲大尺度视频在线观看| 午夜精品福利一区二区三区av| 亚洲成人免费av| 日本免费新一区视频| 秋霞电影一区二区| 国产做a爰片久久毛片| 成人免费观看男女羞羞视频| 99国产精品久久久久久久久久久| jlzzjlzz亚洲日本少妇| 色香蕉成人二区免费| 777xxx欧美| 久久久精品国产免大香伊| 亚洲欧洲av在线| 午夜电影一区二区| 国产一区久久久| 99久久精品国产一区二区三区| 欧美自拍偷拍一区| 欧美r级在线观看| 国产精品女主播在线观看| 亚洲午夜在线电影| 激情综合色丁香一区二区| 成人国产精品免费观看视频| 欧美色视频一区| ww亚洲ww在线观看国产| 一区二区久久久| 久久成人羞羞网站| 色婷婷综合中文久久一本| 欧美肥胖老妇做爰| 中文久久乱码一区二区| 亚洲aⅴ怡春院| 国产成人综合亚洲网站| 欧美最新大片在线看| 精品毛片乱码1区2区3区| 亚洲免费观看在线观看| 久久精品国产久精国产爱| 色综合一区二区| 精品国产一区a| 亚洲男人的天堂在线观看| 九色|91porny| 欧美日韩国产系列| 亚洲欧洲精品一区二区三区| 毛片av一区二区三区| 在线日韩av片| 国产精品视频一二| 精品影院一区二区久久久| 在线观看区一区二| 国产精品美女www爽爽爽| 麻豆91小视频| 欧美美女视频在线观看| 亚洲人吸女人奶水| 国产精品88av| 精品少妇一区二区三区视频免付费| 一区二区三区资源| 国产成人在线视频网站| 欧美一区二区日韩一区二区| 一区二区三区自拍| 色综合久久中文综合久久97| 国产欧美va欧美不卡在线| 蜜臀99久久精品久久久久久软件 | 国产精品 欧美精品| 欧美美女bb生活片| 亚洲伦理在线免费看| 成人国产精品免费观看视频| 久久亚洲精品小早川怜子| 免费欧美在线视频| 91.xcao| 亚洲高清免费在线| 日本韩国欧美在线| 亚洲免费色视频| 91啦中文在线观看| 中文字幕一区二区视频| 成人午夜视频在线| 国产女人aaa级久久久级| 国产精品一区一区三区| 精品国产制服丝袜高跟| 精品在线播放午夜| 亚洲精品一区二区三区香蕉| 久久精品国产秦先生| 欧美精品一区二区在线播放| 精品无人码麻豆乱码1区2区| 日韩三级.com| 国产在线一区二区综合免费视频| 欧美电影免费观看完整版| 美国一区二区三区在线播放| 精品少妇一区二区三区在线视频| 久久成人免费电影| 久久久久青草大香线综合精品| 国产成人在线看| 国产精品麻豆99久久久久久| aaa欧美大片| 亚洲精品成a人| 91精品国产综合久久精品app| 男女性色大片免费观看一区二区 | 亚洲最新视频在线播放| 91久久奴性调教| 午夜精品久久久久影视| 日韩视频中午一区| 国产91精品在线观看| 亚洲免费观看在线观看| 欧美日韩国产在线观看| 蜜臀av一区二区三区| 日本一区二区三区在线观看| 99re这里都是精品| 丝袜诱惑制服诱惑色一区在线观看| 日韩写真欧美这视频| 懂色一区二区三区免费观看 | 欧美日韩国产首页| 麻豆91免费看| 国产精品久久免费看| 欧美视频三区在线播放| 韩国成人在线视频|