現在我在處理F1鍵的程序中也使其工作。在處理F1鍵,我叫這個API來啓動幫助窗口和填充用兩個空格分開的兩個級別的關鍵字關鍵字文本框:
{
System.Windows.Forms.Help.ShowHelp(this, "file:///C:/apps/MyHelpContentNew/QACT.chm",
System.Windows.Forms.HelpNavigator.KeywordIndex, "key2 x_subkey_of_key2");
}
然後,我需要發送一個「ENTER」鍵,它幫助窗口。我讀了一些MSDN文檔,想通過以下方法將「ENTER」鍵發送到該窗口:
首先,我們需要調用Win32函數EnumChildWindows()來查找所有打開的窗口。 Win32函數將回調C#以處理每個打開的窗口。所以當調用Win32函數時,我們需要傳遞一個C#函數作爲回調函數。這個C#函數被定義爲一個Delegate,在其中我們可以過濾出HTML幫助窗口併發送「ENTER」鍵給它。 HTML幫助窗口通常稱爲您的應用程序名稱+幫助。例如,如果您的應用程序名爲「XYZ」,則由ShowHelp()啓動的HTML幫助窗口稱爲「XYZ幫助」。下面是代碼:
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
class YourClass {
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
// declare the delegate
public delegate bool WindowEnumDelegate(IntPtr hwnd,
int lParam);
// declare the API function to enumerate child windows
[DllImport("user32.dll")]
public static extern int EnumChildWindows(IntPtr hwnd,
WindowEnumDelegate del,
int lParam);
// declare the GetWindowText API function
[DllImport("user32.dll")]
public static extern int GetWindowText(IntPtr hwnd,
StringBuilder bld, int size);
//define your callback function:
public static bool WindowEnumProc(IntPtr hwnd, int lParam)
{
// get the text from the window
StringBuilder bld = new StringBuilder(256);
GetWindowText(hwnd, bld, 256);
string text = bld.ToString();
if (text.Length > 0)
{
if (text == "XYZ Help")
{
//IntPtr h = p.MainWindowHandle;
SetForegroundWindow(hwnd);
SendKeys.Send("{ENTER}");
}
}
return true;
}
//在您的F1鍵處理,之後通過調用ShowHelp(啓動幫助窗口),實例化//回調函數委託,並調用EnumChildWindows():
private void GenericTreeView_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F1)
{
System.Windows.Forms.Help.ShowHelp(this, "file:///C:/apps/MyHelpContentNew/QACT.chm",
System.Windows.Forms.HelpNavigator.KeywordIndex, "key2 x_subkey_of_key2");
// instantiate the delegate
WindowEnumDelegate del
= new WindowEnumDelegate(WindowEnumProc);
// call the win32 function
EnumChildWindows(IntPtr.Zero, del, 0);
}
}
}
瞧!
您將看到按下F1鍵後,幫助窗口很好地打開了正確的HTML文件,並滑動到兩級關鍵字指向的錨!
順便說一句,我發現把索引放在HTML文件中並沒有幫助(即使我啓用了在HTML文件中使用關鍵字的選項)。我必須明確地將關鍵字放在關鍵字文件中。
享受!
相似(或重複):[HTML幫助關鍵字查找](http://stackoverflow.com/q/563012/113116) – Helen