2012-01-12 10 views
0

C#を使用して、画面の上部に特定のウィンドウを表示したいと思います。その後、マクロを実行します。アプリケーションウィンドウの先頭へ

しようとしました

[DllImportAttribute("User32.dll")] 
private static extern int FindWindow(String ClassName, String WindowName); 
[DllImportAttribute("User32.dll")] 
private static extern int SetForegroundWindow(int hWnd); 

とした後、

 string main_title; 
     Process[] processlist = Process.GetProcesses(); 
     foreach (Process theprocess in processlist) 
     { 
      if (theprocess.ProcessName.StartsWith(name)) 
      { 
       main_title = theprocess.MainWindowTitle; 
       hWnd = theprocess.Handle.ToInt32(); 
       break; 
      } 
      hWnd = FindWindow(null, main_title); 
      if (hWnd > 0) 
      { 
       SetForegroundWindow(hWnd); 
      } 

とエラーを得た、

型または名前空間名 'DllImportAttribute' が使用

を見つけることができませんでした、

using System.Runtime; 

今は私のコードでhWndを認識できませんが、それらはすべて同じ名前空間と部分クラスにあります。裁判の後

IntPtr hWnd; 
    Process[] processlist = Process.GetProcesses(); 
    foreach (Process theprocess in processlist) 
    { 
     if (theprocess.ProcessName.StartsWith("msnmsgr")) 
     { 
      main_title = theprocess.MainWindowTitle; 
      hWnd = theprocess.MainWindowHandle; 
      SetForegroundWindow(hWnd); 

     } 
    } 

ツールバーから選択されたように見えますが、それは見えになりません少なくともAlt + Tabキーの順序と用途に応じて、ウィンドウを前景のように、これが見えます。

+0

あなたがその使用前のhWnd変数を定義していないことを、と思われます。単に、コードの先頭に 'int hWnd;'を追加してください。 –

答えて

1

このように、代わりにDLLIMPORTを使用してみてください:

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool SetForegroundWindow(IntPtr hWnd); 

[DllImport("user32.DLL")] 
public static extern IntPtr FindWindow(string lpszClass, string lpszWindow); 

は次のようにhWndを定義:あなたの割り当てで

IntPtr hWnd; 

が行います。また

hWnd = theProcess.MainWindowHandle; // or use your theProcess.Handle 

、あなたのif文でそのブレークをウィンドウが見つかると、そのウィンドウをフォアグラウンドに設定しません。あなたのような何かに再作業そのコードセグメントを行う必要があります。

if (theprocess.ProcessName.StartsWith(name)) 
{ 
    main_title = theprocess.MainWindowTitle; 
    hWnd = theProcess.MainWindowHandle; 
} 
else 
    hWnd = FindWindow(null, main_title); 

if (hWnd != null && !hWnd.Equals(IntPtr.Zero)) 
{ 
    SetForegroundWindow(hWnd); 
    // may want to put your break here 
} 

ウィンドウクラス

Win32のがちょうど含まれているクラスで、すべてのDLLIMPORTの私は、複数のWin32子クラスにそれらを使用すると、上記の。

public class Window : Win32 
{ 
    public IntPtr Handle; 

    public Window(IntPtr handle) 
    { 
     Handle = handle; 
    } 

    public bool Visible 
    { 
     get { return IsWindowVisible(Handle); } 
     set 
     { 
      ShowWindow(Handle, value ? ShowWindowConsts.SW_SHOW : 
       ShowWindowConsts.SW_HIDE); 
     } 
    } 

    public void Show() 
    { 
     Visible = true; 
     SetForegroundWindow(Handle); 
     /* 
     try { SwitchToThisWindow(Handle, false); } // this is deprecated - may throw on new window platform someday 
     catch { SetForegroundWindow(Handle); } // 
     */ 
    } 

    public void Hide() { Visible = false; } 
} 

ShowWindowConstsクラス

namespace Win32 
{ 
    public class ShowWindowConsts 
    { 
     // Reference: http://msdn.microsoft.com/en-us/library/ms633548(VS.85).aspx 

     /// <summary> 
     /// Minimizes a window, even if the thread that owns the window is not responding. 
     /// This flag should only be used when minimizing windows from a different thread. 
     /// </summary> 
     public const int SW_FORCEMINIMIZE = 11; 

     /// <summary> 
     /// Hides the window and activates another window. 
     /// </summary> 
     public const int SW_HIDE = 0; 

     /// <summary> 
     /// Maximizes the specified window. 
     /// </summary> 
     public const int SW_MAXIMIZE = 3; 

     /// <summary> 
     /// Minimizes the specified window and activates the next top-level window in the Z order. 
     /// </summary> 
     public const int SW_MINIMIZE = 6; 

     /// <summary> 
     /// Activates and displays the window. 
     /// If the window is minimized or maximized, the system restores it to 
     /// its original size and position. 
     /// An application should specify this flag when restoring a minimized window. 
     /// </summary> 
     public const int SW_RESTORE = 9; 

     /// <summary> 
     /// Activates the window and displays it in its current size and position. 
     /// </summary> 
     public const int SW_SHOW = 5; 

     /// <summary> 
     /// Sets the show state based on the public const long SW_ value specified in 
     /// the STARTUPINFO structure passed to the CreateProcess function by 
     /// the program that started the application. 
     /// </summary> 
     public const int SW_SHOWDEFAULT = 10; 

     /// <summary> 
     /// Activates the window and displays it as a maximized window. 
     /// </summary> 
     public const int SW_SHOWMAXIMIZED = 3; 

     /// <summary> 
     /// Activates the window and displays it as a minimized window. 
     /// </summary> 
     public const int SW_SHOWMINIMIZED = 2; 

     /// <summary> 
     /// Displays the window as a minimized window. 
     /// This value is similar to public const long SW_SHOWMINIMIZED, 
     /// except the window is not activated. 
     /// </summary> 
     public const int SW_SHOWMINNOACTIVE = 7; 

     /// <summary> 
     /// Displays the window in its current size and position. 
     /// This value is similar to public const long SW_SHOW, except that the window is not activated. 
     /// </summary> 
     public const int SW_SHOWNA = 8; 

     /// <summary> 
     /// Displays a window in its most recent size and position. 
     /// This value is similar to public const long SW_SHOWNORMAL, 
     /// except that the window is not activated. 
     /// </summary> 
     public const int SW_SHOWNOACTIVATE = 4; 

     public const int SW_SHOWNORMAL = 1; 
    } 
} 

だからあなたのコードはなる:

if (theprocess.ProcessName.StartsWith(name)) 
{ 
    main_title = theprocess.MainWindowTitle; 
    hWnd = theProcess.MainWindowHandle; 
} 
else 
    hWnd = FindWindow(null, main_title); 

if (hWnd != null && !hWnd.Equals(IntPtr.Zero)) 
{ 
    new Window(hWnd).Show(); 
} 
+0

コードを編集しましたが、私たちはどこかに行っているようですが、ウィンドウを表示させることができません。 – Bartu

+0

目にすることは正面に持っていくこととは異なります。その部分を示すためにコードを編集します。 –

+0

お待ちしています、ありがとう、これらに関連した固体のC#チュートリアルですか? – Bartu

関連する問題