從本質上講,這種微型Windows窗體C#(.NET 3.5)的應用是有聆聽某個事件的問題。我的形式事件函數/將焦點設置僅適用於包含的MessageBox
我設置兩個按鈕,直接叫我的兩個主要功能(這些按鍵發送到另一個進程窗口,切換我的布爾顯示,如果它被髮送或沒有)。
是有問題的部分是,我要監控自動閃光,這兩個按鈕的功能相同功能的實際事件。該事件處理是不僅沒有成功,如果我不包括MessageBox.Show("Blah Blah");
例子:
public tester()
InitializeComponent();
wsiRemote.clsWsiEventsClass Events = new wsiRemote.clsWsiEventsClass();
Events.AuthorRecordStarted += new __clsWsiEvents_AuthorRecordStartedEventHandler(Events_AuthorRecordStarted);
private static bool _pedcheck = false;
public static void SendkeyT()
{
foreach (Process w in System.Diagnostics.Process.GetProcessesByName("WinScribe Internet Author"))
{
IntPtr hwnd = w.MainWindowHandle;
SetForegroundWindow(hwnd);
}
if (_pedcheck == false)
{
foreach (Process p in System.Diagnostics.Process.GetProcessesByName("Pedable"))
{
IntPtr hWnd = p.MainWindowHandle;
SetForegroundWindow(hWnd);
InputSimulator.SimulateKeyDown(VirtualKeyCode.CONTROL);
InputSimulator.SimulateKeyPress(VirtualKeyCode.VK_D);
InputSimulator.SimulateKeyUp(VirtualKeyCode.CONTROL);
_pedcheck = true;
}
else
{
MessageBox.Show("Boolean Failure");
}
}
public void button1_Click(object sender, EventArgs e)
{
SendkeyT();
}
public void Events_AuthorRecordStarted(string msg)
{
// MessageBox.Show("Recording Started");
SendkeyT();
}
如果我取消的消息框,它觸發關閉並顯示框給用戶。一旦用戶點擊好,該功能正常啓動。我注意到,如果我沒有包含消息框,正在發送密鑰並激活的窗口開始在任務欄中閃爍,所以我假設它與前臺設置有關。
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool SetForegroundWindow(IntPtr hWnd);
如果有人有任何建議,我將不勝感激。
謝謝!
「我已經注意到了,正在發送鍵和作出了積極的任務欄開始閃爍,如果我不包括在MessageBox窗口中的」閃爍的症狀聽起來,禁止應用程序從偷焦點操作系統設置。它可以在舊的TweakUI應用程序中使用,也可以通過編輯註冊表手動完成。目標系統偶然啓用了這個功能嗎? –
謝謝你的回覆@Idle_Mind。我只是檢查一下,我不認爲這是問題(據我所知)。我仍然無法解釋爲什麼按鈕方法工作正常,但基於API的鉤子不是(除非調用'MessageBox.Show')。從我所知道的情況來看,我認爲這可能與通過事件調用利用'object sender,EventArgs e'的按鈕有關。我將繼續關注用戶界面問題,感謝您的協助。你有沒有其他想法?再次感謝你! – mbeacom