
windows下获取当前进程的话可以用dos命令tasklist
Runtime r=RuntimegetRuntime();
Process p=rexec("cmd /C tasklist");
BufferedReader reader=new BufferedReader(new InputStreamReader(pgetInputStream(),"gbk"));//windows的默认系统中文编码是gbk所以从cmd控制台的信息已gbk来解码
String line=null;
while((line=readerreadLine())!=null)
Systemoutprintln(line);
有的,获得指定进程句柄的方法很多
首先用 CreateToolhelp32Snapshot 获得系统快照然后用 Process32First 获得第一个进程然后用 Process32Next 获得下一个进程依次类推,然后判断如果是想呀的进程用 OpenProcess就可以打开这个进程,获得进程的句柄,然后你可以比如用 TerminateProcess 之类的结束进程
另外你说的那个API不知道有没有,我懒得去查,不过估计有有的话意思是
Get + Current + Process 翻译过来就是得到当前进程,返回值应该是个句柄算了帮你查下
HANDLE GetCurrentProcess(VOID)
解释是:The GetCurrentProcess function returns a pseudohandle for the current process
意思大致是这个API函数返回当前进程的句柄(pseudohandle 不知道什么意思应该是,没见过这个单词呵呵!)
1调用 GetConsoleTitle() 来保存当前的控制台窗口标题。
2调用 SetConsoleTitle() 来将控制台标题更改为一个唯一的标题。
3调用 Sleep(40),以确保已更新窗口标题。
4调用 FindWindow(NULL, uniquetitle),以获取 HWND,此调用将返回 HWND, 如果 *** 作失败,将返回 NULL。
5从步骤 1 中,若要恢复原始窗口标题检索调用 SetConsoleTitle() 的值。
应该测试结果的 HWND。例如可以测试是否返回的 HWND 对应于当前进程在 HWND 上调用 GetWindowText() 并将结果与 GetConsoleTitle() 进行比较。
示例代码
下面的函数中检索当前控制台应用程序窗口句柄 (HWND)。如果此函数成功,则返回值是控制台窗口的句柄。如果此函数失败,则返回值为 NULL。省略一些错误检查,为简洁起见。
HWND GetConsoleHwnd(void)
{
#define MY_BUFSIZE 1024 // Buffer size for console window titles
HWND hwndFound; // This is what is returned to the caller
char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
// WindowTitle
char pszOldWindowTitle[MY_BUFSIZE]; // Contains original
// WindowTitle
// Fetch current window title
GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
// Format a "unique" NewWindowTitle
wsprintf(pszNewWindowTitle,"%d/%d",
GetTickCount(),
GetCurrentProcessId());
// Change current window title
SetConsoleTitle(pszNewWindowTitle);
// Ensure window title has been updated
Sleep(40);
// Look for NewWindowTitle
hwndFound=FindWindow(NULL, pszNewWindowTitle);
// Restore original window title
SetConsoleTitle(pszOldWindowTitle);
return(hwndFound);
}
调用EnumWindows(EnumWindowsProc,0);
自己定义
BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
){
DWORD PID;
BOOL Result=TRUE;
GetWindowThreadProcessId(hwnd,PID);
if (PID=GetCurrentProcessId())
{
g_hwin = hwnd;//这个g_hwin在你的DLL里定义为一个全局的HWND,也是你想要的句柄
Result = FALSE;
}
return Result;
}
lz可以试试当然如果知道被注入的进程的窗口名称就不用enumwindow了,直接用FindWindow(NULL, _T("XXXXXX"))的返回值得一个hwnd,然后得到进程id,再判断
以上就是关于java如何获得其它程序句柄全部的内容,包括:java如何获得其它程序句柄、如何取得某进程的句柄 = =谢谢了、如何获取控制台窗口句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)