110,571
社区成员
发帖
与我相关
我的任务
分享
//改下这个就可以
static void _Load_LoadMessage(string path)
{
Form1 f1 = (Form1 )Application.OpenForms["Form1"];
if(f1 != null)
{
f1.WindowState = FormWindowState.Maximized;
f1.Activate();
}
}
using System;
using System.Diagnostics;
namespace test
{
public class Demo
{
public static void Main(string[] args)
{
Process[] p = Process.GetProcesses();
string processname = "egui";
if (CheckProcess(p,processname))
{
Console.WriteLine("the process is exist!");
}
}
private static bool CheckProcess(Process[] process,string name)
{
bool check = false;
foreach (Process p in process)
{
if (p.ProcessName == name)
{
check = true;
break;
}
}
return check;
}
}
}
引入
#include <Tlhelp32.h>
然后加入如下代码
DWORD m_pId;
DWORD m_thId;
BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
)
{
THREADENTRY32 th;
th.dwSize = sizeof(THREADENTRY32);
HANDLE hThHandle = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
BOOL thr = Thread32First(hThHandle, &th);
DWORD thId;
while(thr)
{
if(th.th32OwnerProcessID == m_pId)
{
thId = th.th32ThreadID;
break;
}
thr = Thread32Next(hThHandle, &th);
}
DWORD proid;
::GetWindowThreadProcessId(hwnd, &proid);
if(proid == m_pId && m_thId == thId)
{
::ShowWindow(hwnd, SW_SHOW);
::SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
::SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
return FALSE;
}
return TRUE;
}
_declspec(dllexport) void OpWnd(DWORD processId, DWORD mainThId)
{
m_pId = processId;
m_thId = mainThId;
::EnumWindows(EnumWindowsProc, NULL);
}
最后在源文件夹xxx.def最末行声明到处函数名OpWnd
编译后将dll复制到c#生成文件夹中
[Dllimport("dll名字")]
public static extern void OpWnd(uint processId, uint mainThid);
第一个参数是进程id,第二个参数是进程主窗口线程id