我無法弄清楚如何讓關鍵字查找(HH_KEYWORD_LOOKUP
)在HTML幫助中工作。如果我有一個像這樣顯示的索引:HTML幫助關鍵字查找
Machine
Add
Edit
Selection
如何指定關鍵字搜索來調出機器選擇? 「Machine; Selection」調出Machine關鍵字; 「選擇」和「機器選擇」完全不起作用;如果用戶手動選擇適當的主題,即使「HTML幫助查看器」的「索引」選項卡中顯示的內容也不是「機器,選擇」。
我無法弄清楚如何讓關鍵字查找(HH_KEYWORD_LOOKUP
)在HTML幫助中工作。如果我有一個像這樣顯示的索引:HTML幫助關鍵字查找
Machine
Add
Edit
Selection
如何指定關鍵字搜索來調出機器選擇? 「Machine; Selection」調出Machine關鍵字; 「選擇」和「機器選擇」完全不起作用;如果用戶手動選擇適當的主題,即使「HTML幫助查看器」的「索引」選項卡中顯示的內容也不是「機器,選擇」。
我想我讀了(在我的很多谷歌搜索中)HH_KEYWORD_LOOKUP在HTML幫助中被打破,感嘆。所以我想出了這個解決方案來做一個搜索。它會調出chm文件並在搜索框中輸入關鍵字並按下ENTER鍵手動執行搜索。
procedure PostKey(aKey: Word; const aShift: TShiftState; aSpeciaKey: Boolean);
type
TShiftKeyInfo = record
shift: Byte;
vkey: Byte;
end;
byteset = set of 0..7;
const
shiftkeys: array [1..3] of TShiftKeyInfo =
((shift: Ord(ssCtrl); vkey: VK_CONTROL),
(shift: Ord(ssShift); vkey: VK_SHIFT),
(shift: Ord(ssAlt); vkey: VK_MENU));
var
flag: DWORD;
bShift: ByteSet absolute aShift;
i: Integer;
begin
for i := 1 to 3 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0);
end; { For }
if aSpeciaKey then
flag := KEYEVENTF_EXTENDEDKEY
else
flag := 0;
keybd_event(aKey, MapvirtualKey(aKey, 0), flag, 0);
flag := flag or KEYEVENTF_KEYUP;
keybd_event(aKey, MapvirtualKey(aKey, 0), flag, 0);
for i := 3 downto 1 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0),
KEYEVENTF_KEYUP, 0);
end; { For }
end;
procedure CHMSearch(aCHMFilename, aSearch: string);
var
cfn: string;
qry: THHFtsQuery;
hnd: HWND;
procedure DoSearch(aMsg: string);
var
i,n: Integer;
c: Char;
shift: TShiftState;
begin
if hnd = 0 then Exit;
Windows.SetFocus(hnd);
n := Length(aMsg);
if n > 0 then
begin
for i := 1 to n do
begin
c := aMsg[i];
shift := [];
case c of
'a'..'z': shift := [];
'A'..'Z': shift := [ssShift];
'_': // underscore key
begin
keybd_event(VK_SHIFT, 0, 0, 0);
keybd_event(VK_OEM_MINUS, 0, 0, 0);
keybd_event(VK_OEM_MINUS, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
continue;
end;
'$': // $ key
begin
PostKey(Ord('4'), [ssShift], False);
continue;
end;
end;
PostKey(Ord(UpCase(c)), shift, False);
end;
PostKey(VK_RETURN, [], False);
PostKey(VK_RETURN, [], False);
end;
end;
begin
cfn := ChangeFileExt(aCHMFilename, '.chm');
FillChar(qry, SizeOf(qry), 0);
qry.cbStruct := SizeOf(THHFtsQuery);
qry.fExecute := TRUE;
HH.HtmlHelpA(GetDesktopWindow, PAnsiChar(AnsiString(cfn)), HH_DISPLAY_TOC, 0);
hnd := HH.HtmlHelpA(GetDesktopWindow, PAnsiChar(AnsiString(cfn)), HH_DISPLAY_SEARCH,
Cardinal(@qry));
DoSearch(aSearch);
end;
AHAA!
經過一個小時的打字和嘗試,我發現第一關鍵字和第二關鍵字之間需要兩個空格,最後還需要一個「Enter」鍵來顯示從第二個關鍵字鏈接的主題! !
請記住,正好兩個空格!一個或三個不起作用。訣竅是,在鍵入第二個空格和第二個關鍵字的同時,其他一些關鍵字會在關鍵字列表中突出顯示,這會讓您認爲您已經犯了一個錯誤,並且不會繼續完成鍵入第二個關鍵字!這是微軟工程師的惡作劇嗎?
但是,雖然它手動工作,但似乎軟件API不能立即與TWO空間一起工作。如果我在C#中用F1鍵調用下面的API(在這裏我必須使用「空格」來表示空格,因爲如果我使用實際空間,該網站將兩個空格修剪爲一個):
System.Windows.Forms。 Help.ShowHelp(this,「file:/// C:/apps/MyHelpContentNew/QACT.chm」,System.Windows.Forms.HelpNavigator.KeywordIndex,「key2'space''space'x_subkey_of_key2」);
它不顯示從x_subkey_of_key2鏈接的主題。但它幾乎就在那裏,幫助窗口顯示正確的兩個級別的關鍵字放在搜索TextBox中,只是缺少一個「Car-Return」!
然後我試圖添加的車回這樣的:
System.Windows.Forms.Help.ShowHelp(這一點, 「文件:/// C:/apps/MyHelpContentNew/QACT.chm」 System.Windows.Forms.HelpNavigator.KeywordIndex,「key2'space''space'x_subkey_of_key2 \ n」);
它也不起作用。所以我想我需要將汽車返回鍵編程地發送給幫助窗口。如果我實施它,我會發布。