Минимизация всех открытых окон в C #

Краткий ответ: если вы предоставите обработчик событий для события «успех» или «ошибка», вы можете поместить новый запрос внутри этого обработчика событий и не беспокоиться о том, что транзакция автоматически закрывается.

Длинный ответ: Транзакция должна быть полностью прозрачной. Единственное правило заключается в том, что вы не можете открыть транзакцию при выполнении «базы данных» без базы данных. То есть вы не можете запустить транзакцию, затем держите ее открытой, выполняя некоторые XMLHttpRequests или ожидая, когда пользователь нажмет кнопку.

Как только вы перестанете размещать запросы на транзакцию и обратный вызов последнего запроса завершение транзакции автоматически закрывается.

Однако вы можете начать транзакцию, использовать эту транзакцию для чтения некоторых данных, а затем написать некоторые результаты.

Поэтому убедитесь, что у вас есть все данные, которые вам нужны, прежде чем вы начнете транзакцию, а затем выполните все чтения и записи, которые вы хотите сделать в обратных вызовах запроса. После того, как вы закончите, транзакция будет автоматически завершена.

13
задан Jon Seigel 20 March 2010 в 20:46
поделиться

5 ответов

PInvoke.net - ваш друг: -)

using System;
using System.Runtime.InteropServices;

namespace ConsoleApplication1 {
class Program {
    [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    [DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true)]
    static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam);

    const int WM_COMMAND = 0x111;
    const int MIN_ALL = 419;
    const int MIN_ALL_UNDO = 416;

    static void Main(string[] args) {
        IntPtr lHwnd = FindWindow("Shell_TrayWnd", null);
        SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL, IntPtr.Zero); 
        System.Threading.Thread.Sleep(2000);
        SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL_UNDO, IntPtr.Zero);
    }
}
}
28
ответ дан 1 December 2019 в 18:13
поделиться

На сайте www.pinvoke.net есть много необходимой информации. Например, эта статья о SendMessage и FindWindow:

http://www.pinvoke.net/default.aspx/user32.SendMessage http://www.pinvoke.net/default.aspx/user32.FindWindow

Это, конечно, технически - но в основном вы используете p / invoke для вызова функций FindWindow и SendMessage API, чтобы выполнить то, что вы хотите. =)

6
ответ дан 1 December 2019 в 18:13
поделиться

Аналогичного результата можно достичь, отправив эти события клавиатуры, чтобы вызвать всплывающее меню панели задач и отправьте ему письмо "M":

public class DesktopHelper
{
    [DllImport("user32.dll")]
    static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

    /// <summary>
    /// Shows the desktop.
    /// </summary>
    public static void ShowDesktop()
    {
        keybd_event(0x5B, 0, 0, 0);
        keybd_event(0x4D, 0, 0, 0);
        keybd_event(0x5B, 0, 0x2, 0);
    }
}
4
ответ дан 1 December 2019 в 18:13
поделиться

Ранее я писал в блоге о том, как минимизировать и максимизировать использование P / Invoke из C #: http://improve.dk/minimizing-and-maximizing-windows/

3
ответ дан 1 December 2019 в 18:13
поделиться

Не совсем простой способ, но ручной способ - вызвать реализацию C ++. http://pinvoke.net помогает:

результаты поиска findwindow: http://pinvoke.net/search.aspx?search=findwindow&namespace= [All]

примерно четвертый В твоем случае помогает результат down.

1
ответ дан 1 December 2019 в 18:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: