今天我现在可以获得最小化应用程序窗口的截图.例如,如果我打开Paint,即使Paint被最小化,我也会看到Paint主窗口的屏幕截图.
这个获取WindowsSnap的类有点长代码所以我将它添加到pastebin.com WindowSnap.cs
WindowSnapCollection类也将它添加到pastebin.com WindowSnapCollection.cs中
在form1顶部和构造函数我正在做:变量:
private Graphics g;
private Image img;
private Image imgClone;
Run Code Online (Sandbox Code Playgroud)
然后在构造函数中:
img = new Bitmap(pictureBoxSnap.Width, pictureBoxSnap.Height);
imgClone = new Bitmap(pictureBoxSnap.Width, pictureBoxSnap.Height);
Graphics g;
using (g = Graphics.FromImage(img))
{
g.Clear(Color.White);
}
pictureBoxSnap.Image = img;
this.listBoxSnap.Items.AddRange(WindowSnap.GetAllWindows(true, true).ToArray());
for (int i = listBoxSnap.Items.Count - 1; i >= 0; i--)
{
string tt = listBoxSnap.Items[i].ToString();
if (tt.Contains(" ,"))
{
listBoxSnap.Items.RemoveAt(i);
}
}
buttonSnap.Enabled = true;
string[] myList = new string[listBoxSnap.Items.Count];
for (int i = 0; i < listBoxSnap.Items.Count; i++) …Run Code Online (Sandbox Code Playgroud) 我试过这个:
userVideosDirectory = Directory.GetParent(Environment.GetFolderPath
(Environment.SpecialFolder.ApplicationData)).FullName + "\\Videos";
Run Code Online (Sandbox Code Playgroud)
但那给了我:
C:\Users\username\AppData\Videos
Run Code Online (Sandbox Code Playgroud)
但是我没有目录AppData:
C:\Users\username\Videos
Run Code Online (Sandbox Code Playgroud)
如何在没有AppData的情况下获取视频目录?
此方法仅返回进程文件名:
public static string GetProcessInfo(IntPtr hwnd)
{
uint pid = 0;
GetWindowThreadProcessId(hwnd, out pid);
Process proc = Process.GetProcessById((int)pid);
return proc.MainModule.FileName.ToString();
}
Run Code Online (Sandbox Code Playgroud)
但是我想要返回进程名称:
proc.ProcessName;
Run Code Online (Sandbox Code Playgroud) IntPtr handle = process.MainWindowHandle;
if (handle != IntPtr.Zero)
{
SetWindowPos(handle, 0, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW);
}
Run Code Online (Sandbox Code Playgroud)
然后,当我在构造函数中调用例如SetWindowPos时,应该给它什么?处理很好,我知道应该是什么。但是所有的resr 0,0,0,0,0,0以及SWP_NOZORDER和SWP_NOSIZE的值应该是多少?
我要做的是将手柄置于屏幕的正面和中央。把它放到最前面,我知道我正在使用的方法SetForegroundWindow(IntPtr hWnd);,并且工作正常。但是,如何使用SetWindowPos强制将其置于屏幕中央?