2014-11-27 3 views
0

Я пока не смог найти приемлемого решения этой проблемы.C# вывести окно перспективы на передний план

У меня есть внешнее приложение, которое запускает окно перспективы, и я хочу убедиться, что оно всегда появляется спереди. Это не все время. Например. если я перейду в Outlook, а затем вернусь к приложению и запустим задачу, он просто начнет мигать внизу.

Я пробовал несколько предложений с getinspector.Active() и т. Д., Но ничего не работает.

Некоторые примеры кода:

String address = "[email protected]"; 

Outlook.Application oApp = new Outlook.Application(); 
Outlook._MailItem oMailItem = (Outlook._MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem); 
oMailItem.To = address 

oMailItem.Body = "example"; 

oMailItem.Display(true); //true = modal which I need for this task, have tried without also. 

similar thread but with Delphi code that I do not know how to translate into c#

ответ

0

я не установлен внешний вид, но вы могли бы принести целое окно прогноз на фронт, если оно было сведено к минимуму:

 [DllImport("user32.dll")] 
     private static extern int SetForegroundWindow(IntPtr hWnd); 

     [DllImport("user32.dll")] 
     private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 
     private const int SW_SHOWNORMAL = 1; 
     private const int SW_RESTORE = 9; 

     Process proc = Process.GetProcessesByName("spotify").FirstOrDefault(); 
     if (proc != null) 
     { 
      ShowWindow(proc.MainWindowHandle, SW_SHOWNORMAL); // Make the window visible if it was hidden 
      ShowWindow(proc.MainWindowHandle, SW_RESTORE);  // Next, restore it if it was minimized 
      SetForegroundWindow(proc.MainWindowHandle);   // Finally, activate the window 
     } 

SetForegroundWindow: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633539(v=vs.85).aspx

ShowWindow: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633548%28v=vs.85%29.aspx

0

У вас есть конкретная проблема, переводящая функцию выборки из how to make the Outlook Compose window top most??

Если вы не можете сделать IOleWindows/AttachThreadInput/SetForegroundWindow работу, вы можете использовать Redemption и его SafeInspector/SafeInspector .Activate методы. Следующий сценарий VB перенесет основное окно Outlook на передний план:

set App = CreateObject("Outlook.Application") 
set sExplorer = CreateObject("Redemption.SafeExplorer") 
sExplorer.Item = App.ActiveExplorer 
sExplorer.Activate 
0

Вот код, который вам нужен. Недопустимым компонентом для вывода окна на передний план является «inspector.Activate()», и вы должны называть это после «mailItem.Display».

var outlookApp = new Microsoft.Office.Interop.Outlook.Application(); 
MailItem mailItem = outlookApp.CreateItem(OlItemType.olMailItem); 
mailItem.Subject = "subject"; 
var inspector = mailItem.GetInspector; // Force the "HTMLBody" property to be populated with any email signature, so that we can append it to our content. 
mailItem.HTMLBody = "My message" + mailItem.HTMLBody; 
mailItem.Attachments.Add("attachment.dat", OlAttachmentType.olByValue); 
mailItem.Display(false); // Display the email 
inspector.Activate(); // Bring the editor to the foreground. 
Смежные вопросы